删除孤立 pod-volume 目录失败
本文永久链接: https://www.xtplayer.cn/longhorn/failure-to-delete-orphaned-pod-volume-directory/
适用版本
所有 Longhorn 版本。
Kubernetes v1.28
版本,向后移植的 PRv1.27
正在等待合并。
症状
如果工作节点发生故障,在托管活动 Pod 时,随着节点停机并等待恢复,这些 Pod 会被正常驱逐。在此期间,负责管理节点的 kubelet 会每隔两秒生成如下错误消息。
orphaned pod <pod-uid> found, but error not a directory occurred when trying to remove the volumes dir |
原因
当节点经历停机状态,然后需要一段时间才能进入恢复阶段时,就会出现这种情况。在此过程中,受影响的 Pod 会被驱逐并重新定位到其他节点。但是,由于中断,kubelet 和 longhorn-csi-plugin 之间的连接被切断。因此,kubelet在删除vol_data.json
文件时遇到了困难。此进程用于执行自我管理任务,以清理与被逐出的 Pod 关联的孤立卷挂载点。kubelet 虽然能够删除目录,但无法删除单个文件,从而导致在这种特定情况下清理不完整。(源代码)。
解决方案
一旦节点和 kubelet 恢复,longhorn-csi-plugin 将自动重启,允许 Pod 重新挂载卷并恢复其运行状态。
但是,如果 Pod 及其关联卷被重新调度到不同的节点,从而在vol_data.json
崩溃的节点上留下延迟文件,则需要手动干预。您需要手动删除vol_data.json
该目录中的文件/var/lib/kubelet/pods/<pod-uid>/volumes/kubernetes.io~csi/pvc_<pod-uid>/
。
在当前的 Kubernetes master 分支中,该问题已在 version 中得到解决1.28.x
,从而确保孤立的 Pod 卷挂载点在协调循环中得到正确清理。此外,解决该问题的 PR 已向后移植到版本1.27
,目前正在等待合并过程。
相关信息
- 相关 Longhorn 问题:longhorn/longhorn#3207
- 相关 Kubernetes 问题和 PR