文档首页/ 云容器实例 CCI/ 最佳实践/ 负载管理/ CCI 2.0负载调试与故障排查
更新时间:2026-02-06 GMT+08:00
分享

CCI 2.0负载调试与故障排查

应用场景

在CCI的Serverless环境中,由于用户不再管理和运维底层基础设施,当工作负载(Workload)出现启动失败或健康检查不通过时,传统的“登录节点查看 Docker 日志”的方式不再适用。

本文档主要解决以下两类常见问题:

  • 负载启动失败(CrashLoopBackOff):容器启动后立即退出,或者运行一段时间后异常退出,导致无法进入终端调试。
  • 健康检查失败:配置探针后,实例无法进入Ready 状态或反复重启。

限制与约束

在进行调试前,请确保您的网络环境和监控配置满足以下条件,以便顺利拉取镜像并查看日志:

  • 网络配置:命名空间已配置 SNAT 网关(用于访问公网)和VPC 终端节点(VPCEP,用于内网访问 SWR 镜像仓库)。
  • 日志配置:已开通云日志服务(LTS),并创建了日志组日志流。建议在创建负载时开启日志采集,以便保留容器退出前的标准输出日志。

场景一:负载启动失败(Crash)的调试

  • 问题分析

    现象分类

    典型表现

    启动即崩溃

    Pod 状态反复变为 CrashLoopBackOff,LTS 中可能采集不到日志(容器退出太快)。

    运行后崩溃

    Pod 运行数秒或数分钟后退出,LTS 中通常有日志记录。

  • 解决方案

    使用“挂起(Sleep)”模式调试。当日志不足以定位问题(例如缺少依赖、环境变量错误、配置项缺失)时,可以通过修改启动命令,强制容器保持运行状态,从而进入容器内部进行“现场调试”。

    1. 修改启动命令。
      1. 在控制台选择目标负载,单击“YAML 编辑”。
      2. 找到容器配置,修改 command(启动命令),使其进入无限循环或长时间睡眠状态。

        YAML 修改示例:

        spec:
          containers:
          - name: container-0
            # 原始镜像
            image: swr.cn-north-4.myhuaweicloud.com/test-namespace/app:v1
            # 修改为挂起命令,保持容器存活
            command:
              - /bin/sh
              - '-c'
              - 'while true; do echo hello; sleep 10; done'
      3. 单击“确定”提交更新。此时容器将成功启动并处于“运行中”状态。
    2. 进入容器调试。
      1. 在负载列表的操作列,单击“查看终端”。
      2. 选择 /bin/sh 或 /bin/bash 进入终端。
      3. 手动执行原始命令排查故障:在终端中输入该容器镜像原始的启动命令,手动触发业务逻辑以观察报错。
        • 示例场景:假设负载原有的启动命令是ping www.example.co。
        • 执行:
          ping www.example.co
        • 结果:终端直接报错 ping: unknown host www.example.co。
      4. 定位修复:发现是域名拼写错误(.co 应为 .com)。您可以在容器内修改配置文件或环境变量进行验证。
    3. 恢复生产配置。

      验证修复方案有效后,回到控制台更新负载,将启动命令(Command)和参数(Args)恢复为正确的业务配置。

场景二:健康检查探针失败的调试

配置存活探针(Liveness Probe)或就绪探针(Readiness Probe)失败会导致容器被系统终止重启或流量无法接入。

  • 常见配置误区
    • HTTP 探针监听地址:若应用监听的是 127.0.0.1,而探针默认通过 Pod IP 访问,可能导致检测失败。建议应用监听 0.0.0.0。
    • Exec 探针超时:在 CCI 环境中,如果 Exec 脚本执行时间超过 timeoutSeconds,探针会被视为失败(Unknown)。
    • 端口不匹配:探针检测的端口必须与容器内应用实际监听的端口一致。
  • 解决方案:手动模拟探测

    建议遵循“移除探针 -> 手动验证 -> 重新配置”的流程。

    1. 移除探针:更新负载,暂时删除健康检查配置,确保容器能正常启动并保持运行。
    2. 进入容器:通过控制台远程登录进入容器。
    3. 手动执行探测命令
      • 验证 HTTP 请求
        # 模拟 Kubernetes 发起的 HTTP Get 请求
        curl -I http://127.0.0.1:<端口>/<路径>

        若返回 404 或 Connection refused,说明应用配置有误。

      • 验证 Exec 命令
        # 手动执行探针脚本
        /bin/sh -c "ls /tmp"

        检查命令是否返回 0,以及执行耗时是否过长。

    4. 回填配置:确认手动执行成功后,将参数回填到 YAML 或控制台配置中。
  • 参考配置示例

    以下是一个包含完整健康检查配置的 Deployment YAML 片段,供参考:

    apiVersion: cci/v2
    kind: Deployment
    metadata:
      name: health-check-demo
    spec:
      template:
        spec:
          containers:
            - name: app
              image: nginx:latest
              # 存活探针:检测文件是否存在
              livenessProbe:
                exec:
                  command: ["/bin/sh", "-c", "ls /tmp"]
                initialDelaySeconds: 5
                timeoutSeconds: 2
                periodSeconds: 10
              # 就绪探针:检测 HTTP 服务是否可用
              readinessProbe:
                httpGet:
                  path: /
                  port: 80
                  scheme: HTTP
                initialDelaySeconds: 2
                timeoutSeconds: 1

相关文档