Google Kubernetes Engine (GKE) Agent Substrate היא פלטפורמת תשתית שמנהלת את מחזור החיים של ארגזי חול של סוכני AI עם שמירת מצב. הפלטפורמה Agent Substrate מאפשרת להשעות עומסי עבודה של סוכנים לא פעילים כדי לחסוך בעלויות מחשוב, ולחדש אותם תוך פחות משנייה כשמגיעות הנחיות או משימות חדשות.
כרכים של סוכני Filestore מספקים את שכבת האחסון המתמיד ל-Agent Substrate, ושומרים על קבצים בסביבת העבודה, מאגרי קוד וארטיפקטים של לוח השריטות במהלך מחזורי ההשהיה וההפעלה מחדש של ארגז החול.
איך Agent Substrate משתמש בנפחי סוכנים
בשלבים הבאים מוסבר איך נפחי האחסון של Agent Substrate ושל Filestore Agent תומכים בסוכן קידוד אינטראקטיבי שעוזר למפתחים ליצור תכונות, להריץ בדיקות ולנפות באגים בקוד:
- הפעלת סשן: כשמפתח שולח משימה, Agent Substrate יוצר סביבת ארגז חול ב-GKE ומטמיע נפח ייעודי של Filestore. הסוכן משכפל את מאגר הפרויקט, מתקין את יחסי התלות ומכין את סביבת העבודה.
- השעיה במצב המתנה שחוסכת בעלויות: בזמן שהמפתח בודק את ההבדלים בין גרסאות הקוד או יוצר את ההנחיה הבאה, Agent Substrate מבטל את הטעינה של הנפח ומסיים את סביבת המחשוב. השימוש במשאבי מחשוב יורד לאפס, בזמן שכל הקבצים ב-Workspace, היסטוריית ה-Git ומטמון הבנייה נשארים בנפח האחסון.
- המשך מיידי: כשהמפתח שולח הנחיה חדשה, Agent Substrate מקבל ארגז חול שהוכן מראש ומצרף מחדש את אמצעי האחסון הקיים תוך פחות מ-100 אלפיות השנייה. הסוכן ממשיך מיד את עומס העבודה עם הקשר מלא של מערכת הקבצים, וכך נמנעות פעולות שגוזלות זמן כמו שיבוט מחדש של מאגר או התקנה מחדש של תלות.
מידע נוסף מופיע במאמרי העזרה בנושא Agent Substrate.
כדי להריץ עומסי עבודה של סוכנים עם שמירת מצב ב-GKE Agent Substrate עם נפחי סוכנים של Filestore, צריך להתקין את Agent Substrate, להגדיר את השילוב של מנהל התקן ה-CSI של Filestore ולהגדיר את עומסי העבודה של הסוכנים לשימוש בנפחי CSI דינמיים.
התקנת Agent Substrate
כדי להכין את הפרויקט Google Cloud ולהתקין את Agent Substrate באשכול GKE Standard, פועלים לפי ההוראות במאמר התקנת Agent Substrate ב-GKE.
התקנה והגדרה של מנהל התקן CSI של Filestore
כדי להשתמש בנפחי Filestore agent עם Agent Substrate, צריך לבחור בשלב האופציונלי Filestore CSI driver כשמריצים את תוכנת ההתקנה האינטראקטיבית של Agent Substrate.
מישור הבקרה של Agent Substrate (ateapi) מתקשר ישירות עם בקר מנהל ההתקן של Filestore CSI דרך gRPC ברשת. מנהל ההתקן של CSI מספק, מצרף ומנתק באופן דינמי נפחים לכל שחקן ממאגר הנפחים של Filestore, בסנכרון עם מחזור החיים של כל שחקן.
יצירת עומסי עבודה שמשתמשים בנפחי Filestore
ב-Agent Substrate, מגדירים נפחים חיצוניים של Filestore באופן הצהרתי במשאב ActorTemplate, במקום ליצור אובייקטים נפרדים של Kubernetes PersistentVolumeClaim.
בשלבים הבאים מוסבר איך להגדיר StorageClass ו-CSIDriverConfig של Filestore, לפרוס WorkerPool ו-ActorTemplate שמטמיעים נפח חיצוני של Filestore ולנהל את מחזור החיים של השחקן.
יצירת StorageClass
יוצרים קובץ בשם storageclass.yaml כדי להקצות נפחים דינמיים ממאגר הנפחים של Filestore:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: substrate-volumepool-sc
provisioner: filestore.csi.storage.gke.io
parameters:
volume-pool: "projects/PROJECT_ID/locations/LOCATION/volumePools/VOLUME_POOL_NAME"
allowVolumeExpansion: false
reclaimPolicy: Delete
volumeBindingMode: Immediate
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
LOCATION: האזור שבו נמצא מאגר הנפחים, למשלus-central1. -
VOLUME_POOL_NAME: השם של מאגר הנפחים של Filestore.
מחילים את StorageClass:
kubectl apply -f storageclass.yaml
רישום של CSIDriverConfig
משאב CSIDriverConfig מגשר בין מנהל ההקצאות (provisioner) של Kubernetes StorageClass (filestore.csi.storage.gke.io) לבין נקודת הקצה ברשת gRPC של שירות בקר ה-CSI של Filestore, ולבין הנתיב של שקע הדומיין המקומי של Unix של פלאגין הצומת CSI.
יוצרים קובץ בשם csi-driver-config.yaml:
apiVersion: ate.dev/v1alpha1
kind: CSIDriverConfig
metadata:
name: filestore.csi.storage.gke.io
spec:
driverName: filestore.csi.storage.gke.io
controllerEndpoint: tcp://csi-filestore-controller.gcp-filestore-csi-driver.svc:10000
nodeSocketOverride: unix:///var/lib/kubelet/plugins/filestore.csi.storage.gke.io/csi.sock
tls:
enabled: true
usePodIdentity: true
serverName: csi-filestore-controller.gcp-filestore-csi-driver.svc
מחילים את CSIDriverConfig:
kubectl apply -f csi-driver-config.yaml
הגדרת WorkerPool וActorTemplate
יוצרים את
ate-demoatespace ואת מרחב השמות של Kubernetes שישמשו כגבול הבידוד של מאגר העובדים, תבנית השחקן והשחקנים:kubectl ate create atespace ate-demo kubectl create namespace ate-demo
יוצרים משאב
WorkerPoolכדי לשמור על עומסי עבודה של גיבוי פיזי מוכנים לאירוח של ארגזי חול של שחקנים. שומרים את קובץ המניפסט הבא בשםworker-pool.yaml:apiVersion: ate.dev/v1alpha1 kind: WorkerPool metadata: name: agent-pool namespace: ate-demo labels: workload: stateful-agent spec: replicas: 5 workerImage: ko://github.com/agent-substrate/substrate/cmd/ateom-gvisorהחלת המניפסט
WorkerPool:kubectl apply -f worker-pool.yaml
יוצרים קובץ בשם
actor-template.yamlשמגדיר אתActorTemplateשמטמיע נפח אחסון של 5 GiB מ-substrate-volumepool-sc:metadata: atespace: ate-demo name: stateful-agent-template workerSelector: matchLabels: workload: stateful-agent containers: - name: agent image: CONTAINER_IMAGE volumeMounts: - name: shared-storage mountPath: /mnt/shared readyz: httpGet: path: /readyz port: 8080 sandboxConfig: sandboxClass: SANDBOX_CLASS_GVISOR configName: gvisor-default snapshotsConfig: storageLocation: gs://SNAPSHOT_BUCKET/stateful-agent volumes: - name: shared-storage externalVolumeTemplate: capacity: 5Gi storageClassName: substrate-volumepool-scמחליפים את מה שכתוב בשדות הבאים:
-
CONTAINER_IMAGE: קובץ האימג' של הקונטיינר של עומס העבודה של הסוכן, למשלgcr.io/my-project/agent-app@sha256:7f28ab0.... -
SNAPSHOT_BUCKET: קטגוריית Cloud Storage שבה Agent Substrate משתמש כדי לאחסן תמונות מצב של שחקנים.
במניפסט הזה,
volumes[].externalVolumeTemplateמציין את קיבולת הנפח המבוקשת (5Gi) ואתStorageClass(substrate-volumepool-sc) שהספק שלו תואם ל-CSIDriverConfig, ואילוcontainers[].volumeMountsמטמיע את הנפח הזה ב-/mnt/shared. כל אמצעי אחסון שמוצהר ב-volumesצריך להיות מותקן על ידי לפחות קונטיינר אחד.-
יוצרים את
ActorTemplateבאמצעות Agent Substrate API באמצעותkubectl ateCLI:kubectl ate create actor-template -f actor-template.yaml
יצירה, השעיה והפעלה מחדש של שחקן
אחרי שיוצרים את ActorTemplate והתמונה המושלמת שלו מוכנה, אפשר ליצור מופע של שחקן ולנהל את מצב ההפעלה שלו:
כדי ליצור שחקן חדש מ-
stateful-agent-template:kubectl ate create actor ACTOR_NAME \ --template=stateful-agent-template \ -a ate-demoמחליפים את
ACTOR_NAMEבשם תווית DNS-1123 של השחקן, למשלmy-agent-1.כשיוצרים את השחקן, Agent Substrate מקצה באופן דינמי נפח אחסון ייעודי של Filestore מ-
substrate-volumepool-scומטמיע אותו ב-/mnt/shared.השעיה של מי שהשתמש בתוסף כשהוא לא פעיל:
kubectl ate suspend actor ACTOR_NAME \ -a ate-demoהשעיה של השחקן גורמת לנקודת ביקורת של מצב הזיכרון שלו ב-Cloud Storage, להסרת הטעינה ולניתוק של נפח Filestore תוך שמירה של כל קובצי סביבת העבודה בנפח, ולשחרור עומס העבודה.
המשך הפעולה של השחקן כשמגיעה בקשה או משימה חדשה:
kubectl ate resume actor ACTOR_NAME \ -a ate-demoכשמפעילים מחדש את השחקן, הוא מוקצה לעומס עבודה זמין, תמונת הזיכרון שלו משוחזרת והוא מחובר מחדש לנפח Filestore הקיים בכתובת
/mnt/shared, כשכל הקבצים נשארים ללא שינוי.
המאמרים הבאים
- מגדירים את הסביבה ל-GKE.
- הגדרת ארגזי חול מחוממים מראש באמצעות Agent Sandbox.
- כדאי לנסות אחסון דינמי באמצעות Agent Sandbox late-binding.