我们有一个每“x”分钟运行一次的 CronJob。
对于每个计划,都会安排一个 Pod,该 Pod 会运行并执行其工作。
现在,2-3 天后,Pod 进入待处理状态,并且现在 Pod 没有执行其工作,甚至没有进入运行状态。
Pod 在创建时还将尝试挂载一些 NFS 挂载路径。
我们进行调查发现,启动/调度此 Pod 的节点的 Inotify 监视计数限制已超出 8192。
我还尝试使用增加 Inotify 限制
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
但同样的问题仍然存在。
我尝试捕获 CronJob 的 Pod 正在调度的节点上的 kubelet 日志。
我发现下面的日志被迭代了很多次。我明白当完成其工作的 pod 被清理时,kubelet 无法卸载 NFS 路径。
注意:下面的日志是一行,为了更好地查看,我将其分成几行。
工作节点:RHEL 7.6(也尝试过 7.9,但出现相同问题)
内核版本:3.10
Kubelet 版本:1.23.6
正在努力解决这个问题。任何建议都会有帮助。
kubelet[1784]: E0630 03:42:39.927719 1784 nestedpendingoperations.go:335] Operation for "{volumeName:kubernetes.io/nfs/8da4fd7a-dbff-429a-a470-3c09e19a1670-infra-pv-xxxxx
podName:8da4fd7a-dbff-429a-a470-3c09e19a1670 nodeName:}" failed.
No retries permitted until 2022-06-30 03:44:41.927675124 -0400 EDT m=+37538.561944740 (durationBeforeRetry 2m2s).
Error: error cleaning subPath mounts for volume "infra" (UniqueName: "kubernetes.io/nfs/8da4fd7a-dbff-429a-a470-3c09e19a1670-infra-pv-xxxx")
pod "8da4fd7a-dbff-429a-a470-3c09e19a1670" (UID: "8da4fd7a-dbff-429a-a470-3c09e19a1670") :
error processing /var/lib/kubelet/pods/8da4fd7a-dbff-429a-a470-3c09e19a1670/volume-subpaths/infra-pv-xxxx/cronjob:
error cleaning subpath mount /var/lib/kubelet/pods/8da4fd7a-dbff-429a-a470-3c09e19a1670/volume-subpaths/infra-pv-xxxxx/cronjob/6:
无法卸载路径 /var/lib/kubelet/pods/8da4fd7a-dbff-429a-a470-3c09e19a1670/volume-subpaths/infra-pv-xxxxx/cronjob/6
答案1
这是一个 Kubelet 错误。
公共关系:https://github.com/kubernetes/kubernetes/pull/110973 将在 1.25 版本下发布