文档首页 > > 常见问题> 工作负载类> 工作负载异常> 工作负载异常:重新拉取镜像失败

工作负载异常:重新拉取镜像失败

分享
更新时间: 2020/01/16 GMT+08:00

工作负载详情中,若事件中提示重新拉取镜像失败,请参照如下方式来排查原因。

排查项一:kubectl创建工作负载时未指定imagePullSecret

以创建一个名为nginxdeployment为例,请排查yaml文件中是否存在imagePullSecrets字段(如下yaml示例中的标红字段),表示pull镜像时的secret名称。

  • 需要Pull华为云容器镜像仓库的镜像时,参数值固定为default-secret
  • Pull第三方镜像仓库的镜像时,需设置为创建的secret名称。

kubectl创建工作负载拉取第三方镜像时,未指定imagePullSecret字段如下图所示:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  strategy:
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx 
        imagePullPolicy: Always
        name: nginx
      imagePullSecrets:
      - name: default-secret

解决方案:

pull第三方镜像时,需设置创建的secret名称。

排查项二:填写的镜像地址错误(使用第三方镜像时)

CCE支持拉取第三方镜像仓库(即华为云镜像仓库与Dockerhub之外的镜像仓库)中的镜像来创建工作负载。

在填写第三方镜像的地址时,请参照要求的格式来填写。镜像地址格式为:ip:port/path/name:version 或name:version,若没标注版本号则默认版本号为latest。

  • 若是私有仓库,请填写ip:port/path/name:version。
  • 若是docker开源仓库,请填写name:version,例如nginx:latest。

镜像地址配置有误找不到镜像导致失败,如下图所示:

图1 镜像地址配置有误

解决方案:

可编辑yaml修改镜像地址,也可在工作负载详情页面更新升级页签点击更换镜像。

排查项三:使用错误的密钥和密钥过期(使用第三方镜像时)

CCE支持拉取第三方镜像仓库(即华为云镜像仓库与Dockerhub之外的镜像仓库)中的镜像来创建工作负载。

解决方案:

通常第三方镜像仓库都必须经过认证才可以访问,而CCE中容器拉取镜像是使用密钥认证方式,这就要求在拉取镜像前必须先创建镜像仓库的密钥。

若密钥错误或者过期会导致镜像拉取失败,创建密钥的步骤请参见使用kubectl创建第三方镜像仓库的密钥

排查项四:磁盘空间不足

在v1.7.3-r7版本后的集群中新建节点后,会给节点绑定一个100G的docker专用数据盘。若数据盘空间不足,会导致重新拉取镜像失败。

图2 数据盘

排查步骤

  1. 登录CCE控制台,选择左侧导航栏的工作负载 > 无状态负载 Deployment”工作负载 > 有状态负载 StatefulSet”,单击异常的工作负载名称进入工作负载详情页。
  2. 单击“实例列表”页签,单击实例(Pod)前的,在展开的区域单击“事件”页签。
  3. 查看事件列表中是否出现如下类似提示:

    • Node XXX-k8s-3 status is now: NodeHasDiskPressure
    • Warning: “EvictionThresholdMet Attempting to reclaim nodefs”

    从以上内容大致可以判断出node3处于磁盘空间不足的状态下,并且该node上的kubelet daemon判断达到了Eviction阀值,试图回收磁盘空间。

解决方法:

  1. 查看docker的磁盘空间占用情况:

    $ docker system df -v 

  2. 确认为磁盘空间不足后,清理磁盘空间,比如镜像、临时文件等。

    存储空间不足一般是容器镜像未及时清理导致的,比如短时间内运行了很多使用较大镜像的容器等。Kubelet 会自动清理未使用的镜像,但如果想要立即清理,可以使用 spotify/docker-gc:
    sudo docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v /etc:/etc:ro spotify/docker-gc 

分享:

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区