אם אתם משתמשים בנפחי אחסון לסוכנים של Filestore עם פלטפורמת תזמור משלכם, ארגזי חול שמבוססים על VM או סביבות קונטיינרים שלא שייכות ל-Google Kubernetes Engine (GKE), אתם יכולים להקצות ולנהל נפחי אחסון נפרדים בתוך מאגר נפחי אחסון ישירות באמצעות ה-API בארכיטקטורת REST של Filestore.
לפני שמתחילים
- משלימים את הגדרת הפרויקט הראשונית ואת הגדרת הרשת של Private Service Connect (PSC) בהגדרת נפחי אחסון לסוכנים ב-Filestore.
- יוצרים מאגר אזורי של נפחים ביצירה וניהול של מאגרי נפחים.
יצירת אמצעי אחסון
API בארכיטקטורת REST
כדי להקצות נפח אחסון בודד בתוך מאגר נפחי אחסון, שולחים בקשת HTTP מסוג POST לנקודת הקצה (endpoint) של volumes.create:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/volumePools/VOLUME_POOL_ID/volumes?volumeId=VOLUME_ID" \
-d '{
"description": "Dynamic tool scratchpad for Agent Worker 12",
"labels": {
"agent_id": "worker-12",
"workflow": "code_eval"
}
}'
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
LOCATION: האזור שבו נמצא מאגר הנפחים הראשי, למשלus-central1. -
VOLUME_POOL_ID: המזהה של מאגר הנפחים הראשי. -
VOLUME_ID: המזהה של אמצעי האחסון, שתואם ל-^[a-z]([a-z0-9-]{0,61}[a-z0-9])?$.
הקצאת הנפח מסתיימת תוך פחות משנייה או שתיים. ה-API מחזיר את המשאב Volume ישירות. אפשר גם לציין מכסת נפח בהתאמה אישית (quotaMib) ואפשרויות ייצוא דינמיות של NFS (ipAcls) במהלך יצירת הנפח:
{
"name": "projects/my-project/locations/us-central1/volumePools/my-volume-pool/volumes/my-volume",
"description": "Dynamic tool scratchpad for Agent Worker 12",
"mountPoint": {
"ipAddress": "10.128.0.45",
"mountName": "my_volume"
}
}
שימו לב לערכים שמוחזרים בתוך mountPoint:
-
ipAddress: כתובת ה-IP הפנימית של נקודת הקצה של טעינת ה-NFS ברשת ה-VPC. -
mountName: רכיב נתיב הייצוא של NFS לטעינה.
טעינת אמצעי אחסון
אחרי הקצאת נפח, כלי התזמור יכול לטעון את הייצוא של NFSv3 של הנפח ישירות לכל VM של לקוח או מארח קונטיינר שמחובר לאותה רשת VPC:
- מוודאים שכלי הלקוח של NFS מותקנים במארח (לדוגמה,
nfs-commonב-Debian או ב-Ubuntu). יוצרים ספריית טעינה וטוענים את אמצעי האחסון באמצעות הערכים של
ipAddressו-mountNameשהוחזרו ב-mountPointשל אמצעי האחסון:sudo mkdir -p MOUNT_DIR sudo mount -t nfs -o vers=3,proto=tcp,mountproto=tcp,port=2049,mountport=2050 \ IP_ADDRESS:/MOUNT_NAME MOUNT_DIRמחליפים את מה שכתוב בשדות הבאים:
-
MOUNT_DIR: הנתיב לספרייה המקומית שבה נמצא אמצעי האחסון, למשל/workspace. -
IP_ADDRESS: הערך שלmountPoint.ipAddressשמוחזר כשיוצרים או מאחזרים את אמצעי האחסון. -
MOUNT_NAME: הערך שלmountPoint.mountNameשמוחזר כשיוצרים או מאחזרים את אמצעי האחסון.
-
ניהול אמצעי אחסון
API בארכיטקטורת REST
בכל אחת מהבקשות הבאות, מחליפים את:
-
PROJECT_ID: מזהה הפרויקט ב- Google Cloud . -
LOCATION: האזור שבו נמצא מאגר הנפחים הראשי. -
VOLUME_POOL_ID: המזהה של מאגר הנפחים הראשי. -
VOLUME_ID: המזהה של הספר.
קבלת פרטי עוצמת הקול
כדי לראות את הפרטים של ווליום קיים, כולל mountPoint וstate מחזור החיים הנוכחי:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/volumePools/VOLUME_POOL_ID/volumes/VOLUME_ID"
הצגת רשימה של אמצעי אחסון במאגר
כדי להציג רשימה של כל אמצעי האחסון שהוקצו במאגר אמצעי אחסון:
curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/volumePools/VOLUME_POOL_ID/volumes"
עדכון מכסת הנפח
כדי להגדיל את מכסת האחסון של נפח פעיל, שולחים בקשת HTTP מסוג PATCH ומציינים את updateMask=quotaMib. אפשר רק להגדיל את מכסת הנפח, אי אפשר להקטין אותה:
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"quotaMib": 4096
}' \
"https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/volumePools/VOLUME_POOL_ID/volumes/VOLUME_ID?updateMask=quotaMib"
עדכון רשימות ACL של כתובות IP של אמצעי אחסון
כדי להגביל את הגישה ל-NFS לכתובת ה-IP של לקוח ספציפי בארגז החול, או כדי לעדכן את כללי הייצוא של כתובות ה-IP, שולחים בקשת HTTP מסוג PATCH ומציינים את updateMask=ipAcls:
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"ipAcls": [
{
"ipRanges": ["10.128.0.50/32"],
"accessMode": "READ_WRITE"
}
]
}' \
"https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/volumePools/VOLUME_POOL_ID/volumes/VOLUME_ID?updateMask=ipAcls"
מחיקת כרך
כשהסשן של הנציג מסתיים או כשארגז החול הזמני נסגר, מוחקים את אמצעי האחסון כדי לפנות מקום במאגר:
curl -X DELETE \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/volumePools/VOLUME_POOL_ID/volumes/VOLUME_ID"
שכפול סביבת עבודה עם תמונת מצב של אמצעי אחסון
אם כבר יש לכם מאגר נפחי אחסון במצב READY ונפח אחסון קיים במצב HOT, אתם יכולים ליצור תמונת מצב של נפח האחסון כדי לתעד את המצב של נפח האחסון של הסוכן בנקודת זמן מסוימת, וכך לשכפל או לפצל סביבות עבודה מאוחר יותר.
API בארכיטקטורת REST
יצירת קובץ snapshot של אמצעי אחסון
שולחים בקשת HTTP מסוג
POSTלנקודת הקצה (endpoint) שלbackups.create, מציינים את שם המשאב המלא של הנפח בשדהsourceVolumeומחליפים אתSNAPSHOT_IDבמזהה ייחודי של קובץ ה-snapshot:curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -d '{ "sourceVolume": "projects/PROJECT_ID/locations/LOCATION/volumePools/VOLUME_POOL_ID/volumes/VOLUME_ID", "description": "Baseline workspace snapshot" }' \ "https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/backups?backupId=SNAPSHOT_ID"הבקשה מחזירה פעולה ממושכת (LRO). לפני שמשכפלים ממנו אמצעי אחסון, דוגמים את הפעולה או שולחים שאילתה למשאב של קובץ ה-snapshot עד שהערך של
stateהואREADY:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/backups/SNAPSHOT_ID"
שכפול של אמצעי אחסון מתמונת מצב
כדי לשכפל ווליום מתמונת מצב, תמונת המצב צריכה להיות מווליום באותו מאגר ווליומים.
שולחים בקשת HTTP
POSTלנקודת הקצה (endpoint)volumes:createFromSource. כדי להגדיר הרשאות ייצוא ולהפעיל את הנפח המשוכפל ברמהHOT, מעבירים אתipAclsבגוף הבקשה:curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -d '{ "backup": "projects/PROJECT_ID/locations/LOCATION/backups/SNAPSHOT_ID", "volumeId": "CLONED_VOLUME_ID", "ipAcls": [ { "ipRanges": ["10.128.0.0/24"], "accessMode": "READ_WRITE", "squashMode": "NO_ROOT_SQUASH" } ] }' \ "https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/volumePools/VOLUME_POOL_ID/volumes:createFromSource"מחליפים את מה שכתוב בשדות הבאים:
-
SNAPSHOT_ID: המזהה של קובץ ה-snapshot של המקור באותו מאגר נפחים. -
CLONED_VOLUME_ID: המזהה של הנפח המשוכפל החדש.
-
הבקשה מחזירה פעולה ממושכת. דוגמים את הפעולה עד שהערך של
doneהואtrue:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID"
אחרי שהפעולה מסתיימת, מפעילים את
volumes.get(או בודקים את התגובה של הפעולה שהושלמה) כדי לאחזר את ה-mountPoint(ipAddressו-mountName) של אמצעי האחסון החדש לפני הטעינה:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/volumePools/VOLUME_POOL_ID/volumes/CLONED_VOLUME_ID"
שכפול נפח מתמונות מצב מסתיים תוך 3 שניות לכל GB או 1.5 שניות לכל 10,000 קבצים.
העברת נפח אחסון לשכבה COLD
API בארכיטקטורת REST
כדי להעביר סביבת עבודה לא פעילה לאחסון קר, שולחים בקשת HTTP PATCH שמעדכנת את מצב הנפח ל-COLD ומנקה את ipAcls:
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{
"state": "COLD",
"ipAcls": []
}' \
"https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/volumePools/VOLUME_POOL_ID/volumes/VOLUME_ID?updateMask=state,ipAcls"
כדי לשחזר את עוצמת הקול מרמה COLD לרמה HOT כשממשיכים את הסשן עם הנציג:
מפעילים את השיטה בהתאמה אישית
unfreeze, ומעבירים אתipAclsבגוף הבקשה כדי להגדיר את הגישה של הלקוח ולהפעיל את נקודת הטעינה של אמצעי האחסון ברמהHOT:curl -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -d '{ "ipAcls": [ { "ipRanges": ["10.128.0.0/24"], "accessMode": "READ_WRITE", "squashMode": "NO_ROOT_SQUASH" } ] }' \ "https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/volumePools/VOLUME_POOL_ID/volumes/VOLUME_ID:unfreeze"הבקשה מחזירה פעולה ממושכת. דוגמים את הפעולה עד שהערך של
doneהואtrue:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID"
כשמשחזרים נפח אחסון מהרמה
COLD, שירות Filestore מקצה נקודת קצה חדשה לטעינת NFS ממאגר נפחי האחסון, ולכן הערכים שלmountPoint.ipAddressו-mountPoint.mountNameמשתנים. אחזור שלmountPointהמעודכן מהתגובה לפעולה שהושלמה או באמצעות קריאה ל-volumes.getלפני טעינה מחדש של אמצעי האחסון:curl -X GET \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://file.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/volumePools/VOLUME_POOL_ID/volumes/VOLUME_ID"
המאמרים הבאים
- ניהול ומעקב אחרי מאגרי נפח אחסון.
- מגדירים את סביבת GKE לנפחי אחסון לסוכנים ב-Filestore.