Menggunakan volume agen Filestore dengan GKE Agent Sandbox

GKE Agent Sandbox menyediakan isolasi tingkat kernel untuk kode yang dibuat model yang tidak tepercaya dengan menggunakan gVisor. Dengan menggabungkan GKE Agent Sandbox dengan volume agen Filestore, Anda dapat menyediakan lingkungan yang aman dan terisolasi yang didukung oleh penyimpanan file persisten dengan kepadatan tinggi.

Panduan ini menunjukkan cara mengonfigurasi kumpulan node yang mendukung gVisor, menentukan SandboxTemplate dengan template klaim volume Filestore, memanaskan sandbox dengan SandboxWarmPool, dan mengklaim sandbox dengan SandboxClaim.

Sebelum memulai

Selesaikan penyiapan cluster dan driver CSI di Menyiapkan lingkungan GKE untuk volume agen Filestore.

Membuat node pool yang mendukung gVisor

Buat node pool khusus yang dikonfigurasi dengan isolasi 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

Ganti kode berikut:

  • CLUSTER_NAME: nama cluster GKE Anda.
  • REGION: region tempat cluster berada.
  • PROJECT_ID: Google Cloud Project ID Anda.

Buat SandboxTemplate

Tentukan manifes SandboxTemplate bernama warmpool-filestore-template.yaml. Template mengonfigurasi setelan runtime gVisor, konteks keamanan non-root, dan blok volumeClaimTemplates yang menargetkan 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"

Terapkan manifes:

kubectl apply -f warmpool-filestore-template.yaml

Membuat SandboxWarmPool

Untuk meminimalkan latensi startup sandbox, tentukan manifes SandboxWarmPool bernama sandbox-warmpool.yaml yang mempertahankan instance pod yang sudah melewati pra-penyiapan:

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

Terapkan manifes:

kubectl apply -f sandbox-warmpool.yaml

Pastikan pod warm pool sudah siap:

kubectl get sandboxwarmpool filestore-warmpool -n default

Mengklaim pod sandbox

Saat sesi agen dimulai, kirimkan manifes SandboxClaim bernama sandbox-claim.yaml untuk mengklaim sandbox yang sudah dipanaskan sebelumnya:

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

Terapkan manifes:

kubectl apply -f sandbox-claim.yaml

Memverifikasi volume yang terpasang

  1. Periksa apakah klaim terikat ke pod:

    kubectl get sandboxclaim agent-session-1
    
  2. Temukan pod yang terkait dengan klaim Anda:

    kubectl get pods -l extensions.agents.x-k8s.io/claimed-by=agent-session-1
    
  3. Pastikan volume terpasang di dalam container yang diklaim:

    kubectl logs POD_NAME -c agent-container
    

    Ganti POD_NAME dengan nama pod yang ditampilkan di langkah sebelumnya.

    Log mengonfirmasi bahwa /workspace/session-init.txt dibuat di volume Filestore yang di-mount.

Langkah berikutnya