Usa volúmenes del agente de Filestore con GKE Agent Sandbox

GKE Agent Sandbox proporciona aislamiento a nivel del kernel para el código no confiable generado por el modelo con gVisor. Si combinas GKE Agent Sandbox con volúmenes de agentes de Filestore, puedes proporcionar entornos seguros y aislados respaldados por almacenamiento de archivos persistente y de alta densidad.

En esta guía, se muestra cómo configurar un grupo de nodos habilitado para gVisor, definir un SandboxTemplate con plantillas de reclamo de volúmenes de Filestore, precalentar zonas de pruebas con SandboxWarmPool y reclamar zonas de pruebas con SandboxClaim.

Antes de comenzar

Completa la configuración del clúster y del controlador CSI en Configura el entorno de GKE para los volúmenes del agente de Filestore.

Crea un grupo de nodos habilitado para gVisor

Crea un grupo de nodos dedicado configurado con aislamiento de zona de pruebas de 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

Reemplaza lo siguiente:

  • CLUSTER_NAME: Es el nombre del clúster de GKE.
  • REGION: La región en la que reside el clúster
  • PROJECT_ID: Es el ID del proyecto de Google Cloud .

Crea un SandboxTemplate

Define un manifiesto SandboxTemplate llamado warmpool-filestore-template.yaml. La plantilla configura los parámetros de configuración del tiempo de ejecución de gVisor, los contextos de seguridad no raíz y un bloque volumeClaimTemplates que segmenta el 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"

Aplica el manifiesto

kubectl apply -f warmpool-filestore-template.yaml

Crea un SandboxWarmPool

Para minimizar la latencia de inicio de la zona de pruebas, define un manifiesto SandboxWarmPool llamado sandbox-warmpool.yaml que mantenga instancias de Pod preparadas con anterioridad:

apiVersion: extensions.agents.x-k8s.io/v1alpha1
kind: SandboxWarmPool
metadata:
  name: filestore-warmpool
  namespace: default
spec:
  replicas: 3
  sandboxTemplateRef:
    name: warmpool-filestore-template

Aplica el manifiesto

kubectl apply -f sandbox-warmpool.yaml

Verifica que los Pods del grupo de nodos en espera estén listos:

kubectl get sandboxwarmpool filestore-warmpool -n default

Reclama un pod de zona de pruebas

Cuando comienza una sesión del agente, envía un manifiesto SandboxClaim llamado sandbox-claim.yaml para reclamar un entorno de pruebas precalentado:

apiVersion: extensions.agents.x-k8s.io/v1alpha1
kind: SandboxClaim
metadata:
  name: agent-session-1
  namespace: default
spec:
  sandboxTemplateRef:
    name: warmpool-filestore-template

Aplica el manifiesto

kubectl apply -f sandbox-claim.yaml

Verifica el volumen activado

  1. Verifica que la reclamación esté vinculada a un pod:

    kubectl get sandboxclaim agent-session-1
    
  2. Busca el Pod asociado a tu reclamo:

    kubectl get pods -l extensions.agents.x-k8s.io/claimed-by=agent-session-1
    
  3. Verifica que el volumen esté activado dentro del contenedor reclamado:

    kubectl logs POD_NAME -c agent-container
    

    Reemplaza POD_NAME por el nombre del pod que se mostró en el paso anterior.

    El registro confirma que /workspace/session-init.txt se creó en el volumen de Filestore que se activó.

¿Qué sigue?