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

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

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

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

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

איך מבקשים להגדיל את המכסה

מגבלות

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

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

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

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

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

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

  1. 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

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

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

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

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

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

יצירה וטעינה של דיסק אחסון ארעי (ephemeral disk)

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

המסוף

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

    כניסה ל-Cloud Run

  2. בתפריט הניווט של Cloud Run, לוחצים על Worker pools:

    1. אם אתם מגדירים מאגר קיים של Worker, לוחצים על המאגר ואז על Edit and deploy new revision.

    2. אם אתם מגדירים מאגר וורקרים חדש, לוחצים על Deploy container ואז ממלאים את הדף הראשוני של מאגר הוורקרים. לאחר מכן לוחצים על Containers, Networking, Security כדי להרחיב את דף ההגדרות של מאגרי ה-workers.

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

  4. מסמנים את התיבה דיסק אחסון ארעי (ephemeral disk).

  5. בתפריט, מציינים את גודל הדיסק הארעי.

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

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

gcloud

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

gcloud run worker-pools update WORKERPOOL \
    --add-volume=name=VOLUME_NAME,type=ephemeral-disk,size=SIZE \
    --add-volume-mount=volume=VOLUME_NAME,mount-path=MOUNT_PATH

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

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

YAML

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

    gcloud run worker-pools describe WORKER_POOL --format export > worker-pool.yaml
  2. מגדירים את קובץ ה-YAML:

    apiVersion: run.googleapis.com/v1
    kind: WorkerPool
    metadata:
      name: WORKER_POOL
      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
    

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

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

    gcloud run worker-pools replace worker-pool.yaml

    כברירת מחדל, הפקודה gcloud run worker-pools replace משתמשת בקובץ worker-pool.yaml אם הוא קיים.

Terraform

כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.

  resource "google_cloud_run_v2_worker_pool" "default" {
    name     = "WORKER_POOL"
    location = "REGION"
    deletion_protection = "true"
    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,
      ]
    }
  }

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

  • ‫WORKER_POOL: השם של מאגר ה-Workers.
  • ‫REGION: האזור של Google Cloud .
  • ‫IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר שמכיל את מאגר ה-Workers, למשל us-docker.pkg.dev/cloudrun/container/worker-pool: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");

ניקוי והסרה של אמצעי אחסון ונקודות טעינה של אמצעי אחסון

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

ניקוי כל אמצעי האחסון ונקודות הטעינה של אמצעי האחסון

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

gcloud run worker-pools update WORKER_POOL \
    --clear-volumes \
    --clear-volume-mounts
אם יש לכם כמה קונטיינרים, צריך לפעול לפי המוסכמות של CLI של sidecars כדי לנקות את אמצעי האחסון ואת נקודות הגישה לאמצעי האחסון:

gcloud run worker-pools update WORKER_POOL \
    --container=container1 \
    --clear-volumes \
    --clear-volume-mounts \
    --container=container2 \
    --clear-volumes \
    --clear-volume-mounts

הסרת אמצעי אחסון ונקודות טעינה ספציפיים

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

כדי להסיר ווליומים ספציפיים או נקודות טעינה של ווליומים, משתמשים בדגלים remove-volume ו-remove-volume-mount:

gcloud run worker-pools update WORKER_POOL \
    --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 עם מאגר של workers, מבצעים את השלבים הבאים:

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

    כניסה ל-Cloud Run

  2. בתפריט, בוחרים באפשרות Worker pools ולוחצים על Deploy container כדי להגדיר מאגר חדש של קונטיינרים. אם אתם מגדירים מאגר קיים של Worker, לחצו על המאגר ואז על Edit and deploy new revision.

  3. אם אתם מגדירים מאגר חדש של Worker, מלאו את הדף הראשוני של מאגר ה-Worker ואז לחצו על Containers, Networking, Security כדי להרחיב את דף ההגדרות של מאגרי ה-Worker.

  4. נכנסים לכרטיסייה Networking.

  5. לוחצים על Connect to a VPC.

  6. בקטע Traffic routing, בוחרים באפשרות Route all traffic to the VPC כדי לשלוח את כל התנועה היוצאת דרך רשת ה-VPC.

  7. לוחצים על Create או על Deploy.

    עכשיו אפשר לשלוח בקשות ממאגר ה-Workers של Cloud Run לכל משאב ברשת ה-VPC, בהתאם לכללי חומת האש.

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

פתרון בעיות

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