- 文档首页
容器服务
弹性容器实例 VCI
用户指南
VCI Agent Sandbox
存储卷挂载
动态挂载(Dynamic)
动态挂载(Dynamic)
本文介绍如何在 VCI Agent Sandbox 场景下,使用存储卷挂载能力,实现 Sandbox 在预热池实例中动态挂载(Dynamic)存储卷,满足不同业务、不同租户对差异化存储的需求。
动态挂载模式无需在模板中预置 Volume,SandboxClaim 认领沙箱实例时指定容器内挂载目录(mountPath),并支持追加新的 Volume 与 volumeMount,由 VCI 以 Hidecar(影子容器)方式注入 CSI 挂载组件保障安全。适用于挂载目录在运行沙箱实例时才能确定、或已有 Annotation 含 mountPath 需低成本平移的场景。当前仅支持 TOS 类型的存储卷。
动态挂载能力通过在 SandboxTemplate 与 SandboxClaim 上添加 Annotation 声明来开启和配置。核心 Annotation 说明如下所示。
使用动态挂载能力时,请注意以下限制。
- VCI 业务集群中已安装 VCI Agent Sandbox 对应的组件:agent-sandbox,用于支持 SandboxTemplate / SandboxWarmPool / SandboxClaim 等 CRD。详细操作,请参见 安装指南。
- 已创建 TOS 存储桶(Bucket)。详细操作,请参见 创建存储桶。
- 创建 SandboxTemplate,并在 podTemplate 的 Annotations 中声明vke.volcengine.com/csi-sidecar-inject: "true",开启动态挂载模式。示例 SandboxTemplate YAML 文件dynamic-mount-template.yaml内容如下所示。
apiVersion: extensions.agents.x-k8s.io/v1alpha1
name: dynamic-mount-template
vke.volcengine.com/csi-sidecar-inject: "true"
vke.volcengine.com/burst-to-vci: enforce
image: doc-cn-beijing.cr.volces.com/vke/nginx-demo:v1.0
command: ["/bin/sh", "-c", "sleep 36000"]
- 执行以下命令,创建 SandboxTemplate。
kubectl create -f dynamic-mount-template.yaml
预热池将基于模板预热一批处于 Running 状态的 Sandbox,使认领请求直接命中预热实例。动态挂载所需的 Hidecar 与 Init 容器也在此阶段完成注入。
- 创建 SandboxWarmPool,示例 YAML 文件dynamic-mount-warmpool.yaml内容如下所示。
apiVersion: extensions.agents.x-k8s.io/v1alpha1
name: dynamic-mount-warmpool
name: dynamic-mount-template
- 执行以下命令创建 SandboxWarmPool。
kubectl apply -f dynamic-mount-warmpool.yaml
通过 Secret 管理访问 TOS 的凭证。
- 创建 Secret 的 YAML 文件。示例文件vke-tos-secret.yaml代码如下。
说明
您可以使用echo -n "${ak}" | base64命令对 AK、SK 等进行 Base64 编码,并将下方代码中的所有******替换为您自己的实际值。更多 Base64 编码说明,请参见 FAQ。 kubectl create -f vke-tos-secret.yaml
准备动态挂载的目标 PV,目前动态挂载模式仅支持 TOS 存储类型。
- 创建 PV 的 YAML 文件。示例 YAML 文件pv-tos-shared.yaml内容如下所示。
driver: tos.csi.volcengine.com
url: https://tos-s3-cn-beijing.ivolces.com
volumeHandle: pv-tos-shared
kubectl create -f pv-tos-shared.yaml
本文提供如下两种创建 Sandbox 方式。
通过 SandboxClaim 认领
通过 E2B SDK 创建
通过创建 SandboxClaim 并指定 mountPath 的方式,发起认领 Sandbox 并声明动态挂载配置。Annotation 中包含mountPath字段即进入动态挂载模式,控制器通过 Hidecar 通道执行 CSI 挂载,将指定 PV 的子目录挂载到容器内的任意绝对路径。
- 创建 SandboxClaim。示例 YAML 文件dynamic-mount-claim.yaml内容如下所示。
apiVersion: extensions.agents.x-k8s.io/v1alpha1
name: dynamic-mount-claim
vke.volcengine.com/dynamic-volume-mount-config: '[{"volumeName":"data-vol","pvName":"pv-tos-shared","mountPath":"/mnt/data","subPath":"/tenant-a"}]'
name: dynamic-mount-template
kubectl create -f dynamic-mount-claim.yaml
基于已创建的 SandboxTemplate,使用 E2B 协议创建 Sandbox,可在 Sandbox 的metadata中传入动态挂载 Annotation。示例代码如下,更多 E2B SDK 相关参数说明和开发指南,请参见 E2B SDK 开发指南。 说明
E2B SDK 中template参数需配置为已创建的 SandboxTemplate 的 ID,不同方式创建的 SandboxTemplate 其 ID 取值不同:
- 通过 Kubernetes API(YAML)创建 SandboxTemplate 时:Template ID 为<metadata.namespace 值--metadata.name 值>,例如default--dynamic-mount-template。
- 通过 VCI E2B SDK 创建 SandboxTemplate 时:Template ID 为实际返回的template_id参数值。
from e2b_code_interpreter import Sandbox
template="default--dynamic-mount-template",
"vke.volcengine.com/dynamic-volume-mount-config": json.dumps([
"volumeName": "data-vol",
"pvName": "pv-tos-shared",
"mountPath": "/mnt/data",
print(f"sandbox id: {sbx.sandbox_id}")
确认存储卷已按预期挂载到容器指定目录,并可正常读写。
kubectl exec dynamic-mount-claim -c app -n default -- df -h /mnt/data
- 预期返回结果如下,Mounted on 列为/mnt/data,Filesystem 为 TOS 挂载,说明 TOS 已挂载到目标目录。
Filesystem Size Used Avail Use% Mounted on
tosfs 10T 0 10T 0% /mnt/data
kubectl exec dynamic-mount-claim -c app -n default -- ls -la /mnt/data
- 预期返回结果如下,列出 TOS Bucket 中tenant-a子目录下的文件与目录。
drwxr-xr-x 2 root root 0 Sep 15 16:20 .
drwxr-xr-x 3 root root 0 Sep 15 16:20 ..
-rw-r--r-- 1 root root 26 Sep 15 16:20 hello-from-tos.txt
最近更新时间:2026.09.18 16:01:27