בדף הזה מוסבר איך להגדיר נפח אחסון ייעודי בזיכרון שאפשר להשתמש בו לקריאה וכתיבה של קבצים באמצעות טעינת נפח אחסון ב-Cloud Run. שימו לב: התכונה הזו שונה ממערכת הקבצים בזיכרון המובנית שמוצעת על ידי Cloud Run.
כשמטעינים את אמצעי האחסון בזיכרון ב-Cloud Run, אמצעי האחסון בזיכרון מופיע כקבצים במערכת הקבצים של הקונטיינר. אחרי שמתקינים את אמצעי האחסון בזיכרון, אפשר לגשת אליו כאילו הוא היה ספרייה במערכת הקבצים המקומית, באמצעות פעולות וספריות של מערכת הקבצים בשפת התכנות.
אפשר להשתמש באמצעי אחסון בזיכרון כדי:
- הגבלת הגודל של נפח האחסון בזיכרון. כשמגבילים את הגודל של נפח אחסון, פעולות כתיבה לנפח אחסון מלא ייכשלו. זה עדיף על מצב שבו Cloud Run יסגור מופעים בגלל שנפח האחסון צורך יותר מדי זיכרון.
התנהגות
כשיוצרים נפח אחסון בזיכרון, מומלץ לציין מגבלת גודל. אם נפח האחסון יגיע למגבלת הגודל, פעולות כתיבה נוספות ייכשלו עם שגיאה של חוסר זיכרון. המכונה יכולה לטפל בשגיאה הזו ולהמשיך לפעול.
שימו לב שמגבלת הגודל היא רק מגבלה: היא לא מקצה נפח נוסף לכרך בזיכרון. במקום זאת, נפח האחסון בזיכרון צורך את הזיכרון שהגדרתם למאגרים. אם פורסים כמה מאגרי תגים, הזיכרון שמשמש כל פעולת כתיבה לנפח האחסון נספר כשימוש בזיכרון של מאגר התגים שכתב את הנתונים.
אם לא מציינים מגבלת גודל, המערכת מגדירה אותה באופן אוטומטי למחצית מהגודל הכולל של כל המאגדים במשימת העבודה. לדוגמה,
emptyDir נפח = [זיכרון (קונטיינר א') + זיכרון (קונטיינר ב') + זיכרון (קונטיינר נ')]/2.
התנהגות ברירת המחדל הזו יכולה לגרום לכך שמגבלת הגודל של הנפח בזיכרון תהיה גבוהה יותר מהזיכרון שהוקצה לחלק מהקונטיינרים. הדבר עלול לגרום לקריסות לא צפויות אם קונטיינר יחיד חורג מהזיכרון שהוקצה לו בזמן שהוא מנסה לכתוב עוד נתונים לנפח, גם אם לא הגיעה מגבלת הגודל של הנפח.
הגדרת מגבלת גודל היא אופציונלית, אבל מומלץ להגדיר אותה כדי להגן על הקונטיינרים מפני מצב שבו הזיכרון שלהם מלא והם קורסים.
נתיבים אסורים
ב-Cloud Run אי אפשר לטעון נפח אחסון ב-/dev, ב-/proc וב-/sys, או בספריות המשנה שלהם.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות להגדרת משימות של Cloud Run, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
- Cloud Run Developer (
roles/run.developer) במשימה ב-Cloud Run - משתמש בחשבון שירות (
roles/iam.serviceAccountUser) בזהות השירות
רשימת ההרשאות והתפקידים ב-IAM שמשויכים ל-Cloud Run מופיעה במאמרים תפקידי IAM ב-Cloud Run והרשאות IAM ב-Cloud Run. אם עבודת Cloud Run שלכם מתקשרת עםCloud de Confiance ממשקי API, כמו ספריות לקוח ב-Cloud, כדאי לעיין במדריך להגדרת זהות שירות. מידע נוסף על מתן תפקידים זמין במאמרים הרשאות פריסה וניהול גישה.
הגדרה של נפח אחסון בזיכרון
אחרי שמגדירים נפח אחסון בזיכרון למשימת Cloud Run, נוצר נפח אחסון ריק לכל מופע של Cloud Run שמופעל, ונפח האחסון קיים כל עוד המופע הזה פועל. כשהמכונה מפסיקה לפעול, הנתונים בכרך נמחקים באופן סופי.
המסוף
במסוף Cloud de Confiance by S3NS , נכנסים לדף Cloud Run:
בתפריט הניווט של Cloud Run, לוחצים על Jobs (משימות):
אם יוצרים משימה חדשה, לוחצים על Deploy container (פריסת מאגר תגים) כדי למלא את דף ההגדרות הראשוני של המשימה.
אם אתם מגדירים משימה קיימת, בוחרים את המשימה ולוחצים על View and edit job configuration (הצגה ועריכה של הגדרת המשימה).
לוחצים על Containers, Connections, Security (מאגרי תגים, חיבורים, אבטחה) כדי להרחיב את דף מאפייני העבודה.
לוחצים על הכרטיסייה Volumes (אמצעי אחסון).
לוחצים על Mount volume (התקנת אמצעי אחסון).
לוחצים על In-memory (בזיכרון) כסוג הנפח.
כדי להגדיר את עוצמת הקול:
- בשדה נתיב להרכבה, מזינים את הנתיב שבו רוצים להרכיב את אמצעי האחסון.
- בשדה Volume name (שם הנפח), מזינים את שם הנפח.
- אופציונלי: מזינים את מגבלת הגודל ואת יחידת הזיכרון כדי לציין את מגבלת הזיכרון שרוצים להקצות לנפח. המגבלה הזו צריכה להיות קטנה מהזיכרון הכולל שצוין עבור הקונטיינרים. נתונים שמאוחסנים בנפח הזה צורכים זיכרון ששמור על ידי המאגר שכתב את הנתונים.
- לוחצים על Save.
לוחצים על יצירה או על עדכון.
gcloud
כדי לטעון נפח:third_party/devsite/cloud/en/run/docs/images/nfs-volume-mount.png
gcloud run jobs update JOB \ --add-volume mount-path=MOUNT_PATH,type=in-memory,size-limit=SIZE_LIMIT
מחליפים את מה שכתוב בשדות הבאים:
- JOB: השם של המשימה.
- MOUNT_PATH: הנתיב היחסי במערכת הקבצים של קובץ המאגר שבו רוצים לטעון את אמצעי האחסון הזה. לדוגמה:
/mnt/my-volume. - SIZE_LIMIT: מגבלת הזיכרון שרוצים להקצות לנפח האחסון, ב-MiB או ב-GiB (מצוין כ-Mi או כ-Gi), לדוגמה,
500Mi. המגבלה הזו צריכה להיות נמוכה מהזיכרון הכולל שהוגדר עבור הקונטיינרים.
אם אתם משתמשים בכמה מאגרי תגים, קודם מציינים את אמצעי האחסון, ואז מציינים את נקודות הגישה לאמצעי האחסון לכל מאגר תגים:
gcloud run jobs update JOB \ --add-volume=name= VOLUME_NAME,type=in-memory,size-limit=SIZE_LIMIT \ --container=CONTAINER_1 \ --add-volume-mount=volume= VOLUME_NAME,mount-path=MOUNT_PATH \ --container==CONTAINER_2 \ --add-volume-mount=volume= VOLUME_NAME,mount-path=MOUNT_PATH2
YAML
אם אתם יוצרים משרה חדשה, דלגו על השלב הזה. אם אתם מעדכנים משימה קיימת, אתם צריכים להוריד את הגדרת ה-YAML שלה:
gcloud run jobs describe JOB_NAME --format export > job.yaml
מגדירים את המאפיינים
volumeMountsו-volumesכמו שמוצג:apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB_NAME spec: template: spec: containers: - image: IMAGE_URL volumeMounts: - mountPath: MOUNT_PATH name: VOLUME_NAME volumes: - name: VOLUME_NAME emptyDir: sizeLimit: SIZE_LIMIT medium: Memory
מחליפים את מה שכתוב בשדות הבאים:
-
IMAGE_URL: הפניה לקובץ אימג' בקונטיינר, לדוגמהus-docker.pkg.dev/cloudrun/container/job:latest. - VOLUME_NAME: כל שם שרוצים לתת לנפח האחסון. הערך VOLUME_NAME משמש למיפוי הנפח לנפח mount.
-
MOUNT_PATH: הנתיב היחסי במערכת הקבצים של הקונטיינר שבו רוצים לטעון את הווליום. לדוגמה:/mnt/my-volume. - SIZE_LIMIT: מגבלת הזיכרון שרוצים להקצות לנפח, ב-MiB או ב-GiB (מצוין כ-Mi או כ-Gi), לדוגמה,
500Mi. המגבלה הזו צריכה להיות נמוכה מהזיכרון הכולל שהוגדר עבור הקונטיינרים.
-
יוצרים או מעדכנים את העבודה באמצעות הפקודה הבאה:
gcloud run jobs replace job.yaml
אם קיים קובץ
job.yaml, הפקודהgcloud run jobs replaceמשתמשת בו כברירת מחדל.
Terraform
כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.
מוסיפים את השורות הבאות למשאבgoogle_cloud_run_v2_job בתצורת Terraform:resource "google_cloud_run_v2_job" "default" {
name = "JOB_NAME"
location = "REGION"
template {
template {
containers {
image = "IMAGE_URL"
volume_mounts {
name = "VOLUME_NAME"
mount_path = "MOUNT_PATH"
}
}
volumes {
name = "VOLUME_NAME"
empty_dir {
medium = "MEMORY"
size_limit = "SIZE_LIMIT"
}
}
}
}
}
מחליפים את מה שכתוב בשדות הבאים:
- JOB_NAME: השם של המשימה ב-Cloud Run.
- REGION עם האזור Cloud de Confiance . לדוגמה:
europe-west1. -
IMAGE_URL: הפניה לקובץ אימג' בקונטיינר, לדוגמהus-docker.pkg.dev/cloudrun/container/job:latest. - VOLUME_NAME: כל שם שרוצים לתת לנפח האחסון. הערך VOLUME_NAME משמש למיפוי הנפח לנקודת הטעינה של הנפח.
- MOUNT_PATH: הנתיב היחסי במערכת הקבצים של קובץ המכולה שבו רוצים לטעון את אמצעי האחסון הזה, לדוגמה,
/mnt. - SIZE_LIMIT: מגבלת הזיכרון שרוצים להקצות לנפח, ב-MiB או ב-GiB (מצוין כ-Mi או כ-Gi). לדוגמה,
128Mi. המגבלה הזו צריכה להיות נמוכה מהזיכרון הכולל שהוגדר עבור הקונטיינרים.
קריאה וכתיבה של נתונים בווליום
אם משתמשים בתכונה של Cloud Run להרכבת נפח אחסון, אפשר לגשת לנפח אחסון מורכב באמצעות אותן ספריות בשפת התכנות שבהן משתמשים כדי לקרוא ולכתוב קבצים במערכת הקבצים המקומית.
האפשרות הזו שימושית במיוחד אם אתם משתמשים במאגר קיים שמצפה שהנתונים יאוחסנו במערכת הקבצים המקומית, ומשתמש בפעולות רגילות של מערכת הקבצים כדי לגשת אליהם.
בקטעי הקוד הבאים מניחים שיש נקודת הרכבה של נפח אחסון עם mountPath שמוגדר ל-/mnt/my-volume.
Nodejs
משתמשים במודול File System כדי ליצור קובץ חדש או להוסיף לקובץ קיים בכרך /mnt/my-volume:
var fs = require('fs');
fs.appendFileSync('/mnt/my-volume/sample-logfile.txt', 'Hello logs!', { flag: 'a+' });Python
כתיבה לקובץ שנשמר בנפח, /mnt/my-volume:
f = open("/mnt/my-volume/sample-logfile.txt", "a")המשך
משתמשים בחבילה os כדי ליצור קובץ חדש שנשמר בווליום, /mnt/my-volume:
f, err := os.Create("/mnt/my-volume/sample-logfile.txt")Java
משתמשים במחלקה Java.io.File כדי ליצור קובץ יומן בכרך /mnt/my-volume:
import java.io.File;
File f = new File("/mnt/my-volume/sample-logfile.txt");ניקוי והסרה של נפחים ונקודות חיבור של נפחים
אפשר לנקות את כל אמצעי האחסון והחיבורים, או להסיר אמצעי אחסון וחיבורים ספציפיים.
ניקוי כל אמצעי האחסון והחיבורים שלהם
כדי לנקות את כל אמצעי האחסון והטעינות של אמצעי האחסון מהעבודה שלכם עם קונטיינר יחיד, מריצים את הפקודה הבאה:
gcloud run jobs update JOB \ --clear-volumes \ --clear-volume-mounts
gcloud run jobs update JOB \ --clear-volumes \ --clear-volume-mounts \ --container=container1 \ --clear-volumes \ --clear-volume-mounts \ --container=container2 \ --clear-volumes \ --clear-volume-mounts
הסרה של אמצעי אחסון בודדים והצמדות של אמצעי אחסון
כדי להסיר נפח אחסון, צריך גם להסיר את כל הנפחים המחוברים שמשתמשים בנפח הזה.
כדי להסיר אמצעי אחסון בודדים או נקודות לחיבור אמצעי אחסון, משתמשים בדגלים remove-volume ו-remove-volume-mount:
gcloud run jobs update JOB \ --remove-volume VOLUME_NAME --container=container1 \ --remove-volume-mount MOUNT_PATH \ --container=container2 \ --remove-volume-mount MOUNT_PATH