本文主要介绍 VCI Agent Sandbox 中进行创建、暂停、恢复、删除、变更等沙箱生命周期管理操作。
您可以使用 VCI 资源创建一个沙箱。
说明
- 一个沙箱是一个 Sandbox Custom Resource。
- 当前 VCI 容器使用了 Kata Container 实现强隔离。
- 如需通过 SandboxSnapShotClass 定义沙箱快照的删除/保留策略,请提前创建相关 Custom Resource。示例 YAML 如下所示。详情请参见 数据持久化。
apiVersion: extensions.agents.x-k8s.io/v1alpha1
kind: SandboxSnapShotClass
name: class-for-retain-snapshot
driver: sandbox.agent.io/vci
- 使用已有快照创建沙箱时,可从如下两种途径获取快照 ID:
- 使用已有沙箱关机时 VCI 自动创建的快照 ID。
- 用户自行创建的 Snapshot 类型 Custom Resource。
从零开始首次在 VCI Agent Sandbox 环境中创建沙箱时,按如下示例代码创建。
apiVersion: agents.x-k8s.io/v1alpha1
agent.sandbox.io/snapshot-class: "class-for-retain-snapshot"
agent.sandbox.io/snapshot-deletion-policy: Delete
agent.sandbox.io/snapshot-retention-days: "3"
agent.sandbox.io/snapshot-max-num: "3"
name: test-sandbox-example
storageClassName: test-storage-class
vci.volcengine.com/tls-enable: "false"
vke.volcengine.com/burst-to-vci: enforce
vci.vke.volcengine.com/enable-auto-create-imc: "true"
vci.volcengine.com/usable-disk-capacity: "40"
vci.volcengine.com/persistent-container: "true"
- image: vke-cn-beijing.cr.volces.com/vke/nginx:latest
imagePullPolicy: IfNotPresent
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
schedulerName: default-scheduler
terminationGracePeriodSeconds: 30
等待 CRD 的status.phase显示为 Running 时,表示沙箱创建成功。示例代码片段如下所示。
- lastTransitionTime: "2025-11-18T02:21:30Z"
message: Pod is Ready; Service Exists
reason: DependenciesReady
selector: agents.x-k8s.io/sandbox-name-hash=e6b82627
serviceFQDN: ubuntu-sshd.default.svc.cluster.local
VCI Agent Sandbox 环境中使用已有快照创建沙箱时,在 首次创建沙箱 模块下示例代码的基础上,增加 Annotation:vci.volcengine.com/snapshot-id。完整示例代码如下。
apiVersion: agents.x-k8s.io/v1alpha1
name: test-sandbox-example
storageClassName: test-storage-class
vci.volcengine.com/tls-enable: "false"
vke.volcengine.com/burst-to-vci: enforce
vci.vke.volcengine.com/enable-auto-create-imc: "true"
vci.volcengine.com/usable-disk-capacity: "40"
vci.volcengine.com/persistent-container: "true"
vci.volcengine.com/snapshot-id: "snapshot-1"
- image: vke-cn-beijing.cr.volces.com/vke/nginx:latest
imagePullPolicy: IfNotPresent
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
schedulerName: default-scheduler
terminationGracePeriodSeconds: 30
通过将沙箱的replicas设置为 0,达到暂停沙箱的目的。默认情况下,暂停沙箱时 VCI Agent Sandbox 将自动生成快照。示例代码片段如下所示。
apiVersion: agents.x-k8s.io/v1alpha1
name: test-sandbox-example
等待 CRD 的status.phase显示为 Paused 时,表示沙箱暂停成功。示例代码片段如下所示。
- lastTransitionTime: "2026-02-05T06:24:40Z"
message: Pod does not exist, replicas is 0; Service Exists
reason: DependenciesReady
service: test-sandbox-example
serviceFQDN: test-sandbox-example.default.svc.cluster.local
如果不希望在沙箱暂停时自动创建快照,可以通过配置 Annotation:agent.sandbox.io/auto-create-snapshot: "false",关闭自动创建快照的功能。
apiVersion: agents.x-k8s.io/v1alpha1
agent.sandbox.io/auto-create-snapshot: "false"
name: test-sandbox-example
等待 CRD 的status.phase显示为 Paused 时,表示沙箱暂停成功且不会自动产生快照。示例代码片段如下所示。
- lastTransitionTime: "2026-02-05T06:24:40Z"
message: Pod does not exist, replicas is 0; Service Exists
reason: DependenciesReady
service: test-sandbox-example
serviceFQDN: test-sandbox-example.default.svc.cluster.local
通过将沙箱的replicas设置为 1,达到恢复沙箱的目的。恢复沙箱时使用上一次关机的快照。示例代码片段如下所示。
apiVersion: agents.x-k8s.io/v1alpha1
name: test-sandbox-example
image: vke-cn-beijing.cr.volces.com/vke/nginx:latest
- mountPath: /usr/share/nginx/html
key: vci.vke.volcengine.com/node-type
恢复沙箱后,确认该 Custom Resource 的status.phase为 Running 时,视为沙箱恢复成功。
更新沙箱的 CPU、内存和 GPU 配置时,需要先暂停沙箱,再更新podTemplate内的resources资源。配置设置完成后,再恢复沙箱。此过程会销毁原来的 Pod 后再重建新的 Pod 来更新沙箱配置。
- 暂停沙箱,即:将replicas设置为 0,且确认status.phase为 Paused。
- 更新podTemplate内的resources字段配置。
image: vke-cn-beijing.cr.volces.com/vke/nginx:latest
command: ["/usr/sbin/sshd", "-D"]
storageClassName: sandbox-nfs
- 恢复沙箱,将replicas设置为 1,并确认该 Custom Resource 的status.phase为 Running。
更新沙箱镜像时,支持在不重建 Pod 的情况下,原地更新,即不销毁原来的 Pod,直接在该 Pod 上更新沙箱镜像,缩短配置变更时间。
- 在沙箱 YAML 文件中配置 Annotation:vci.volcengine.com/persistent-container: "true"。
apiVersion: agents.x-k8s.io/v1alpha1
agent.sandbox.io/snapshot-class: "class-for-retain-snapshot"
agent.sandbox.io/snapshot-deletion-policy: Delete
agent.sandbox.io/snapshot-retention-days: "3"
agent.sandbox.io/snapshot-max-num: "3"
agent.sandbox.io/auto-create-snapshot: "false"
name: test-sandbox-example
storageClassName: test-storage-class
vci.volcengine.com/tls-enable: "false"
vke.volcengine.com/burst-to-vci: enforce
vci.vke.volcengine.com/enable-auto-create-imc: "true"
vci.volcengine.com/usable-disk-capacity: "40"
vci.volcengine.com/persistent-container: "true"
vci.volcengine.com/image-restart-policy: "in-place"
- image: vke-cn-beijing.cr.volces.com/vke/nginx:latest
imagePullPolicy: IfNotPresent
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
schedulerName: default-scheduler
terminationGracePeriodSeconds: 30
- 后续直接通过 YAML 更新podTemplate中配置的镜像,VCI Agent Sandbox 会原地更新容器镜像。
- 更新完成后查看该 Custom Resource 的status.phase为 Running 且容器镜像已切换为目标版本时,表示原地更新沙箱已完成。
如果不需要沙箱,可以直接删除对应的 Sandbox 资源。删除沙箱时,对应的 VCI Pod、Snapshot、Custom Resource 以及 PVC 资源会自动删除。
数据盘数据保存策略由存储类的保存策略决定:
- Retain:PVC 释放后,PV 保持在 Released 状态,不自动删除或回收。
- Delete:PVC 释放后,自动删除 PV 及其底层存储资源。
如果需要定时删除,可以通过设置shutdownTime来实现。示例代码如下。
- image: vke-cn-beijing.cr.volces.com/vke/nginx:latest
- mountPath: /usr/share/nginx/html
shutdownTime: "2024-11-17T20:44:05Z"