欢迎关注我的公众号「DevOps和k8s全栈技术」,进公众号【服务】栏,可以看到技术群,点击即可加入学习交流群。↓↓↓
在 Kubernetes 集群中,kube-scheduler Pod 作为集群控制平面组件的核心之一,其启动失败可能会导致调度功能不可用。本文将以一次真实的排查过程为例,分享如何解决 kube-scheduler Pod 启动失败的问题。
通过查看 kube-scheduler Pod 的详细信息,发现 Pod 的状态异常,日志如下:

Normal Pulled 6m35s (x335 over 40h) kubelet Container image "registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.25.0" already present on machineWarning Failed 3m14s (x12 over 4m53s) kubelet Error: failed to reserve container name "kube-scheduler_kube-scheduler-master1_kube-system_e62a843911b3baeecef776971ec1cc66_5": name "kube-scheduler_kube-scheduler-master1_kube-system_e62a843911b3baeecef776971ec1cc66_5" is reserved for "830ab0f0a4e17a39e2b1d254038f05bf84aa586e39da300a2a4cd97c77bab4f0"
使用 ctr 工具查看当前占用的容器。由于 Kubernetes 使用容器运行时 containerd,我们需要通过 ctr 命令检查占用资源的容器。
# 查看占用容器的详细信息ctr -n=k8s.io containers list --quiet | grep <CONTAINER_ID>
替换 <CONTAINER_ID> 为日志中报错的容器 ID,例如:830ab0f0a4e17a39e2b1d254038f05bf84aa586e39da300a2a4cd97c77bab4f0。
先停止相关的运行任务。
# 停止任务ctr -n=k8s.io tasks kill 830ab0f0a4e17a39e2b1d254038f05bf84aa586e39da300a2a4cd97c77bab4f0
停止任务后,删除异常容器。
# 删除容器ctr -n=k8s.io containers delete 830ab0f0a4e17a39e2b1d254038f05bf84aa586e39da300a2a4cd97c77bab4f0
在清理容器后,重新启动 Kubelet 服务以刷新节点状态。
# 重启 Kubelet 服务systemctl restart kubelet
重启 Kubelet 服务后,检查 kube-scheduler Pod 是否恢复正常。
# 查看 Pod 状态kubectl get pod -n kube-system# 查看 Pod 详细信息kubectl describe pod kube-scheduler -n kube-system
如果 Pod 已恢复到 Running 状态,说明问题已解决。
近期热文:
打造高效 Kubernetes 集群:深入解析 K3s 的嵌入式容器镜像共享机制
欢迎关注我的公众号「DevOps和k8s全栈技术」,进公众号【服务】栏,可以啃到技术群,点击即可加入学习交流群。↓↓↓
创作不易,关注,赞,在看,三连支持一波,感谢。↓↓↓
原文作者:DevOps和k8s全栈技术;如有侵权,请联系管理员删除。