更新时间:2026-06-26 GMT+08:00

工作负载异常:一直处于创建中

问题描述

节点上的工作负载一直处于创建中。

排查思路

以下排查思路根据原因的出现概率进行排序,建议您从高频率原因往低频率原因排查,从而帮助您快速找到问题的原因。

如果解决完某个可能原因仍未解决问题,请继续排查其他可能原因。

排查项一:cce-pause镜像是否被误删除

问题现象

创建工作负载时报如下错误,显示无法创建sandbox,原因是拉取cce-pause:3.1镜像失败。

Failed to create pod sandbox: rpc error: code = Unknown desc = failed to get sandbox image "cce-pause:3.1": failed to pull image "cce-pause:3.1": failed to pull and unpack image "docker.io/library/cce-pause:3.1": failed to resolve reference "docker.io/library/cce-pause:3.1": pulling from host **** failed with status code [manifests 3.1]: 400 Bad Request

问题原因

该镜像为创建节点时添加的系统镜像,如果手动误删除该镜像,会导致工作负载Pod一直无法创建。

解决方案:

v1.25.16-r30、v1.27.16-r30、v1.28.15-r20、v1.29.13-r0、v1.30.10-r0、v1.31.6-r0、v1.32.1-r0及以上版本的集群中,cce-pause容器镜像支持防误删。不满足上述版本要求的集群则需要参考以下步骤进行手动恢复。

  1. 登录该问题节点。
  2. 手动解压节点上的cce-pause镜像安装包。

    tar -xzvf /opt/cloud/cce/package/node-package/pause-*.tgz

  3. 导入镜像。

    • Docker节点:
      docker load -i ./pause/package/image/cce-pause-*.tar
    • Containerd节点:
      ctr -n k8s.io images import --all-platforms ./pause/package/image/cce-pause-*.tar

  4. 查看cce-pause镜像。

    • Docker节点:
      docker images | grep pause

      回显如下:

      cce-pause               3.1               83e7b9ecaec8               2 months ago               785kB
    • Containerd节点:
      crictl image | grep pause

      期望回显如下:

      cce-pause               3.1               1fab9a083c585               686kB

  5. 查询kubelet中使用的cce-pause镜像。

    ps aux | grep kubelet | grep -o "pod-infra-container-image=[^ ]*"

    回显如下:

    pod-infra-container-image=cce-pause:3.1
    表示kubelet中使用的pause镜像为cce-pause:3.1,如果上一步中查询的镜像名称为docker.io/library/cce-pause而不是cce-pause,则需将其重新命名为cce-pause:
    • Docker节点:
      docker tag docker.io/library/cce-pause:3.1 cce-pause:3.1
    • Containerd节点:
      ctr -n k8s.io image tag docker.io/library/cce-pause:3.1 cce-pause:3.1

  6. 给镜像加锁,防止误删除。

    • Docker节点不支持镜像防止误删除操作。
    • Containerd节点:
      ctr -n k8s.io images label cce-pause:3.1 io.cri-containerd.pinned=pinned

      节点中的containerd服务版本高于1.7.0版本才能支持该操作,containerd版本可以通过containerd --version命令来查询。

      查看镜像是否已加锁:

      crictl images -v

      输出里会有类似:

      Pinned: true

      为true表示已锁定,不会被kubelet GC回收。

  7. 镜像导入成功后,即可正常创建工作负载。

排查项二:集群开启CPU管理策略后变更节点规格

集群开启CPU管理策略(绑核)时,kubelet启动参数中会将CPU Manager的策略设置为static,允许为节点上具有某些资源特征的pod赋予增强的CPU亲和性和独占性。用户如果直接在ECS控制台对CCE节点变更规格,会由于变更前后CPU信息不匹配,导致节点上的负载无法重新拉起,也无法创建新负载。

  1. 登录CCE节点(弹性云服务器)并删除cpu_manager_state文件。

    删除命令示例如下:

    rm -rf /mnt/paas/kubernetes/kubelet/cpu_manager_state

  2. 重启节点或重启kubelet,重启kubelet的方法如下:

    systemctl restart kubelet

    此时重新拉起或创建工作负载,已可成功执行。

    解决方式链接:CCE节点变更规格后,为什么无法重新拉起或创建工作负载?