Google Kubernetes Engine (GKE) Agent Sandbox 使用 gVisor 为不受信任的模型生成代码提供内核级隔离。通过将 GKE Agent Sandbox 与 Filestore 智能体存储卷相结合,您可以提供由永久性高密度文件存储支持的安全隔离环境。
本指南演示了如何配置启用了 gVisor 的节点池、使用 Filestore 卷声明模板定义 SandboxTemplate、使用 SandboxWarmPool 预热沙盒,以及使用 SandboxClaim 声明沙盒。
准备工作
在为 Filestore 智能体存储卷设置 GKE 环境中完成集群和 CSI 驱动程序设置。
创建启用了 gVisor 的节点池
创建一个配置了 gVisor 沙盒隔离的专用节点池:
gcloud container node-pools create gvisor-pool \
--cluster=CLUSTER_NAME \
--location=REGION \
--project=PROJECT_ID \
--image-type=cos_containerd \
--sandbox=type=gvisor \
--num-nodes=2 \
--machine-type=n2-standard-16 \
--enable-autoscaling \
--min-nodes=1 \
--max-nodes=10 \
--scopes=cloud-platform
替换以下内容:
CLUSTER_NAME:GKE 集群的名称。REGION:集群所在的区域。PROJECT_ID:您的 Google Cloud 项目 ID。
创建 SandboxTemplate
定义一个名为 warmpool-filestore-template.yaml 的 SandboxTemplate 清单。
该模板会配置 gVisor 运行时设置、非根安全上下文以及针对 volume-pool-sc StorageClass 的 volumeClaimTemplates 块:
apiVersion: extensions.agents.x-k8s.io/v1alpha1
kind: SandboxTemplate
metadata:
name: warmpool-filestore-template
namespace: default
spec:
podTemplate:
spec:
runtimeClassName: gvisor
automountServiceAccountToken: false
securityContext:
runAsNonRoot: true
runAsUser: 1000
fsGroup: 1000
nodeSelector:
sandbox.gke.io/runtime: gvisor
tolerations:
- key: "sandbox.gke.io/runtime"
value: "gvisor"
effect: "NoSchedule"
containers:
- name: agent-container
image: busybox
command: ["/bin/sh", "-c"]
args:
- |
echo "Sandbox started with Filestore volume mounted!"
ls -la /workspace
date > /workspace/session-init.txt
cat /workspace/session-init.txt
sleep 3600
securityContext:
capabilities:
drop: ["ALL"]
allowPrivilegeEscalation: false
resources:
requests:
cpu: "250m"
memory: "256Mi"
limits:
cpu: "500m"
memory: "512Mi"
volumeMounts:
- name: agent-workspace
mountPath: /workspace
volumeClaimTemplates:
- metadata:
name: agent-workspace
spec:
accessModes: ["ReadWriteMany"]
storageClassName: "volume-pool-sc"
resources:
requests:
storage: "1Gi"
应用清单:
kubectl apply -f warmpool-filestore-template.yaml
创建 SandboxWarmPool
为了最大限度地缩短沙盒启动延迟时间,请定义一个名为 sandbox-warmpool.yaml 的 SandboxWarmPool 清单,用于维护预热的 Pod 实例:
apiVersion: extensions.agents.x-k8s.io/v1alpha1
kind: SandboxWarmPool
metadata:
name: filestore-warmpool
namespace: default
spec:
replicas: 3
sandboxTemplateRef:
name: warmpool-filestore-template
应用清单:
kubectl apply -f sandbox-warmpool.yaml
验证温池 Pod 是否已准备就绪:
kubectl get sandboxwarmpool filestore-warmpool -n default
领取沙盒 Pod
代理会话开始后,提交名为 sandbox-claim.yaml 的 SandboxClaim 清单,以声明预热沙盒:
apiVersion: extensions.agents.x-k8s.io/v1alpha1
kind: SandboxClaim
metadata:
name: agent-session-1
namespace: default
spec:
sandboxTemplateRef:
name: warmpool-filestore-template
应用清单:
kubectl apply -f sandbox-claim.yaml
验证已装载的卷
检查声明是否已绑定到 Pod:
kubectl get sandboxclaim agent-session-1
找到与您的版权主张相关联的 Pod:
kubectl get pods -l extensions.agents.x-k8s.io/claimed-by=agent-session-1
验证卷是否已装载到声明的容器中:
kubectl logs POD_NAME -c agent-container
将
POD_NAME替换为上一步中返回的 Pod 的名称。日志确认已在装载的 Filestore 卷上创建
/workspace/session-init.txt。
后续步骤
- 探索采用延迟绑定的 Agent Sandbox。
- 部署自行管理的 GKE 工作负载。
- 了解如何创建和管理卷池。