Utiliser des volumes d'agent Filestore avec GKE Agent Sandbox

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é

  1. Vérifiez que la revendication est liée à un pod :

    kubectl get sandboxclaim agent-session-1
    
  2. Recherchez le pod associé à votre revendication :

    kubectl get pods -l extensions.agents.x-k8s.io/claimed-by=agent-session-1
    
  3. Vérifiez que le volume est installé dans le conteneur revendiqué :

    kubectl logs POD_NAME -c agent-container
    

    Remplacez POD_NAME par le nom du pod renvoyé à l'étape précédente.

    Le journal confirme que /workspace/session-init.txt a été créé sur le volume Filestore monté.

Étapes suivantes