Google Kubernetes Engine (GKE) Agent Sandbox fournit une isolation au niveau du noyau pour le code non fiable généré par le modèle à l'aide de gVisor. En combinant GKE Agent Sandbox avec les volumes d'agents Filestore, vous pouvez fournir des environnements sécurisés et isolés, soutenus par un stockage de fichiers persistant et haute densité.
Ce guide explique comment configurer un pool de nœuds compatible avec gVisor, définir un SandboxTemplate avec des modèles de revendication de volume Filestore, préchauffer des bacs à sable avec SandboxWarmPool et revendiquer des bacs à sable avec SandboxClaim.
Avant de commencer
Terminez la configuration du cluster et du pilote CSI dans Configurer l'environnement GKE pour les volumes de l'agent Filestore.
Créer un pool de nœuds compatible avec gVisor
Créez un pool de nœuds dédié configuré avec l'isolation du bac à sable 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
Remplacez les éléments suivants :
CLUSTER_NAME: nom de votre cluster GKE.REGION: région dans laquelle se trouve le cluster.PROJECT_ID: ID de votre projet Google Cloud .
Créer un SandboxTemplate
Définissez un fichier manifeste SandboxTemplate nommé warmpool-filestore-template.yaml.
Le modèle configure les paramètres d'exécution gVisor, les contextes de sécurité non root et un bloc volumeClaimTemplates ciblant 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"
Appliquez le fichier manifeste :
kubectl apply -f warmpool-filestore-template.yaml
Créer un SandboxWarmPool
Pour minimiser la latence de démarrage de la sandbox, définissez un fichier manifeste SandboxWarmPool nommé sandbox-warmpool.yaml qui conserve les instances de pod préchauffées :
apiVersion: extensions.agents.x-k8s.io/v1alpha1
kind: SandboxWarmPool
metadata:
name: filestore-warmpool
namespace: default
spec:
replicas: 3
sandboxTemplateRef:
name: warmpool-filestore-template
Appliquez le fichier manifeste :
kubectl apply -f sandbox-warmpool.yaml
Vérifiez que les pods du pool de préchauffage sont prêts :
kubectl get sandboxwarmpool filestore-warmpool -n default
Revendiquer un pod de bac à sable
Lorsqu'une session d'agent commence, envoyez un fichier manifeste SandboxClaim nommé sandbox-claim.yaml pour revendiquer un bac à sable préchauffé :
apiVersion: extensions.agents.x-k8s.io/v1alpha1
kind: SandboxClaim
metadata:
name: agent-session-1
namespace: default
spec:
sandboxTemplateRef:
name: warmpool-filestore-template
Appliquez le fichier manifeste :
kubectl apply -f sandbox-claim.yaml
Vérifier le volume installé
Vérifiez que la revendication est liée à un pod :
kubectl get sandboxclaim agent-session-1
Recherchez le pod associé à votre revendication :
kubectl get pods -l extensions.agents.x-k8s.io/claimed-by=agent-session-1
Vérifiez que le volume est installé dans le conteneur revendiqué :
kubectl logs POD_NAME -c agent-container
Remplacez
POD_NAMEpar le nom du pod renvoyé à l'étape précédente.Le journal confirme que
/workspace/session-init.txta été créé sur le volume Filestore monté.
Étapes suivantes
- Découvrez le bac à sable de l'agent avec liaison tardive.
- Déployez des charges de travail GKE autogérées.
- Découvrez comment créer et gérer des pools de volumes.