הגדרת דיסק אחסון ארעי (ephemeral disk) למשימות Cloud Run

‫Cloud Run מספק נפח דיסק זמני שנשמר רק למשך הפעלת המופע. התכונה הזו מאפשרת לציין את נפח הדיסק שדרוש לכם ואת המיקום להרכבה שלו. לאחר מכן, שירות Cloud Run יקצה את נפח הדיסק הזה למשאב.

הדיסקים מוקצים באופן אוטומטי, מעוצבים מראש ל-ext4 ומוצפנים באמצעות מפתחות ספציפיים למופע בזמן ההפעלה. כשיוצרים נפח דיסק זמני, כל משתמש יכול לקרוא או לכתוב בו. מכיוון שהאחסון הוא זמני, כל הנתונים נמחקים באופן סופי כשהמופע מושבת. ההשבתות האלה נגרמות בגלל:

  • קריסות של מכונה
  • השלמת משימה בעבודה (הצלחה או כישלון)

הדיסקים מוקצים למופע ספציפי ולא משותפים בין מופעים אחרים. יש לכם שליטה על מבנה מערכת הקבצים באמצעות נקודת הרכבה שניתנת להגדרה לכל אמצעי אחסון.

לפני השבתת מופע, Cloud Run שולח אות SIGTERM לכל הקונטיינרים במופע, שמציין את תחילת תקופה של 10 שניות לפני ההשבתה בפועל. בשלב הזה, Cloud Run שולח אות SIGKILL. אפשר להשתמש בחלון הזמנים של 10 שניות כדי לבצע פעולות ניקוי, כמו העתקה סופית של תוכן הדיסק לאחסון קבוע.

תרחישים לדוגמה

אפשר להשתמש בדיסק אחסון ארעי (ephemera disk) למטרות הבאות:

  • עומסי עבודה של עיבוד נתונים: כשמעבדים קובצי נתונים גדולים ב-Cloud Run, בדרך כלל מאחסנים את הקובץ כולו בזיכרון או מתזמנים את פיצול הקובץ לחלקים קטנים יותר. באמצעות אחסון זמני, לא תצטרכו לשלם על כמויות גדולות של זיכרון כדי ליצור עותק מקומי זמני של הנתונים. תוכלו גם לעבד מערכי נתונים גדולים יותר.
  • שמירת נתונים במטמון: בתרחישי שימוש בהגשת תוכן באינטרנט, שמירת נתונים במטמון בדיסק במקום אחזור ממאגר אחסון מרוחק יכולה לשפר את זמן האחזור של האפליקציה.

מגבלות אחסון ומגבלות על מופעים

המגבלות הבאות חלות:

  • מגבלת גודל הנפח: כל נפח צריך להיות בין 1Gi ל-100Gi.
  • מגבלת אחסון של מכונה: כברירת מחדל, כל מכונה מוגבלת ל-10GiB של נפח אחסון כולל. כדי להגדיר יותר מ-10GB לכל מופע, צריך לבקש הגדלה של המכסה.
  • מגבלת נפח אחסון של מכונה: כל מכונה מוגבלת ל-10 נפחי אחסון זמניים לכל היותר.
  • ‫Project limit: כל פרויקט מתחיל עם מגבלת הקצאה אזורית כוללת של 0GiB כברירת מחדל. בפעם הראשונה שפורסים באזור מסוים משאב עם דיסק אחסון ארעי (ephemera disk), הפרויקטים מקבלים אוטומטית 100GiB לכל אזור. בזמן הריצה, המכסה האזורית הזו משותפת לכל המופעים שפועלים באופן פעיל באזור. כשפורסים משאב, הגודל המשולב של דיסק אחסון ארעי (ephemera disk) לכל מכונה, כפול המספר המקסימלי של המכונות, לא יכול לחרוג ממגבלת ההקצאה האזורית. לדוגמה, אם המגבלה האזורית היא 100GiB, אפשר להגדיר עד 10 מופעים של משאב עם דיסק של 10GiB. אם צריך, מבקשים להגדיל את המכסה.

שליחת בקשה להגדלת המכסה

אם אתם צריכים קיבולת נוספת, אתם צריכים לבקש הגדלה של המכסה של משימת Cloud Run. כדי לבקש את המכסה שדרושה לכם, אתם יכולים להשתמש בקישורים שמופיעים בלחצנים הבאים.

המיכסה הנוכחית קישור למכסה
‫10GiB לכל מופע שליחת בקשה להגדלת המכסה לכל מופע
‫100GiB לכל פרויקט איך מבקשים להגדיל את המכסה לכל פרויקט

מידע נוסף על בקשות להגדלת מכסות זמין במאמר איך מגדילים את המכסה.

מגבלות

ההגבלות הבאות חלות:

  • דיסק אחסון ארעי (ephemeral disk) זמין רק בסביבת ההפעלה מהדור השני. כברירת מחדל, משימות Cloud Run משתמשות בסביבת ההפעלה מהדור השני.
  • אין תמיכה בהעברה פעילה. המשמעות היא שמשימות Cloud Run יהיו פחות אמינות, במיוחד משימות ארוכות.

נתיבים אסורים

ב-Cloud Run אי אפשר לטעון נפח אחסון בנתיבים /dev, /proc או /sys, או בספריות המשנה שלהם.

אזורים נתמכים

דיסק אחסון ארעי (ephemera disk) זמין בכל המיקומים של Cloud Run.

לפני שמתחילים

  1. נכנסים לחשבון Google Cloud . אם אתם משתמשים חדשים ב- Google Cloud, צרו חשבון כדי שתוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
  2. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. מתקינים ומפעילים את ה-CLI של gcloud.
  7. עדכון רכיבים:
    gcloud components update
  8. בדף התמחור של Cloud Run אפשר לראות את העלויות של מעבד, זיכרון ותעבורת נתונים יוצאת (egress) ברשת. הגודל הכולל של הדיסק שהוקצה ומשך החיים של המופע שמשתמש בו משפיעים על העלות.

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות להגדרת דיסק זמני, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:

רשימת ההרשאות והתפקידים ב-IAM שמשויכים ל-Cloud Run מופיעה במאמרים תפקידי IAM ב-Cloud Run והרשאות IAM ב-Cloud Run. אם עבודת Cloud Run שלכם מתקשרת עםGoogle Cloud ממשקי API, כמו ספריות לקוח ב-Cloud, כדאי לעיין במדריך להגדרת זהות שירות. מידע נוסף על מתן תפקידים זמין במאמרים הרשאות פריסה וניהול גישה.

יצירה והרכבה של דיסק ארעי

אפשר ליצור ולצרף דיסק אחסון ארעי (ephemera disk) באמצעות המסוף Google Cloud ,‏ Google Cloud CLI,‏ YAML או Terraform:

המסוף

  1. במסוף Google Cloud , נכנסים לדף Cloud Run:

    כניסה ל-Cloud Run

  2. בתפריט הניווט של Cloud Run, לוחצים על Jobs (משימות):

    1. אם יוצרים משימה חדשה, לוחצים על Deploy container (פריסת מאגר תגים) כדי למלא את דף ההגדרות הראשוני של המשימה.

    2. אם אתם מגדירים משימה קיימת, בוחרים את המשימה ולוחצים על View and edit job configuration (הצגה ועריכה של הגדרת המשימה).

  3. לוחצים על Containers, Connections, Security (מאגרי תגים, חיבורים, אבטחה) כדי להרחיב את דף מאפייני העבודה.

  4. לוחצים על הכרטיסייה Containers (מאגרי תגים).

  5. בקטע Resources (משאבים), בוחרים באפשרות Ephemeral Disk (דיסק זמני).

  6. מציינים את הגודל של דיסק אחסון ארעי (ephemeral disk) מהתפריט.

  7. מזינים את נתיב ההרכבה.

  8. לוחצים על יצירה או על עדכון.

gcloud

כדי להוסיף אמצעי אחסון ולהפעיל אותו:

gcloud beta run jobs update JOB \
    --add-volume=name=VOLUME_NAME,type=ephemeral-disk,size=SIZE \
    --add-volume-mount=volume=VOLUME_NAME,mount-path=MOUNT_PATH

מחליפים את מה שכתוב בשדות הבאים:

  • ‫JOB: השם של המשימה.
  • ‫VOLUME_NAME: השם שרוצים לתת לנפח האחסון.
  • ‫SIZE: גודל הדיסק. לדוגמה: 10Gi. הגודל צריך להיות בין 1Gi ל-100Gi עבור נפחי אחסון מסוג ephemeral-disk.
  • ‫MOUNT_PATH: הנתיב היחסי שבו אתם מטמיעים את אמצעי האחסון, לדוגמה, /mnt/my-volume.

YAML

  1. אם אתם יוצרים משרה חדשה, דלגו על השלב הזה. אם אתם מעדכנים משימה קיימת, אתם צריכים להוריד את הגדרת ה-YAML שלה:

    gcloud run jobs describe JOB --format export > job.yaml
  2. מגדירים את קובץ ה-YAML:

    apiVersion: run.googleapis.com/v1
    kind: Job
    metadata:
      name: JOB
      labels:
        cloud.googleapis.com/location: REGION
      annotations:
        run.googleapis.com/launch-stage: BETA
    spec:
      template:
        spec:
          template:
            spec:
              volumes:
              - name: VOLUME_NAME
                emptyDir:
                  medium: Disk
                  sizeLimit: SIZE
              containers:
              - image: IMAGE_URL
                volumeMounts:
                - name: VOLUME_NAME
                  mountPath: MOUNT_PATH
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫JOB: השם של המשימה.
    • ‫REGION: Google Cloud האזור.
    • ‫IMAGE_URL: הפניה לקובץ אימג' של קונטיינר, לדוגמה us-docker.pkg.dev/cloudrun/container/job:latest.
    • ‫VOLUME_NAME: השם שרוצים לתת לנפח האחסון.
    • ‫SIZE: גודל הדיסק. לדוגמה: 10Gi. הגודל צריך להיות בין 1Gi ל-100Gi עבור נפחי אחסון מסוג ephemeral-disk.
    • ‫MOUNT_PATH: הנתיב היחסי שבו אתם מטמיעים את אמצעי האחסון, לדוגמה, /mnt/my-volume.
  3. יוצרים או מעדכנים את העבודה באמצעות הפקודה הבאה:

    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"
    location = "REGION"
    deletion_protection = "true"
    launch_stage = "BETA"
    template {
      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,
      ]
    }
  }

מחליפים את מה שכתוב בשדות הבאים:

  • ‫JOB: השם של המשימה.
  • ‫REGION: Google Cloud האזור.
  • ‫IMAGE_URL: הפניה לקובץ אימג' של קונטיינר, לדוגמה us-docker.pkg.dev/cloudrun/container/job:latest.
  • ‫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 jobs update JOB \
    --clear-volumes \
    --clear-volume-mounts
אם יש לכם כמה מאגרי תגים, צריך לפעול לפי המוסכמות של ממשק שורת הפקודה (CLI) של sidecars כדי לנקות את הכרכים והחיבורים של הכרכים:

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

שיטות מומלצות

כדי לנהל ביעילות נתונים זמניים ולשפר את ביצועי האחסון, מומלץ לפעול לפי השיטות המומלצות הבאות.

העתקה לאחסון מתמיד

אם אתם מתכוונים להעתיק את התוכן של דיסק אחסון ארעי (ephemera disk) לאחסון מתמיד, כמו קטגוריה של Cloud Storage, מומלץ להעתיק את התוכן בהדרגה ולא להסתמך על תקופת החסד של 10 שניות SIGTERM עד SIGKILL. מידע נוסף על כיבויים מאולצים זמין במאמר בנושא חוזה של זמן ריצה של קונטיינר.

‫Cloud Run יכול לקרוא ולכתוב מ-Cloud Storage בלי להגדיר רשת נוספת. כדי להשיג ביצועים אופטימליים, מומלץ לנתב תנועה אל Cloud Storage וממנו דרך רשת VPC באמצעות Direct VPC.

השיטה הזו מתאימה אם למשאב Cloud Run לא נדרשת גישה לאינטרנט. אם אתם צריכים גישה לאינטרנט, אתם יכולים להגדיר Cloud NAT או לעיין במאמר בנושא תנועה פנימית אל Google API.

כדי להגדיר Direct VPC egress באמצעות משימה, מבצעים את השלבים הבאים:

  1. במסוף Google Cloud , נכנסים לדף Cloud Run:

    כניסה ל-Cloud Run

  2. אם אתם מגדירים משימה חדשה, לוחצים על הכרטיסייה משימות ובוחרים באפשרות פריסת מאגר תגים. ממלאים את דף ההגדרות הראשוניות של המשרה לפי הצורך. אם מגדירים משימה קיימת, לוחצים על המשימה ואז על הצגה ועריכה של הגדרות המשימה.

  3. לוחצים על Containers, Connections, Security (מאגרי תגים, חיבורים, אבטחה) כדי להרחיב את דף מאפייני העבודה.

  4. לוחצים על הכרטיסייה Connections (קישורים).

  5. לוחצים על Connect to a VPC for outbound traffic (חיבור ל-VPC לתעבורה יוצאת).

  6. לוחצים על שליחת תנועה ישירות ל-VPC.

  7. בשדה Network (רשת), בוחרים את רשת ה-VPC שאליה רוצים לשלוח את התנועה.

  8. בשדה Subnet (רשת משנה), בוחרים את רשת המשנה שממנה המשימה מקבלת כתובות IP. אפשר להריץ כמה משימות באותה רשת משנה.

  9. בקטע ניתוב תעבורה, בוחרים באפשרות ניתוב כל התעבורה אל ה-VPC כדי לשלוח את כל התעבורה היוצאת דרך רשת ה-VPC.

  10. לוחצים על יצירה או על עדכון.

  11. כדי לוודא שהעבודה נמצאת ברשת ה-VPC, לוחצים על העבודה ואז על הכרטיסייה הגדרות. הרשת ותת-הרשת מופיעות בכרטיס VPC.

  12. מפעילים את הגישה הפרטית ל-Google בתת-הרשת שאליה התחברתם.

פתרון בעיות

אם אתם רואים מהירויות רשת נמוכות כשאתם מורידים כמות גדולה של נתונים לדיסק אחסון ארעי (ephemera disk), פעלו לפי השלבים להפעלת Direct VPC. אם לא מפעילים את Direct VPC, מהירויות ההעברה ברשת יהיו נמוכות יותר.