Kubernetes节点无法加入集群:CRI运行时报错求助
错误含义解析及排查方案
错误核心含义
你遇到的[ERROR CRI]: container runtime is not running伴随的rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService错误,本质是Kubernetes组件(kubelet)与工作节点上的容器运行时之间的CRI(容器运行时接口)版本不兼容:
- 当前kubelet(对应你新部署的主节点K8s版本)尝试调用CRI的
runtime.v1alpha2版本接口与容器运行时通信 - 但工作节点上的容器运行时(如Docker、containerd)要么未启用对应版本的CRI接口,要么仅支持其他版本的CRI规范,导致无法响应kubelet的调用,最终被判定为“容器运行时未运行”。
结合你的场景:工作节点此前可对接K8s 1.20版本集群,而新部署的主节点K8s版本大概率更高(比如1.24+),版本差异引发了CRI接口的兼容问题。
排查与修复步骤
- 检查版本兼容性:确认主节点K8s版本与工作节点容器运行时的兼容关系。例如K8s 1.24及以上版本不再默认支持Docker的原生CRI接口,需安装
cri-dockerd作为中间层提供兼容支持。 - 验证容器运行时CRI配置:
- 若使用containerd:检查
/etc/containerd/config.toml中是否启用了CRI接口,且配置的CRI版本与kubelet要求匹配,修改后重启containerd服务:sudo systemctl restart containerd - 若使用Docker:确保已安装
cri-dockerd,并配置kubelet指向正确的CRI端点(unix:///var/run/cri-dockerd.sock)
- 若使用containerd:检查
- 确认kubelet配置:检查kubelet启动参数中的
--container-runtime-endpoint是否指向当前容器运行时的CRI套接字路径,确保路径正确后重启kubelet:sudo systemctl restart kubelet - 忽略无关日志:你提到的
/var/lib/kubelet/config.yaml缺失属于正常现象,该文件会在kubeadm join成功后自动生成,无需提前创建。
内容的提问来源于stack exchange,提问作者Dean Schulze
相关产品推荐
相关产品推荐

