现场是这样的。K8s 1.26 节点重启后 containerd 一直起不来,journalctl 里是 failed to mount overlay: invalid argument,/var/lib/containerd 所在分区 df 显示还有空间。

中间走过弯路,把「上次异常退出留下了残留的 overlay 挂载点,新的一次挂载冲突」当成主因,改完现象没变。

真正麻烦的地方在于,几个原因的现象几乎一样。上层文件系统是 ext4 但没开 d_type,overlay2 需要它才能工作;分区被挂成了 noacl 或者用了不支持的块大小,overlay 挂载参数被拒;SELinux 处于 enforcing,containerd 没有对应策略写不了目录。

上来先看具体挂载失败的原因

journalctl -u containerd -n 50 --no-pager | grep -i overlay

接着确认文件系统是否支持 d_type

xfs_info /var/lib/containerd | grep -i ftype

随后清掉残留挂载点再重启

mount | grep overlay | awk '{print $3}' | xargs -r umount -l

剩下的就是按需切换存储驱动后重启服务

sed -i 's/SystemdCgroup.*/SystemdCgroup = true/' /etc/containerd/config.toml && systemctl restart containerd

白天有业务在跑,能验证的部分都压到了晚上做。

怎么算真的好了,看的是同一批现象。systemctl status containerd 显示 active,ctr plugins ls 里 overlayfs 为 ok,节点上 Pod 能正常创建。

补一句。xfs 建盘时没加 ftype=1 只能重建,事后改不了;换驱动会丢掉现有镜像,先确认能接受重新拉取再动。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189