ב-Cloud Run יש נפח דיסק אחסון ארעי (ephemera disk) שנשמר רק למשך הזמן של המכונה. התכונה הזו מאפשרת לציין את נפח הדיסק שאתם צריכים ואת המיקום לטעינה שלו. לאחר מכן, Cloud Run יקצה את נפח הדיסק הזה למשאב.
הדיסקים מוקצים באופן אוטומטי, מפורמטים מראש ל-ext4 ומוצפנים באמצעות מפתחות ספציפיים למכונה בזמן ההפעלה. דיסק אחסון ארעי יוצר את אמצעי האחסון כך שכל משתמש יכול לקרוא ממנו או לכתוב אליו. מכיוון שהאחסון הוא זמני, כל הנתונים נמחקים באופן סופי כשהמכונה מושבתת. זה כולל השבתות שנגרמו בגלל:
- קריסות של מכונות
- שינוי קנה המידה של השירות
- העברת תנועה לגרסה חדשה
הדיסקים מוקצים למכונה ספציפית ולא משותפים עם מכונות או גרסאות אחרות. יש לכם שליטה על המבנה של מערכת הקבצים, עם נקודת טעינה שאפשר להגדיר לכל נפח.
לפני השבתת מכונה, Cloud Run שולח אות SIGTERM לכל הקונטיינרים במכונה, שמציין את תחילתה של תקופה של 10 שניות לפני ההשבתה בפועל, שבה Cloud Run שולח אות SIGKILL. אתם יכולים להשתמש בחלון הזמן הזה של 10 שניות כדי לבצע פעולות ניקוי, כמו סבב אחרון של העתקת תוכן הדיסק לאחסון מתמיד.
תרחישים לדוגמה
אפשר להשתמש בדיסק אחסון ארעי למטרות הבאות:
- עומסי עבודה של עיבוד נתונים: כשמעבדים קובצי נתונים גדולים ב-Cloud Run, בדרך כלל מאחסנים את הקובץ כולו בזיכרון או מתזמרים את הפיצול שלו לחלקים קטנים יותר. באמצעות אחסון זמני, לא תצטרכו לשלם על כמויות גדולות של זיכרון כדי ליצור עותק מקומי זמני של הנתונים. בנוסף, תוכלו לעבד קבוצות נתונים גדולות יותר.
- שמירת נתונים במטמון: בתרחישי שימוש של הצגת תוכן באינטרנט, שמירת נתונים במטמון בדיסק במקום אחזור מאחסון מרוחק יכולה לשפר את זמן האחזור של האפליקציה.
מגבלות על נפח האחסון ועל מספר המכונות
אלה המגבלות:
- מגבלת גודל של אמצעי אחסון: כל אמצעי אחסון חייב להיות בין
1Giל-100Gi. - מגבלת האחסון של המכונה: כברירת מחדל, כל מכונה מוגבלת לנפח כולל של 10GiB. כדי להגדיר יותר מ-10GiB לכל מכונה, צריך לבקש הגדלה של המכסה.
- מגבלת נפח למכונה: כל מכונה מוגבלת ל-10 נפחי דיסק אחסון ארעי (ephemeral disk) לכל היותר.
- מגבלת פרויקט: כל פרויקט מתחיל עם מגבלת הקצאה אזורית כוללת של 0GiB כברירת מחדל. בפעם הראשונה שפורסים משאב עם דיסק אחסון ארעי באזור מסוים, הפרויקטים מקבלים באופן אוטומטי 100GiB לכל אזור. בזמן הריצה, המכסה האזורית הזו משותפת בין כל המכונות שפועלות באזור. כשפורסים משאב, הגודל המשולב של דיסק האחסון הארעי לכל מכונה, כפול המספר המקסימלי של המכונות, לא יכול לחרוג ממגבלת ההקצאה האזורית. לדוגמה, אם המגבלה האזורית היא 100GiB, אפשר להגדיר משאב עם דיסק של 10GiB עם עד 10 מכונות. במקרה הצורך, מבקשים להגדיל את המכסה.
שליחת בקשה להגדלת המכסה
אם אתם צריכים קיבולת נוספת, אתם צריכים לבקש הגדלה של המכסה לשירות Cloud Run. כדי לבקש את המכסה שאתם צריכים, השתמשו בקישורים שמופיעים בלחצנים הבאים.
| המכסה הנוכחית | קישור למכסה |
|---|---|
| 10GiB לכל מכונה | בקשה להגדלת המכסה לכל מכונה |
| 100GiB לכל פרויקט | בקשה להגדלת המכסה לכל פרויקט |
מגבלות
דיסק אחסון ארעי זמין רק בסביבת ההפעלה מהדור השני.נתיבים אסורים
ב-Cloud Run אי אפשר לטעון ווליום ב-/dev, ב-/proc או ב-/sys, או בספריות המשנה שלהם.
אזורים נתמכים
דיסק אחסון ארעי זמין בכל המיקומים של Cloud Run.
לפני שמתחילים
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
- מתקינים ומפעילים את ה-CLI של gcloud.
-
מעדכנים את הרכיבים:
gcloud components update
- בדף התמחור של Cloud Run תוכלו לקרוא על המעבד (CPU), הזיכרון ותעבורת הנתונים היוצאת (egress) ברשת. העלות מחושבת לפי הגודל הכולל של הדיסק שהוקצה ומשך החיים של המכונה שמשתמשת בו.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות להגדרת דיסק אחסון ארעי, צריך לבקש מהאדמין להקצות לכם את התפקידים הבאים ב-IAM:
- מפתח Cloud Run (
roles/run.developer) בשירות Cloud Run - משתמש בחשבון שירות (
roles/iam.serviceAccountUser) בזהות השירות
רשימה של תפקידים והרשאות ב-IAM שמשויכים ל-Cloud Run מופיעה במאמרים תפקידי IAM ב-Cloud Run והרשאות IAM ב-Cloud Run. אם שירות Cloud Run מתממשק עם ממשקי API שלGoogle Cloud , כמו ספריות הלקוח ב-Cloud, עיינו במדריך להגדרת זהות השירות. מידע נוסף על הקצאת תפקידים זמין במאמרים הרשאות פריסה וניהול הגישה.
יצירה וטעינה של דיסק אחסון ארעי (ephemeral disk)
אפשר ליצור ולטעון דיסק אחסון ארעי באמצעות מסוף Google Cloud , Google Cloud CLI, YAML או Terraform:
המסוף
נכנסים ל-Cloud Run במסוף Google Cloud :
בתפריט הניווט של Cloud Run, בוחרים באפשרות Services ולוחצים על Deploy container כדי להגדיר שירות חדש. אם אתם מגדירים שירות קיים, לוחצים על השירות ואז על הכרטיסייה Containers.
אם אתם מגדירים שירות חדש, מלאו את דף ההגדרות הראשוניות של השירות ואז לחצו על Containers, Networking, Security.
בוחרים באפשרות דיסק אחסון ארעי (ephemeral disk).
בוחרים את הגודל מהתפריט ומזינים את נתיב ההרכבה בשדה Mount path.
לוחצים על יצירה כדי ליצור שירות חדש. לוחצים על View diff & redeploy ואז על Deploy changes בשירות קיים.
gcloud
כדי להוסיף אמצעי אחסון ולטעון אותו:
gcloud run services update SERVICE \
--execution-environment=gen2 \
--add-volume=name=VOLUME_NAME,type=ephemeral-disk,size=SIZE \
--add-volume-mount=volume=VOLUME_NAME,mount-path=MOUNT_PATH
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE: שם השירות.
- VOLUME_NAME: השם שרוצים לתת לנפח האחסון.
- SIZE: גודל הדיסק, לדוגמה:
10Gi. הגודל חייב להיות בין1Giל-100Giלנפחים שלephemeral-disk. - MOUNT_PATH: הנתיב היחסי שבו אתם טוענים את אמצעי האחסון, לדוגמה,
/mnt/my-volume.
YAML
אם אתם יוצרים שירות חדש, דלגו על השלב הזה. אם אתם מעדכנים שירות קיים, הורידו את הגדרת ה-YAML שלו:
gcloud run services describe SERVICE --format export > service.yaml
מגדירים את קובץ ה-YAML:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE labels: cloud.googleapis.com/location: REGION spec: template: spec: containers: - name: CONTAINER_NAME image: IMAGE_URL volumeMounts: - name: VOLUME_NAME mountPath: MOUNT_PATH volumes: - name: VOLUME_NAME emptyDir: medium: Disk sizeLimit: SIZEמחליפים את מה שכתוב בשדות הבאים:
- SERVICE: שם השירות.
- REGION: האזור של Google Cloud .
- CONTAINER_NAME: השם שרוצים לתת לקונטיינר.
-
IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר, לדוגמהus-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, המאגר REPO_NAME כבר צריך להיות קיים. הפורמט של כתובת ה-URL הואLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG. - VOLUME_NAME: השם שרוצים לתת לנפח האחסון.
- MOUNT_PATH: הנתיב היחסי שבו אתם טוענים את אמצעי האחסון, לדוגמה,
/mnt/my-volume. - SIZE: גודל הדיסק, לדוגמה:
10Gi. הגודל חייב להיות בין1Giל-100Giלנפחים שלephemeral-disk.
יוצרים או מעדכנים את השירות באמצעות הפקודה הבאה:
gcloud run services replace service.yaml
כברירת מחדל, הפקודה
gcloud run services replaceמשתמשת בקובץservice.yamlאם הוא קיים.
Terraform
כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.
מוסיפים את הקוד הבא למשאבgoogle_cloud_run_v2_service בתצורה של Terraform: resource "google_cloud_run_v2_service" "default" {
name = "SERVICE"
location = "REGION"
deletion_protection = "true"
ingress = "INGRESS_TRAFFIC_ALL"
template {
containers {
image = "IMAGE_URL"
volume_mounts {
name = "VOLUME_NAME"
mount_path = "MOUNT_PATH"
}
}
volumes {
name = "VOLUME_NAME"
empty_dir {
medium = "DISK"
size_limit = "SIZE"
}
}
}
lifecycle {
ignore_changes = [
launch_stage,
]
}
}
מחליפים את מה שכתוב בשדות הבאים:
- SERVICE: שם השירות.
- REGION: האזור של Google Cloud .
-
IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר, לדוגמהus-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, המאגר REPO_NAME כבר צריך להיות קיים. הפורמט של כתובת ה-URL הואLOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG. - VOLUME_NAME: השם שרוצים לתת לנפח האחסון.
- MOUNT_PATH: הנתיב היחסי שבו אתם טוענים את אמצעי האחסון, לדוגמה,
/mnt/my-volume. - SIZE: גודל הדיסק, לדוגמה:
10Gi. הגודל חייב להיות בין1Giל-100Giלנפחים שלephemeral-disk.
קריאה וכתיבה של אמצעי אחסון
אם אתם משתמשים בתכונה של טעינת נפח אחסון ב-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 services update SERVICE \ --clear-volumes \ --clear-volume-mounts
gcloud run services update SERVICE \ --container=container1 \ --clear-volumes \ --clear-volume-mounts \ --container=container2 \ --clear-volumes \ --clear-volume-mounts
הסרת אמצעי אחסון ונקודות טעינה ספציפיים
כדי להסיר אמצעי אחסון, צריך להסיר גם את כל נקודות הגישה שמשתמשות באמצעי האחסון הזה.
כדי להסיר ווליומים ספציפיים או נקודות טעינה של ווליומים, משתמשים בדגלים remove-volume ו-remove-volume-mount:
gcloud run services update SERVICE \ --remove-volume VOLUME_NAME \ --container=container1 \ --remove-volume-mount MOUNT_PATH \ --container=container2 \ --remove-volume-mount MOUNT_PATH
שיטות מומלצות
כדי לנהל ביעילות נתונים זמניים ולשפר את ביצועי האחסון, כדאי לפעול לפי השיטות המומלצות הבאות.
העתקה לאחסון מתמיד
אם אתם מתכוונים להעתיק את התוכן של דיסק האחסון הארעי לאחסון מתמיד, כמו קטגוריה של Cloud Storage, מומלץ להעתיק אותו באופן מצטבר ולא להסתמך על תקופת החסד של 10 שניות בין SIGTERM ל-SIGKILL.
למידע נוסף על השבתת מכונות, ראו חוזה זמן ריצה של קונטיינר.
אפשר לקרוא ולכתוב מ-Cloud Storage ב-Cloud Run בלי הגדרות רשת נוספות. כדי להשיג ביצועים אופטימליים, מומלץ לנתב את התנועה אל Cloud Storage וממנו דרך רשת VPC באמצעות Direct VPC.
השיטה הזו מתאימה אם אתם לא צריכים גישה לאינטרנט ממשאב Cloud Run. אם אתם צריכים גישה לאינטרנט, הגדירו את Cloud NAT או עיינו במאמר תעבורת נתונים פנימית ל-Google API.
כדי להגדיר Direct VPC egress עם שירות:
נכנסים לדף Cloud Run במסוף Google Cloud :
אם אתם מגדירים שירות חדש לפריסה, לוחצים על Create Service. אם אתם מגדירים ופורסים שירות קיים, לוחצים על השירות.
אם אתם מגדירים שירות חדש, מלאו את דף הגדרות השירות הראשוני לפי הצורך, ואז לחצו על Containers, Networking, Security כדי להרחיב את דף הגדרות השירות.
נכנסים לכרטיסייה Networking.
לוחצים על Connect to a VPC for outbound traffic.
לוחצים על שליחת תנועה ישירות ל-VPC.
בשדה Network, בוחרים את רשת ה-VPC שאליה רוצים לשלוח את התנועה.
בשדה Subnet, בוחרים את רשת המשנה שממנה השירות מקבל כתובות IP. אפשר לפרוס כמה שירותים באותה רשת משנה.
בקטע Traffic routing, בוחרים באפשרות Route all traffic to the VPC כדי לשלוח את כל התנועה היוצאת דרך רשת ה-VPC.
לוחצים על יצירה כדי ליצור שירות חדש. לוחצים על View diff & redeploy ואז על Deploy changes בשירות קיים.
כדי לוודא שהשירות נמצא ברשת ה-VPC, לוחצים על השירות ואז על הכרטיסייה Networking. הרשת ותת-הרשת מופיעות בכרטיס VPC.
עכשיו אפשר לשלוח בקשות משירות Cloud Run לכל משאב ברשת ה-VPC, בהתאם לכללי חומת האש.
מפעילים את גישה פרטית ל-Google בתת-הרשת שאליה התחברתם.
פתרון בעיות
אם נתקלתם בבעיות, כדאי לבדוק את הדברים הבאים:- אם אין זיכרון פנוי (OOM) בקונטיינר והשתמשתם במסוף Google Cloud כדי לפרוס גרסה חדשה של שירות עם דיסק אחסון ארעי (ephemeral disk) מצורף, סביר להניח שמסוף Google Cloud המיר את נפח הדיסק לנפח בזיכרון. כתוצאה מכך, פעולות הכתיבה בדיסק נכתבות בזיכרון, וכתוצאה מכך אין זיכרון פנוי (OOM) בקונטיינר.
כדי לפתור את הבעיה, פורסים מחדש את השירות באמצעות ה-CLI של gcloud ומוודאים שבקובץ ה-YAML מצוין
medium: Diskבקטעvolumes. - אם מהירות הרשת איטית כשמורידים כמות גדולה של נתונים לדיסק האחסון הארעי, פועלים לפי השלבים להפעלת Direct VPC. אם לא מפעילים את Direct VPC, מהירות ההעברה ברשת תהיה איטית יותר.