重启Agent Sandbox容器

更新时间:
复制为 MD 格式

本文介绍如何通过 ContainerRecreateRequest(CRR)对运行状态的 Agent Sandbox Pod 中指定容器执行重启操作,无需删除或重建 Pod。

背景信息

Agent Sandbox应用的日常运维中,需要对运行中的容器执行重启操作,常见场景包括:

  • 应用出现异常,需要快速恢复服务。

  • 内存泄漏等问题需要定期重启缓解。

  • 不希望重建整个 Pod,仅需重启特定容器。

Kubernetes 原生并未提供对运行中 Pod 内单个容器的重启能力,通常只能通过删除 Pod 或滚动重启 Deployment 来间接实现,代价较大。ACS Agent Sandbox 支持通过 ContainerRecreateRequest CRD(Custom Resource Definition,自定义资源定义)对 Pod 中的指定容器执行精准重启。

适用范围

  • 在集群组件管理页面,确认以下组件版本:

    • ack-agent-sandbox-controller:已升级至最新版。

    • acs-virtual-node:版本 >= v2.18.0。

    • ack-kruise:版本 >= 1.8.4。

  • 使用限制

    约束项

    说明

    Pod 状态

    Pod 必须处于 Running 状态,非 Running 状态不支持操作。

    操作粒度

    支持对指定 Pod 内单个或多个容器进行重启。

    Init 容器

    不支持对 Init 容器执行重启操作。

操作步骤

重启容器时,容器内的数据保留情况取决于具体的实例类型

展开查看不同实例类型的数据保留情况

数据类型

Agent Sandbox

通用型/性能型

容器读写层

保留

需启用ops.alibabacloud.com/pause-enabled: "true"注解。

不保留

emptyDir 卷

保留

保留

持久化数据卷(PV/PVC)

保留

保留

步骤一:创建Agent Sandbox

您可基于Sandbox Set预热池来分配(SandboxClaim)沙箱实例,也可基于Agent Sandbox实例类型自行创建沙箱实例。

SandboxClaim方式

通过此方式创建的Sandbox默认启用ops.alibabacloud.com/pause-enabled: "true"注解,无需额外配置。具体操作,请参考SandboxClaim方式

自行创建

使用Agent Sandbox算力,并配置ops.alibabacloud.com/pause-enabled: "true"注解来创建沙箱。

  1. 将以下内容保存为sandbox.yaml

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: code-interpreter
      namespace: default
      labels:
        app: code-interpreter
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: code-interpreter
      template:
        metadata:
          labels:
            app: code-interpreter
            alibabacloud.com/acs: "true"
            alibabacloud.com/compute-class: agent-sandbox  # Agent Sandbox 实例类型 
            alibabacloud.com/compute-qos: default          # 算力质量 default/best-effort
          annotations:
            ops.alibabacloud.com/pause-enabled: "true"     # 启用读写层数据保留
        spec:
          automountServiceAccountToken: false
          terminationGracePeriodSeconds: 30
          containers:
          - name: sandbox
            image: registry-cn-zhangjiakou-vpc.ack.aliyuncs.com/acs/code-interpreter:v1.6 # 替换成实际集群所在的地域
            imagePullPolicy: IfNotPresent
            resources:
              limits:
                cpu: "1"
                memory: 1Gi
              requests:
                cpu: "1"
                memory: 1Gi
                ephemeral-storage: 30Gi
  2. 创建资源。

    kubectl apply -f sandbox.yaml
  3. 确认目标应用Pod状态为Running

    kubectl get pod | grep code-interpreter

步骤二:创建 ContainerRecreateRequest

ContainerRecreateRequest(CRR)是 ACS 为 Agent Sandbox 提供的容器重启 CRD,用于描述对指定 Pod 内的容器执行重建(重启)操作。更多高级配置,请参见 Container Restart

  1. 将以下内容保存为crr.yaml

    CRR 资源的命名空间必须与目标 Pod 一致,否则操作无法生效。
    apiVersion: apps.kruise.io/v1alpha1
    kind: ContainerRecreateRequest
    metadata:
      namespace: <YOUR-NAMESPACE>    # 目标 Pod 所在的命名空间
      name: <YOUR-CRR-NAME>          # CRR 资源名称
    spec:
      podName: <YOUR-POD-NAME>       # 目标 Pod 名称
      containers:                    # 需要重启的容器名称列表,至少提供一个容器名称
      - name: <CONTAINER-NAME-1>     # 容器名称1
      - name: <CONTAINER-NAME-2>     # 容器名称2

    关键字段说明:

    • metadata.namespace:目标 Pod 所在的命名空间。

    • spec.podName:需要重启容器所在的 Pod 名称。

    • spec.containers[].name:需要重启的容器名称,支持指定多个容器。

  2. 创建 CRR 资源。

    kubectl apply -f crr.yaml

步骤三:观察重启状态

提交 CRR 后,可通过以下命令查看容器重启状态:

kubectl get containerrecreaterequest <YOUR-CRR-NAME> -n <YOUR-NAMESPACE> -o yaml

status.phaseCompletedcontainerRecreateStates中对应容器的phaseSucceeded时,表示容器已成功重启。示例如下:

apiVersion: apps.kruise.io/v1alpha1
kind: ContainerRecreateRequest
metadata:
  ...
status:
  completionTime: '2026-05-27T08:04:35Z'
  containerRecreateStates:
    - name: main
      phase: Succeeded
  phase: Completed

状态字段说明:

  • status.phase:CRR 整体状态。Completed表示重启流程已结束。

  • containerRecreateStates[].phase:单个容器的重启结果。Succeeded表示对应容器重启成功。