先查 pod 事件定位镜像拉取失败原因:运行 kubectl describe pod -n 查看 events 末尾报错,再依关键词(如 invalid reference format、repository does not exist、context deadline exceeded 等)排查镜像地址、凭证、网络、磁盘、证书或镜像本身问题。

直接看 Pod 事件,别急着重启 kubelet。ImagePullBackOff 或 ErrImagePull 状态本质是“拉不到镜像”,但原因各不相同,定位准了,解决就快。
先查清楚错在哪
这是所有操作的前提。运行:
kubectl describe pod
重点看 Events 区域末尾的报错信息,它会直接告诉你卡在哪一步。常见关键词和对应方向:
-
invalid reference format → 镜像地址写错了,比如少写了仓库域名、标签拼错(
lates而不是latest) - repository does not exist or may require 'docker login' → 私有仓库没配凭证,或配错了
- context deadline exceeded → 节点根本连不上镜像仓库,可能是网络不通、代理没设、防火墙拦了
- manifest for ... not found → 镜像名或 tag 在仓库里压根不存在
- no space left on device → 节点磁盘满了,得清理镜像或日志
私有仓库没权限?检查 Secret 是否到位
不是简单创建个 secret 就完事,得确认它被正确使用:
- 用 kubectl get secret
-o yaml 查看 data 字段,确保.dockerconfigjson是完整 base64 编码后的字符串(可解码验证内容是否为合法 JSON) - 检查 Pod 所属的 ServiceAccount 是否绑定了这个 secret:执行 kubectl get sa default -n
-o yaml ,确认imagePullSecrets列表里有对应名字 - 如果 secret 在其他命名空间,Deployment 中必须显式声明
imagePullSecrets,不能依赖默认绑定
连不上仓库?从节点侧验证网络和证书
Pod 拉取失败,问题可能出在底层节点上:
- 登录到报错 Pod 所在的节点,用 curl -vk https://
/v2/ 测试 HTTPS 连通性和 TLS 证书有效性。常见错误如x509: certificate signed by unknown authority表示证书未被信任 - 如果是自签名证书,需把 CA 文件复制到节点的系统证书目录(如
/etc/pki/ca-trust/source/anchors/),再运行 update-ca-trust - containerd 用户还要检查
/etc/containerd/config.toml中 registry 配置是否包含正确的ca_file路径
镜像本身有问题?跳过集群直接验证
绕过 Kubernetes,用最原始的方式确认镜像可拉:
- 在任意一台能访问仓库的机器上执行:docker pull 。如果这步失败,说明问题不在 K8s,而在镜像地址、仓库状态或本地网络
- 用 skopeo inspect docker:// 查看镜像元数据,无需拉取就能确认是否存在、是否有 manifest
- 如果是 Harbor,登录 Web 控制台,手动搜索镜像路径和 tag,确认项目已公开或账号有权限











