TKE:记一次由于看不到的 Pod 导致 PVC 无法删除的调查
🏷️ TKE
删除测试环境的一个 PVC( pvc-mmdz-webfont )时,状态一直显示为 “ 已于 2023-05-05 15:48:38 标记删除,待绑定的 Pod 删除后删除。 ” 。但奇怪的是使用这个 PVC 的 Pod 早就关掉了,在 TKE 的门户页面上对应的 Deployment 下也已经没有任何 Pod 了。
最后通过 kubectl 工具才找到这个 PVC 关联的 Pod [1]。
bash
kubectl get pods --all-namespaces -o=json | jq -c '.items[] | {name: .metadata.name, namespace: .metadata.namespace, claimName:.spec.volumes[] | select( has ("persistentVolumeClaim") ).persistentVolumeClaim.claimName }'
上面脚本的功能是查看所有命名空间中关联了 PVC 的 Pod。
这个脚本需要服务器安装解析 JSON 的 jq 工具[2]:
bashyum -y install jq
执行结果中看到了如下一条记录:
json
{"name":"mmdz-ui-webfont-api-deploy-cf4c7944d-6dzn2","namespace":"mmdz-test","claimName":"pvc-mmdz-webfont"}
在 TKE 门户页面上找不到这个名为 mmdz-ui-webfont-api-deploy-cf4c7944d-6dzn2 的 Pod,还是要靠 kubectl 工具。
bash
kubectl get pods -n mmdz-test
-n
用来指定命名空间(下同)。
结果中看到如下一条记录:
bash
NAME READY STATUS RESTARTS AGE
mmdz-ui-webfont-api-deploy-cf4c7944d-6dzn2 0/1 Terminating 3 177d
这是一个 177 天前创建的 Pod,一直处于 Terminating 状态。而且这个 Pod 的 Age 比对应的 Deployment 的 Age 还要大,也就是说这个 Pod 应该是之前已经删除了的同名 Deployment 关联的 Pod。
如有需要可以通过 kubectl describe 指令查看这个 Pod 的详细信息:
bash
kubectl describe po mmdz-ui-webfont-api-deploy-cf4c7944d-6dzn2 -n mmdz-test
使用 kubectl delete 命令删除这个 Pod:
bash
kubectl delete po mmdz-ui-webfont-api-deploy-cf4c7944d-6dzn2 -n mmdz-test
如果删不掉可以添加 --force
参数强制删除:
bash
kubectl delete po mmdz-ui-webfont-api-deploy-cf4c7944d-6dzn2 -n mmdz-test --force
删除这个 Pod 后,文章刚开始删除的 PVC 就会自动被移除了。