更新时间:2025-04-03 GMT+08:00

工作负载异常

定位思路

工作负载状态异常时,建议先查看事件。

CCI控制台中,单击左侧导航栏的“工作负载”,单击异常工作负载名称,进入详情页面,单击“事件”页签查看。

事件一:重新拉取镜像失败

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

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

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

    使用容器镜像服务的镜像时,参数值需要固定为imagepull-secret

    apiVersion: cci/v2
    kind: Deployment
    metadata:
      name: nginx
      namespace: nginx-ns
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: nginx
      strategy:
        type: RollingUpdate
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - image: nginx:alpine
            imagePullPolicy: Always
            name: nginx
          imagePullSecrets:
            - name: imagepull-secret
  • 排查项二:填写的镜像地址错误

    CCI支持拉取容器镜像服务中的镜像来创建工作负载。

    容器镜像服务中的镜像需要使用镜像的“下载指令”,上传镜像后,您可以在容器镜像服务的镜像中获取,如下图所示。

    图1 镜像地址
  • 排查项三:IAM用户没有镜像下载权限

    如果您开通了企业管理,您需要在账号下的容器镜像服务中给IAM用户添加权限,IAM用户才能使用账号下的私有镜像。

    给IAM用户添加权限有如下两种方法:

    • 在镜像详情中为IAM用户添加授权,授权完成后,IAM用户享有读取/编辑/管理该镜像的权限,具体请参见在镜像详情中添加授权
    • 在组织中为IAM用户添加授权,使IAM用户对组织内所有镜像享有读取/编辑/管理的权限,具体请参见在组织中添加授权
  • 排查项四:镜像打包使用的docker版本过低

    业务负载拉取镜像失败,报错信息如下:

    failed to pull and unpack image "****": failed to unpack image on snapshotter devmapper: failed to extract layer
    sha256:xxxxxx: failed to get reader from content store: content digest sha256:xxxxxx: not found

    该错误出现的原因:镜像构建时使用的docker版本过低(<v1.10),部分镜像打包标准社区已经不再支持。

    解决方案:请使用新版本 docker 运行时(>= docker v1.11)重新构建镜像后上传到SWR(容器镜像服务),升级负载镜像版本,重新拉取即可。

  • 排查项五:未配置VPCEP

    请参阅购买云服务VPCEP查看是否已进行过上述步骤。

    解决方案:如果您使用的是SWR企业仓,请配置OBS VPCEP后重新创建负载。如果您使用的是SWR公共镜像仓库,请配置OBS VPCEP和SWR VPCEP后重新创建负载。

事件二:重新启动容器失败

工作负载详情中,若事件中提示重新启动容器失败,请按照如下方式来排查原因。

  • 排查项一:查看端口是否冲突
    1. 在页面上单击失败的工作负载对应的容器组。
    2. 找到启动失败容器所属容器组,单击“查看YAML”,查看是否有容器的containerPort冲突。

      解决方法:请重新创建工作负载,配置正确的端口,并确保端口不冲突。

  • 排查项二:用户自身业务BUG

    请检查工作负载启动命令是否正确执行,或工作负载本身bug导致容器不断重启。

    解决方法:请重新创建工作负载,配置正确的启动命令。

  • 排查项三:工作负载配置的健康检查执行失败

    工作负载若配置liveness型(工作负载存活探针健康检查,当健康检查失败次数超过阈值时,会重启实例中的容器。在工作负载详情页面查看事件,若K8S事件中出现“Liveness probe failed: ……”时,表示健康检查失败。

    解决方法:请重新配置正确的健康检查策略。

其他定位方法

负载异常有可能是容器中运行的应用启动异常,这时可以通过手动执行启动命令,根据错误提示进行问题定位和修复。通常的做法如下:
  1. 为工作负载配置如下类型的启动命令,这样pod启动后没有启动应用程序,没有执行任何操作。

    执行启动命令前,请确认镜像中/bin/bash命令可用。

  2. Pod启动成功后,单击对应容器组“查看终端”,选择对应容器,手动执行启动命令,根据错误提示进行问题定位和修复。