Kubernetes | 问题:集群中controller-manager由于容器名称冲突导致容器创建失败异常解决
主要涉及全栈工程师(Full Stack Development)实践文章,包括但不限于企业SecDevOps和网络安全等保合规、安全渗透测试、编程开发、云原生(Cloud Native)、物联网工业控制(IOT)、人工智能Ai,从业书籍笔记,人生职场认识等方面资料或文章。✅ 将获得作者专门答疑学习交流群,解决在工作学习中的问题。【工作学习实践笔记】,当前价格¥199,除了获得从业笔记的同时还可进

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ]
📢 大家好,我是 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,除了获得从业笔记的同时还可进行问题答疑以及每月远程技术支持,希望大家多多支持,收获定大于付出!

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

更多推荐


所有评论(0)