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

Agent Sandbox de Google Kubernetes Engine (GKE) proporciona aislamiento a nivel del kernel para el código generado por modelos no confiables con gVisor. Si combinas GKE Agent Sandbox con los volúmenes de agentes de Filestore, puedes ofrecer entornos seguros y aislados respaldados por un 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 reclamación 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 de CSI en Configura el entorno de GKE para los volúmenes de agentes 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 una SandboxTemplate

Define un manifiesto SandboxTemplate llamado warmpool-filestore-template.yaml. La plantilla establece la configuración del entorno de ejecución de gVisor, los contextos de seguridad que no son raíz y un bloque volumeClaimTemplates que se orienta al StorageClass de volume-pool-sc:

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 las 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 preparación estén listos:

kubectl get sandboxwarmpool filestore-warmpool -n default

Reclama un Pod de zona de pruebas

Cuando comience una sesión de agente, envía un manifiesto SandboxClaim llamado sandbox-claim.yaml para reclamar una zona de pruebas precalentada:

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. Comprueba 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 devolvió en el paso anterior.

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

¿Qué sigue?