Kubernetes 1.24+ 移除了 dockershim,节点需要从 Docker Engine 切换到 containerd(或其他 CRI 运行时)。适用于 kubeadm 自建集群和部分托管节点。
kubectl get nodes -o wide
systemctl status docker kubelet
cat /var/lib/kubelet/kubeadm-flags.env
kubectl drain <node> --ignore-daemonsets --delete-emptydir-data
apt install containerd.io
containerd config default > /etc/containerd/config.toml
确保启用 systemd cgroup:
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
SystemdCgroup = true
配置镜像仓库/加速和 sandbox 镜像后重启:
systemctl enable --now containerd
systemctl restart containerd
crictl info
# /var/lib/kubelet/kubeadm-flags.env
--container-runtime-endpoint=unix:///run/containerd/containerd.sock
systemctl daemon-reload
systemctl restart kubelet
kubectl get nodes -o wide
kubectl uncordon <node>
kubectl get pods -A -o wide | grep <node>
crictl info 显示 containerd 正常。Ready,Pod 能正常创建和拉取镜像。ContainerCreating。crictl 与 docker 命令不同,排障脚本要改。crictl — 节点容器诊断containerd — 运行时kubectl — 节点与 Podsystemctl — 服务管理合上页面,先回答,再展开对照。
crictl info 正常、节点 Ready、Pod 能创建和拉取镜像、Service/Ingress/跨节点网络正常且 kubelet 日志无 CRI 错误,再执行 kubectl uncordon。