在私有环境中搭建了k8s集群(opensuse15.1 + kubernetes 1.18 + cri-o 1.17),k8s和应用的镜像均在本地通过 podman 导入,
底层 OCI 使用的是 cri-o。
在测试过程中发现每次 node 节点重启后都会有一些镜像丢失,基本上 kube-proxy 和 flannel 每次都会丢失,
有的时候会有更多的镜像丢失。分析这些丢失的镜像很有规律,不是随机丢的,也没有发现其他文件丢失的情况,所以排除文件系统故障,怀疑可能是某些进程干的。于是禁止了比较可疑的kubelet服务,再次重启发现没有丢失镜像。检查 /usr/lib/systemd/system/kubelet.service 文件,看到 ExecStart=/usr/bin/kubelet ,这是个shell脚本,打开这个脚本加入一行 sleep 60,目的是系统启动后在启动真正的kubelet程序前我先检查一下镜像的情况:
#!/bin/sh
# Loader Script for Multi-Version Kubelet arrangement introduced to openSUSE in March 2020
sleep 60 ### 先休眠 60秒
source /etc/sysconfig/kubeletif [ -z "$KUBELET_VER" ]
then
echo "ERROR: KUBELET_VER= not defined in /etc/sysconfig/kubelet"
exit 1
else
/usr/bin/kubelet$KUBELET_VER "$@"
fi

本文记录了一次在私有k8s集群中遇到的节点重启后镜像丢失问题的排查过程。问题由cri-o服务在启动时因缺少version文件而触发的清理操作引起。解决方案包括创建/var/lib/crio目录,更新crio配置文件以指定持久化version文件路径,并将crio版本升级到1.18以上。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



