Kubernetes Master节点周期性崩溃及kubelet服务异常求助
Kubernetes Master节点周期性崩溃排查与修复
核心问题定位
从现象和日志来看,问题根源集中在容器运行时网络未就绪(NetworkPluginNotReady),以及由此引发的kube-scheduler、kube-controller-manager、kube-proxy等核心组件启动失败,最终导致kube-apiserver(6443端口)服务中断。
分步修复方案
1. 解决容器运行时冲突与配置问题
你同时安装了Docker和containerd,两者可能抢占资源或导致Kubernetes运行时识别混乱,优先保留containerd作为Kubernetes的容器运行时:
- 停止并禁用Docker服务:
systemctl stop docker systemctl disable docker - 重启containerd确保正常运行:
systemctl restart containerd - 验证kubelet是否正确指向containerd端点:
编辑kubelet配置文件(通常为/var/lib/kubelet/config.yaml或/etc/kubernetes/kubelet.conf),确保以下配置存在:runtimeEndpoint: unix:///run/containerd/containerd.sock - 重启kubelet:
systemctl restart kubelet
2. 部署CNI网络插件解决NetworkPluginNotReady错误
Kubernetes集群必须配置CNI网络插件才能让Pod正常通信,否则核心组件会因网络依赖失败而崩溃:
- 选择符合你Kubernetes版本的CNI插件(如Calico、Flannel等),下载对应的部署yaml文件后执行:
kubectl apply -f 插件部署文件名.yaml - 等待插件部署完成,验证节点网络状态:
确认节点kubectl get nodes -o wideSTATUS变为Ready。
3. 排查核心组件崩溃细节
查看崩溃组件的具体日志,定位启动失败原因:
- 查看kube-scheduler日志:
kubectl logs -n kube-system kube-scheduler-dt-control --previous - 查看kube-controller-manager日志:
kubectl logs -n kube-system kube-controller-manager-dt-control --previous - 常见问题包括配置文件错误、证书失效、CPU/内存资源不足,根据日志提示针对性修复。
4. 验证kube-apiserver状态
6443端口连接被拒通常是apiserver崩溃导致,查看apiserver系统日志:
journalctl -u kube-apiserver -f
重点排查:6443端口是否被其他服务占用、证书文件权限是否正确(需对kube-apiserver进程可读)、节点内存是否充足(apiserver需要足够内存维持运行)。
验证修复效果
完成上述步骤后,执行以下命令确认集群状态:
kubectl get nodes kubectl get pods -n kube-system
等待所有核心组件(coredns、kube-proxy、kube-scheduler、kube-controller-manager)状态变为Running,节点状态为Ready,此时集群可正常使用。
内容的提问来源于stack exchange,提问作者g.pickardou
相关产品推荐
相关产品推荐

