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

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

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

  • קריסות של מכונה
  • העברת תנועה לגרסה חדשה

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

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

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

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

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

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

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

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

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

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

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

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

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

מגבלות

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

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

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

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

תכונת דיסק אחסון ארעי (ephemera disk) זמינה באזורים הבאים:

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

  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. נכנסים ל-Cloud Run במסוף Google Cloud :

    כניסה ל-Cloud Run

  2. בתפריט, בוחרים באפשרות מאגרי עובדים ולוחצים על פריסת קונטיינר כדי להגדיר מאגר עובדים חדש. אם אתם מגדירים מאגר עובדים קיים, לוחצים על מאגר העובדים ואז על Edit and deploy new revision (עריכה ופריסה של עדכון חדש).

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

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

    תמונה

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

gcloud

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

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

YAML

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

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

    apiVersion: run.googleapis.com/v1
    kind: WorkerPool
    metadata:
      name: WORKER_POOL
      labels:
        cloud.googleapis.com/location: REGION
      annotations:
        run.googleapis.com/launch-stage: BETA
    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: השם של מאגר העובדים.
    • REGION: Google Cloud האזור.
    • CONTAINER_NAME: השם שרוצים לתת לקונטיינר.
    • IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר שמכיל את מאגר העובדים, כמו us-docker.pkg.dev/cloudrun/container/worker-pool:latest.
    • VOLUME_NAME: השם שרוצים לתת לנפח האחסון.
    • MOUNT_PATH: הנתיב היחסי שבו אתם מטמיעים את אמצעי האחסון, לדוגמה, /mnt/my-volume.
    • SIZE: גודל הדיסק. לדוגמה: 100Gi. הגודל צריך להיות לפחות 10Gi עבור נפחי אחסון מסוג ephemeral-disk.
  3. יוצרים או מעדכנים את מאגר העובדים באמצעות הפקודה הבאה:

    gcloud run worker-pools replace workerpool.yaml

Terraform

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

  resource "google_cloud_run_v2_worker_pool" "default" {
    name     = "WORKER_POOL"
    location = "REGION"
    deletion_protection = "true"
    launch_stage = "BETA"
    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: השם של מאגר העובדים.
  • REGION: Google Cloud האזור.
  • IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר שמכיל את מאגר העובדים, כמו us-docker.pkg.dev/cloudrun/container/worker-pool: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 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

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

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

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

אם אתם מתכוונים להעתיק את התוכן של דיסק אחסון ארעי (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, Networking, Security (מאגרי קונטיינרים, רשתות, אבטחה) כדי להרחיב את דף ההגדרות של מאגר העובדים.

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

  5. בוחרים באפשרות Connect to a VPC (קישור ל-VPC).

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

  7. לוחצים על יצירה או על פריסה.

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

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

פתרון בעיות

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