[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ]

📢 大家好,我是 WeiyiGeek,一名深耕安全运维开发(SecOpsDev)领域的技术从业者,致力于探索DevOps与安全的融合(DevSecOps),自动化运维工具开发与实践,企业网络安全防护,欢迎各位道友一起学习交流、一起进步 🚀,若此文对你有帮助,一定记得倒点个关注⭐与小红星❤️,收藏学习不迷路 😋 。

Kubernetes | 问题:集群中controller-manager由于容器名称冲突导致容器创建失败异常解决

环境说明:

K8S集群版本为 v1.24.17,部署方式为 kubeadm,由于集群证书到期续签证书重启此 prod-103 节点(master)守护 Pod 容器 及其 Kubelet 服务,重启后发现 kube-controller-manager 一直处于 CreateContainerError 状态。

原文链接: https://articles.zsxq.com/id_zuz7dzl6ppfj.html

# 环境
$ kubectl get node -o wide | grep '103'
NAME        STATUS   ROLES           AGE      VERSION    INTERNAL-IP      EXTERNAL-IP   OS-IMAGE     KERNEL-VERSION                    CONTAINER-RUNTIME
prod-103    Ready    control-plane   2y11d    v1.24.17   192.168.1.103   <none>     CentOS Linux 7 (Core)     5.7.0-1.el7.elrepo.x86_64         containerd://1.6.20

# 错误对象
$ kubectl get pod -n kube-system -o wide | grep "prod-103"
kube-controller-manager-prod-103   0/1     CreateContainerError   2 (167d ago)    18m      192.168.1.103   prod-103    <none>           <none>

# 错误排查,查看 "Events" 部分和 "Containers" 部分的状态信息
$ kubectl describe pod kube-controller-manager-prod-103 -n kube-system

# 错误日志
$ systemctl status kubelet -l
6月 19 09:57:47 prod-103 kubelet[11410]: E0619 09:57:47.090702   11410 kuberuntime_manager.go:905] container &Container{Name:kube-controller-manager,Image:kube-controller-manager:v1.24.17,Command:
..... start failed in pod kube-controller-manager-prod-103_kube-system(0da2e4089904132ff82d4bb7e88d7c74): CreateContainerError: failed to reserve container name "kube-controller-manager_kube-controller-manager-prod-103_kube-system_0da2e4089904132ff82d4bb7e88d7c74_3": name "kube-controller-manager_kube-controller-manager-prod-103_kube-system_0da2e4089904132ff82d4bb7e88d7c74_3" is reserved for"7c2501a8ad1131f63828f585f073f43c09238601c8fd152e1473ba2772b0dcf7"

错误原因:

根据提供的错误日志,kube-controller-manager 容器创建失败的其原因是容器名称冲突,通知 执行 sudo crictl ps -a 发现存在两个相同的容器名称。

解决办法:停止清理冲突的容器(旧)名称,验证服务是否正常。

$ sudo crictl ps -a
CONTAINER           IMAGE               CREATED             STATE               NAME                      ATTEMPT             POD ID              POD
d44861c785aa5       8c811b4aec35f       7 hours ago         Exited              etcd                      0                   9b86c26c21533       job-etcd-backup-29171190-sf4tw
81952c6d6fe71       8c811b4aec35f       31 hours ago        Exited              etcd                      0                   0d9439f93c99e       job-etcd-backup-29169750-jtgw4
e255fa5b55877       8c811b4aec35f       2 days ago          Exited              etcd                      0                   3f4da3ce7d045       job-etcd-backup-29168310-8k7z8
9898b99899693       e9870aeebd11e       3 months ago        Running             kube-proxy                0                   9a07228d74176       kube-proxy-fffj5
b68bf3ce97476       72f30124dd6d5       4 months ago        Exited              kube-controller-manager   2                   665c06264a3dc       kube-controller-manager-prod-103 # 关键点
25a92d094635a       fce326961ae2d       5 months ago        Running             etcd                      0                   84e48af415f31       etcd-prod-103
bdddf4f623e20       4f1c5007cffae       5 months ago        Running             kube-apiserver            0                   87a5b5bdfe424       kube-apiserver-prod-103
b251ae121e468       1d5992d424491       5 months ago        Running             kube-scheduler            0                   42c8ba5528c5d       kube-scheduler-prod-103
7c2501a8ad113       72f30124dd6d5       5 months ago        Running             kube-controller-manager   3                   e1531080ac514       kube-controller-manager-prod-103 # 关键点
e69f70337f463       80841a45aa2d3       2 years ago         Running             promtail                  0                   66a5def4d9437       loki-promtail-smqxj

停止运行时间最旧的容器执下述命令,重启 kubelet 服务,再移除 Pod 查看是否正常运行。

# 停止旧容器
$ crictl stop 7c2501a8ad113

# 重启 kubelet 服务
$ systemctl restart kubelet

# 删除 Pod 并等待其重新创建
$ kubectl delete pod kube-controller-manager-prod-103 -n kube-system
pod "kube-controller-manager-prod-103" deleted

# 查看重新创建 Pod 的状态,是否为 Running 状态
$ kube-controller-manager-prod-103   1/1     Running      0   3s

至此,kube-controller-manager 无法启动问题解决了。

其它常见问题即解决方案原因1: 镜像拉取失败

  • 表现: 在 describe 输出中看到 "Failed to pull image" 或 "ImagePullBackOff"

  • 解决方案:

# 检查所需镜像
kubectl get pod kube-controller-manager-prod-103 -n kube-system -o yaml | grep image
  
# 手动拉取镜像
docker pull <镜像名称>
  
# 如果使用私有仓库,确保配置了正确的 imagePullSecrets

原因2: 权限问题

  • 表现: "permission denied" 相关错误

  • 解决方案:

    • 检查 Pod 的 securityContext 配置

    • 确保容器有足够的权限访问所需资源

原因3: 资源不足

  • 表现: "Insufficient memory" 或 "Insufficient cpu"

  • 解决方案:

    • 增加节点资源

    • 调整 kube-controller-manager 的资源请求和限制

原因4: 配置文件或参数错误

  • 表现: "invalid configuration" 或 "flag provided but not defined"

  • 解决方案:

    • 检查 kube-controller-manager 的启动参数

    • 验证配置文件是否正确

END

加入:作者【全栈工程师修炼指南】知识星球

『 全栈工程师修炼指南』星球,主要涉及全栈工程师(Full Stack Development)实践文章,包括但不限于企业SecDevOps和网络安全等保合规、安全渗透测试、编程开发、云原生(Cloud Native)、物联网工业控制(IOT)、人工智能Ai,从业书籍笔记,人生职场认识等方面资料或文章。

Q: 加入作者【全栈工程师修炼指南】星球后有啥好处?

✅ 将获得作者最新工作学习实践文章以及网盘资源。 ✅ 将获得作者珍藏多年的全栈学习笔记(需连续两年及以上老星球友,也可单次购买)。 ✅ 将获得作者专门答疑学习交流群,解决在工作学习中的问题。 ✅ 将获得作者远程支持(在作者能力范围内且合规)。

目前新人仅需 69 元即可加入作者星球,数量有限,期待你的加入!

获取:作者工作学习全栈笔记

作者整理了10年的工作学习笔记(涉及网络、安全、运维、开发),需要学习实践笔记的看友,可添加作者微信或者回复【工作学习实践笔记】,当前价格¥199,除了获得从业笔记的同时还可进行问题答疑以及每月远程技术支持,希望大家多多支持,收获定大于付出!

 知识推荐 往期文章

若文章对你有帮助,请将它转发给更多的看友,若有疑问的小伙伴,可在评论区留言你想法哟 💬!

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐