tencent cloud

文档反馈

Pod 一直处于 ImagePullBackOff 状态

最后更新时间:2020-04-24 16:17:13

    本文档介绍可能导致 Pod 一直处于 ImagePullBackOff 状态的几种情形,以及如何通过排查步骤定位异常原因。请按照以下步骤依次进行排查,定位问题后恢复正确配置即可。

    可能原因

    • HTTP 类型 Registry 地址未加入 insecure-registry
    • HTTPS 自签发类型 Registry CA 证书未添加至节点
    • 私有镜像仓库认证失败
    • 镜像文件损坏
    • 镜像拉取超时
    • 镜像不存在

    排查方法

    检查 HTTP 类型 Registry 地址是否加入 insecure-registry

    Dockerd 默认从 HTTPS 类型的 Registry 拉取镜像。当您使用 HTTP 类型的 Registry 时,请确保已将其地址添加到 insecure-registry 参数中,并重启或 reload Dockerd 使其生效。

    检查 HTTPS 自签发类型 Registry CA 证书是否未添加至节点

    当您使用 HTTPS 类型 Registry 且其证书属于自签发证书时,Dockerd 将会校验该证书,只有校验成功才可以正常使用镜像仓库。

    为确保校验成功,需要将 Registry 的 CA 证书放置到以下位置:

    /etc/docker/certs.d/<Registry:port>/ca.crt

    检查私有镜像仓库配置

    若 Pod 未配置 imagePullSecret、配置的 Secret 不存在或者有误都会造成 Registry 认证失败,使 Pod 一直处于 ImagePullBackOff 状态。

    检查镜像文件是否损坏

    若 Push 的镜像文件损坏,下载成功后也不能正常使用,则需要重新 push 镜像文件。

    检查镜像是否拉取超时

    现象描述

    当节点上同时启动大量 Pod 时,可能会导致容器镜像下载需要排队。假设下载队列靠前位置已有许多大容量镜像且需较长的下载时间,则会导致排在队列靠后的 Pod 拉取超时。

    默认情况下,kubelet 支持串行下载镜像。如下所示:

    --serialize-image-pulls   Pull images one at a time. We recommend *not* changing the default value on nodes that run docker daemon with version < 1.9 or an Aufs storage backend. Issue #10959 has more details. (default true)

    解决思路

    必要情况下,为避免 Pod 拉取超时,可开启并行下载及控制并发。示例如下:

    --Registry-qps int32   If > 0, limit Registry pull QPS to this value.  If 0, unlimited. (default 5)
    --Registry-burst int32   Maximum size of a bursty pulls, temporarily allows pulls to burst to this number, while still not exceeding Registry-qps. Only used if --Registry-qps > 0 (default 10)

    检查镜像是否存在

    镜像本身不存在也会导致 Pod 一直处于 ImagePullBackOff 状态,可以通过 kubelet 日志进行确认。如下所示:

    PullImage "imroc/test:v0.2" from image service failed: rpc error: code = Unknown desc = Error response from daemon: manifest for imroc/test:v0.2 not found
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持