GKE Agent Sandbox fornisce l'isolamento a livello di kernel per il codice non attendibile generato dal modello utilizzando gVisor. Combinando GKE Agent Sandbox con i volumi degli agenti Filestore, puoi fornire ambienti sicuri e isolati supportati da uno spazio di archiviazione di file persistente e ad alta densità.
Questa guida mostra come configurare un pool di nodi abilitato a gVisor, definire un
SandboxTemplate con modelli di rivendicazione del volume Filestore, eseguire il pre-warmup delle sandbox con SandboxWarmPool e rivendicare le sandbox con
SandboxClaim.
Prima di iniziare
Completa la configurazione del cluster e del driver CSI in Configurare l'ambiente GKE per i volumi dell'agente Filestore.
Crea un pool di nodi abilitato a gVisor
Crea un pool di nodi dedicato configurato con l'isolamento della sandbox 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
Sostituisci quanto segue:
CLUSTER_NAME: il nome del cluster GKE.REGION: la regione in cui risiede il cluster.PROJECT_ID: il tuo ID progetto Google Cloud .
Crea un SandboxTemplate
Definisci un manifest SandboxTemplate denominato warmpool-filestore-template.yaml.
Il modello configura le impostazioni di runtime di gVisor, i contesti di sicurezza non root
e un blocco volumeClaimTemplates che ha come target volume-pool-sc StorageClass:
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"
Applica il manifest:
kubectl apply -f warmpool-filestore-template.yaml
Crea un SandboxWarmPool
Per ridurre al minimo la latenza di avvio della sandbox, definisci un manifest SandboxWarmPool denominato
sandbox-warmpool.yaml che gestisce le istanze di pod pre-riscaldate:
apiVersion: extensions.agents.x-k8s.io/v1alpha1
kind: SandboxWarmPool
metadata:
name: filestore-warmpool
namespace: default
spec:
replicas: 3
sandboxTemplateRef:
name: warmpool-filestore-template
Applica il manifest:
kubectl apply -f sandbox-warmpool.yaml
Verifica che i pod del pool preinizializzato siano pronti:
kubectl get sandboxwarmpool filestore-warmpool -n default
Richiedere un pod sandbox
Quando inizia una sessione dell'agente, invia un manifest SandboxClaim denominato
sandbox-claim.yaml per richiedere una sandbox pre-riscaldata:
apiVersion: extensions.agents.x-k8s.io/v1alpha1
kind: SandboxClaim
metadata:
name: agent-session-1
namespace: default
spec:
sandboxTemplateRef:
name: warmpool-filestore-template
Applica il manifest:
kubectl apply -f sandbox-claim.yaml
Verificare il volume montato
Controlla che la richiesta sia associata a un pod:
kubectl get sandboxclaim agent-session-1
Trova il pod associato alla tua rivendicazione:
kubectl get pods -l extensions.agents.x-k8s.io/claimed-by=agent-session-1
Verifica che il volume sia montato all'interno del container rivendicato:
kubectl logs POD_NAME -c agent-container
Sostituisci
POD_NAMEcon il nome del pod restituito nel passaggio precedente.Il log conferma che
/workspace/session-init.txtè stato creato sul volume Filestore montato.
Passaggi successivi
- Esplora la sandbox dell'agente con binding tardivo.
- Esegui il deployment di carichi di lavoro GKE autogestiti.
- Scopri come creare e gestire i pool di volumi.