1. 概述

ImagePullBackOff错误比较简单,镜像下载失败,要么网络设置有问题,要么没有设置镜像源,另外一个比较隐蔽的问题是,当你在集群环境下,假设有3个节点,那么这三个节点都要设置镜像源,因为 kubectl run命令默认可以在任一个节点上安装,而不是命令在哪个节点上执行!

另外如果是公司内网,无法连接镜像源,只能自己上传镜像时,切记,集群环境下也会存在问题,因为镜像需要拷贝到另外2个节点上,或指定节点安装。

指定节点安装参见【k8s in Action 笔记】 第三章 YAML描述文件创建pod(socat) 的 "3.5 使用标签和选择器来约束pod调度"章节

2. 问题复现

问题出现的现象是三节点集群环境下,第一个节点创建成功,后2个失败。

kubectl create -f nginx-deployment.yaml 执行之后,kubectl get pods 一致出现 ImagePullBackOff,一直无法执行成功,如下图,最下面的3个nginx-deployment-xxx:
在这里插入图片描述

红色框划大了,仅看最后三条

调查错误原因,在 master 服务器上面分别执行命令: kubectl describe pod xxx,查看三个nginx实例的报错信息:
在这里插入图片描述
可以看到报错信息:

Warning Failed 47m kubelet, 192.168.118.213 Failed to pull image “nginx:1.10”: rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled (Client.Timeout exceeded while awaiting headers)

原因是第一个服务器配置了docker的国内阿里云镜像,而后面两台服务器忘记了给docker配置国内镜像。
在这里插入图片描述
配置上国内镜像,然后执行:

systemctl daemon-reload
systemctl restart docker

在这里插入图片描述

参考

《ImagePullBackOff 错误处理》

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐