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

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

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

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

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

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

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

אפשר להשתמש בדיסק זמני למטרות הבאות:

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

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

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

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

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

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

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

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

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

מגבלות

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

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

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

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

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

תכונת הדיסק הזמני זמינה באזורים הבאים:

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

  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, כדאי לעיין במדריך להגדרת זהות שירות. מידע נוסף על מתן תפקידים זמין במאמרים הרשאות פריסה וניהול גישה.

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

אפשר ליצור ולצרף דיסק זמני באמצעות מסוף Google Cloud ,‏ Google Cloud CLI,‏ YAML או Terraform:

המסוף

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

    כניסה ל-Cloud Run

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

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

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

    תמונה

    • בקטע מקורות מידע:
      • בוחרים באפשרות Ephemeral Disk (דיסק זמני).
      • בתפריט, מציינים את הגודל של הדיסק הזמני.
      • מזינים את נתיב ההרכבה.
  5. לוחצים על יצירה או על עדכון.

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: גודל הדיסק. לדוגמה: 100Gi. הגודל צריך להיות לפחות 10Gi עבור נפחי אחסון מסוג ephemeral-disk.
  • MOUNT_PATH: הנתיב היחסי שבו אתם מטמיעים את אמצעי האחסון, לדוגמה, /mnt/my-volume.

YAML

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

    gcloud run jobs describe JOB_NAME --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: השם שרוצים לתת לנפח האחסון.
    • MOUNT_PATH: הנתיב היחסי שבו אתם מטמיעים את אמצעי האחסון, לדוגמה, /mnt/my-volume.
    • SIZE: גודל הדיסק. לדוגמה: 100Gi. הגודל צריך להיות לפחות 10Gi עבור נפחי אחסון מסוג ephemeral-disk.
  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: גודל הדיסק. לדוגמה: 100Gi. הגודל צריך להיות לפחות 10Gi עבור נפחי אחסון מסוג 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

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

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

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

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

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

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

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

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

    כניסה ל-Cloud Run

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

  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 בתת-הרשת שאליה התחברתם.

פתרון בעיות

אם אתם רואים מהירויות רשת נמוכות כשאתם מורידים כמות גדולה של נתונים לדיסק זמני, אתם יכולים לפעול לפי השלבים להפעלת Direct VPC. אם לא מפעילים את Direct VPC, מהירויות ההעברה ברשת יהיו נמוכות יותר.