k8s controller-manager 组件无限重启如何解决?

文章导读
kube-controller-manager 无限重启通常由证书过期、资源不足或与 API Server 通信故障引起,优先查看容器日志定位具体报错。
📋 目录
  1. A 命令速用版
  2. B 为什么会这样
  3. C 分步处理
  4. D 怎么验证是否生效
  5. E 常见坑
  6. F 参考来源
A A

kube-controller-manager 无限重启通常由证书过期、资源不足或与 API Server 通信故障引起,优先查看容器日志定位具体报错。

先说结论:大多数重启是因为证书过期或资源超限,先查日志再动配置。

  • 先确认:查看容器日志和事件信息
  • 先处理:更新证书或调整资源限制
  • 再验证:观察重启计数是否停止增长

命令速用版

kubectl logs -n kube-system -l component=kube-controller-manager `--tail`=100
kubectl describe pod -n kube-system -l component=kube-controller-manager

为什么会这样

controller-manager 通常以 Static Pod 方式运行,依赖 API Server 和 Etcd。如果证书过期、节点时间不同步或资源不足,健康检查会失败,导致 kubelet 不断重启容器。此外,组件之间版本不匹配也可能引发兼容性问题。

k8s controller-manager 组件无限重启如何解决?

分步处理

  1. 查看日志:使用上述 logs 命令,搜索 "error" 或 "failed" 关键字,常见报错包括证书过期(x509)或连接拒绝(connection refused)。
  2. 检查事件:describe 命令输出的 Events 部分会记录重启原因,如 Liveness probe failed。
  3. 验证证书:如果是 kubeadm 部署,运行 kubeadm certs check-expiration 确认证书是否过期。
  4. 检查资源:确认节点内存和 CPU 是否充足,避免 OOMKilled。

怎么验证是否生效

执行 kubectl get pods -n kube-system,确认 STATUS 为 Running 且 RESTARTS 计数不再增加。日志中不再出现周期性报错。

常见坑

  • 直接修改 /etc/kubernetes/manifests 下的 YAML 可能导致配置被还原,建议检查生成配置的工具。
  • 节点时间不同步会导致证书验证失败,确保所有节点时间一致。
  • 升级集群时未注意组件版本兼容性,可能导致通信协议错误。

参考来源

  • Kubernetes 官方文档 - kube-controller-manager
    URL: https://kubernetes.io/docs/reference/command-line-tools-reference/kube-controller-manager/
  • Kubernetes 官方文档 - 排查集群问题
    URL: https://kubernetes.io/docs/tasks/debug/debug-cluster/