ארגז החול לסוכנים ב-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
אימות עוצמת הקול שהוגדרה
בודקים שהתלונה משויכת ל-Pod:
kubectl get sandboxclaim agent-session-1
מאתרים את הפוד שמשויך לתלונה:
kubectl get pods -l extensions.agents.x-k8s.io/claimed-by=agent-session-1
מוודאים שהנפח מותקן בתוך הקונטיינר שצוין:
kubectl logs POD_NAME -c agent-container
מחליפים את
POD_NAMEבשם ה-Pod שהוחזר בשלב הקודם.היומן מאשר ש-
/workspace/session-init.txtנוצר בנפח Filestore המותקן.
המאמרים הבאים
- כדאי לנסות את ארגז החול של הסוכן עם קישור מאוחר.
- פריסת עומסי עבודה ב-GKE בניהול עצמי.
- איך יוצרים ומנהלים מאגרי נפח