kubectl-kill 是一个 kubectl 插件,提供了 kube-killer 的 Serverless 功能,可以直接通过 kubectl kill 命令来删除未使用的 Kubernetes 资源。
# 构建插件
make build-kubectl-plugin
# 安装到 ~/bin(默认)
make install-kubectl-plugin
# 或安装到 /usr/local/bin
make install-kubectl-plugin PREFIX=/usr/local/bin# 构建插件
go build -o kubectl-kill ./cmd/kubectl-kill
# 复制到 PATH 中的目录
cp kubectl-kill ~/bin/
chmod +x ~/bin/kubectl-kill
# 确保 ~/bin 在 PATH 中
export PATH=$PATH:$HOME/bin# 如果使用 krew 管理 kubectl 插件
kubectl krew install kill安装完成后,运行以下命令验证插件是否正常工作:
kubectl kill --help如果看到帮助信息,说明插件安装成功。
# 删除未使用的 Pod
kubectl kill pod
# 删除未使用的 Pod(指定命名空间)
kubectl kill pod -n default
# 删除所有命名空间(除 kube-system)中的未使用 Pod
kubectl kill pod -A
# 干运行模式(只显示将要删除的资源,不实际删除)
kubectl kill pod -d
# 交互模式(删除前确认)
kubectl kill pod -ipod,po,p- 删除 Completed/Failed 状态的 Poddeployment,deploy,d- 删除 Deploymentservice,svc,s- 删除没有 Pod 的 Servicepvc- 删除未使用的 PVCpv- 删除未使用的 PVjob,jobs- 删除 Completed/Failed 的 Jobconfigmap,cm- 删除未使用的 ConfigMapsecret,secrets- 删除未使用的 Secretnode,no,n- 删除 Node(需要指定节点名称)
# 删除所有命名空间中未使用的 Pod
kubectl kill pod -A
# 删除 default 命名空间中未使用的 Service
kubectl kill service -n default
# 删除所有未使用的 PVC(所有命名空间)
kubectl kill pvc -A
# 删除未使用的 PV(集群级别,不需要命名空间)
kubectl kill pv
# 删除未使用的 Secret(交互模式)
kubectl kill secret -A -i
# 干运行:查看将要删除的 ConfigMap
kubectl kill configmap -n default -d-n, --namespace string: 指定工作命名空间(默认: "default")-A, --all-namespaces: 如果为 true,删除所有命名空间(除 kube-system)中的目标资源-d, --dryrun: 干运行模式,只显示将要删除的资源,不实际删除-i, --interactive: 交互模式,删除前会提示确认
- 权限要求: 需要 Kubernetes 集群的管理员权限
- 谨慎使用: 删除操作不可逆,建议先使用
-d参数进行干运行 - 命名空间保护:
kube-system命名空间默认被排除,不会被删除 - 资源类型: 不同资源类型的删除逻辑不同:
- Pod: 删除 Completed/Failed 状态的 Pod
- Service: 删除没有关联 Pod 的 Service
- PVC/PV: 删除未使用的存储资源
- Job: 删除 Completed/Failed 的 Job
如果运行 kubectl kill 时提示 "kubectl: 'kill' is not a kubectl command",请检查:
-
插件文件是否在 PATH 中:
which kubectl-kill
-
插件文件是否有执行权限:
ls -l $(which kubectl-kill) -
确保插件文件名正确:必须是
kubectl-kill(不是kubectl-kill.exe或其他)
如果遇到权限错误,请确保:
- kubeconfig 配置正确
- 当前用户有足够的 Kubernetes 权限
- 可以运行
kubectl get pods等基本命令
kube-killer kill- 原始 CLI 命令kubectl kill- kubectl 插件形式,功能相同但更符合 kubectl 使用习惯
两者功能相同,只是调用方式不同。