Utilizzare i volumi dell'agente Filestore con GKE Agent Sandbox

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

  1. Controlla che la richiesta sia associata a un pod:

    kubectl get sandboxclaim agent-session-1
    
  2. Trova il pod associato alla tua rivendicazione:

    kubectl get pods -l extensions.agents.x-k8s.io/claimed-by=agent-session-1
    
  3. Verifica che il volume sia montato all'interno del container rivendicato:

    kubectl logs POD_NAME -c agent-container
    

    Sostituisci POD_NAME con il nome del pod restituito nel passaggio precedente.

    Il log conferma che /workspace/session-init.txt è stato creato sul volume Filestore montato.

Passaggi successivi