שימוש בנפחי סוכן של Filestore עם GKE Agent Sandbox

ארגז החול לסוכנים ב-Google Kubernetes Engine ‏ (GKE) מספק בידוד ברמת הליבה לקוד שנוצר על ידי מודלים לא מהימנים באמצעות gVisor. שילוב של GKE Agent Sandbox עם נפחי אחסון של Filestore Agent מאפשר לספק סביבות מאובטחות ומבודדות שמגובות באחסון קבצים קבוע בצפיפות גבוהה.

במדריך הזה נסביר איך להגדיר מאגר צמתים עם gVisor, להגדיר SandboxTemplate באמצעות תבניות של בקשות לשימוש בנפח אחסון ב-Filestore, להכין את ארגזי החול מראש באמצעות SandboxWarmPool ולבקש שימוש בארגזי חול באמצעות SandboxClaim.

לפני שמתחילים

משלימים את ההגדרה של אשכול ושל מנהל התקן CSI בקטע הגדרת סביבת GKE לנפחי סוכן Filestore.

יצירת מאגר צמתים עם gVisor

יוצרים מאגר צמתים ייעודי שמוגדר עם בידוד ארגז חול של 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

מחליפים את מה שכתוב בשדות הבאים:

  • CLUSTER_NAME: השם של אשכול GKE.
  • REGION: האזור שבו נמצא האשכול.
  • PROJECT_ID: מזהה הפרויקט ב- Google Cloud .

יצירת SandboxTemplate

מגדירים מניפסט SandboxTemplate בשם warmpool-filestore-template.yaml. התבנית מגדירה את ההגדרות של זמן הריצה של gVisor, הקשרים של אבטחה ללא הרשאות root ובלוק volumeClaimTemplates שמכוון אל 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"

החלת המניפסט:

kubectl apply -f warmpool-filestore-template.yaml

יצירת SandboxWarmPool

כדי למזער את זמן האחזור של הפעלת ארגז החול, מגדירים קובץ מניפסט SandboxWarmPool בשם sandbox-warmpool.yaml ששומר על מופעי פוד מחוממים מראש:

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

החלת המניפסט:

kubectl apply -f sandbox-warmpool.yaml

מוודאים שהפודים של המאגר החם מוכנים:

kubectl get sandboxwarmpool filestore-warmpool -n default

מימוש פוד של ארגז חול

כשמתחיל סשן של סוכן, שולחים מניפסט SandboxClaim בשם sandbox-claim.yaml כדי לתבוע ארגז חול שחומם מראש:

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

החלת המניפסט:

kubectl apply -f sandbox-claim.yaml

אימות עוצמת הקול שהוגדרה

  1. בודקים שהתלונה משויכת ל-Pod:

    kubectl get sandboxclaim agent-session-1
    
  2. מאתרים את הפוד שמשויך לתלונה:

    kubectl get pods -l extensions.agents.x-k8s.io/claimed-by=agent-session-1
    
  3. מוודאים שהנפח מותקן בתוך הקונטיינר שצוין:

    kubectl logs POD_NAME -c agent-container
    

    מחליפים את POD_NAME בשם ה-Pod שהוחזר בשלב הקודם.

    היומן מאשר ש-/workspace/session-init.txt נוצר בנפח Filestore המותקן.

המאמרים הבאים