TKE:记一次由于看不到的 Pod 导致 PVC 无法删除的调查

299 阅读2分钟

删除测试环境的一个 PVC ( pvc-mmdz-webfont ) 时,状态一直显示为 “ 已于2023-05-05 15:48:38标记删除,待绑定的Pod删除后删除。 ” 。但奇怪的是使用这个 PVC 的 Pod 早就关掉了,在 TKE 的门户页面上对应的 Deployment 下也已经没有任何 Pod 了。

最后通过 kubectl 工具才找到这个 PVC 关联的 Pod 1

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:

yum -y install jq

执行结果中看到了如下一条记录:

{"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 工具 。

kubectl get pods -n mmdz-test
  • -n 用来指定命名空间(下同)。

结果中看到如下一条记录:

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 的详细信息:

kubectl describe po mmdz-ui-webfont-api-deploy-cf4c7944d-6dzn2 -n mmdz-test

使用 kubectl delete 命令删除这个 Pod :

kubectl delete po mmdz-ui-webfont-api-deploy-cf4c7944d-6dzn2 -n mmdz-test

如果删不掉可以添加 --force 参数强制删除:

kubectl delete po mmdz-ui-webfont-api-deploy-cf4c7944d-6dzn2 -n mmdz-test --force

删除这个 Pod 后,文章刚开始删除的 PVC 就会自动被移除了。

版权声明:本文为博主「佳佳」的原创文章,遵循 CC 4.0 BY-NC-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:www.liujiajia.me/2023/5/5/tk…

Footnotes

  1. kubernetes 查看哪些 pod 正在使用 pvc

  2. Linux下处理JSON的命令行工具:jq---安装