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

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

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

אפשר להשתמש באמצעי אחסון בזיכרון כדי:

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

התנהגות

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

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

אם לא מציינים מגבלת גודל, המערכת מגדירה אותה באופן אוטומטי למחצית מהגודל הכולל של כל המאגדים בעבודה או בשירות. לדוגמה, emptyDir גודל נפח האחסון = [זיכרון (מאגר A) + זיכרון (מאגר B) + זיכרון (מאגר N)]/2. התנהגות ברירת המחדל הזו יכולה לגרום לכך שמגבלת הגודל של הנפח בזיכרון תהיה גבוהה יותר מהזיכרון שהוקצה לחלק מהקונטיינרים. זה יכול לגרום לקריסות לא צפויות אם קונטיינר יחיד חורג מהזיכרון שהוקצה לו בזמן שהוא מנסה לכתוב עוד נתונים לנפח, גם אם לא הגיעה למגבלת הגודל של הנפח.

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

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

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

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

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

הגדרת נפח אחסון בזיכרון

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

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

מגדירים טעינת אמצעי אחסון בזיכרון באמצעות מסוף Google Cloud , Google Cloud CLI,‏ YAML או Terraform.

המסוף

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

    כניסה ל-Cloud Run

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

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

  4. לוחצים על הכרטיסייה Volumes (נפחים).

    תמונה

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

gcloud

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

    gcloud beta run worker-pools update WORKER_POOL \
      --add-volume=name=VOLUME_NAME,type=in-memory,size-limit=SIZE_LIMIT \
      --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH

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

    • WORKER_POOL: השם של מאגר העובדים.
    • VOLUME_NAME: כל שם שרוצים לתת לנפח האחסון. הערך VOLUME_NAME משמש למיפוי הנפח לנקודת הטעינה של הנפח.
    • MOUNT_PATH: הנתיב היחסי במערכת הקבצים של קובץ המאגר שבו רוצים לטעון את אמצעי האחסון הזה, לדוגמה, /mnt/my-volume.
    • SIZE_LIMIT: מגבלת הזיכרון שרוצים להקצות לנפח האחסון, ב-MiB או ב-GiB (מצוין כ-Mi או כ-Gi) – לדוגמה, 500Mi. המגבלה הזו צריכה להיות נמוכה מהזיכרון הכולל שהוגדר עבור הקונטיינרים.
  • אם אתם משתמשים בכמה מאגרי תגים, קודם מציינים את אמצעי האחסון, ואז מציינים את נקודות הטעינה של אמצעי האחסון לכל מאגר תגים:

    gcloud beta run worker-pools update WORKER_POOL \
      --add-volume=name=VOLUME_NAME,type=in-memory,size-limit=SIZE_LIMIT \
      --container=CONTAINER_1 \
      --add-volume-mount=volume=VOLUME_NAME,mount-path=MOUNT_PATH \
      --container=CONTAINER_2 \
      --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH2

YAML

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

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

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

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

    • WORKER_POOL: השם של מאגר העובדים שלכם ב-Cloud Run.
    • CONTAINER_NAME: השם של הקונטיינר.
    • IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר שמכיל את מאגר העובדים, למשל us-docker.pkg.dev/cloudrun/container/worker-pool:latest
    • VOLUME_NAME: כל שם שרוצים לתת לנפח האחסון. הערך VOLUME_NAME משמש למיפוי הנפח לנקודת הטעינה של הנפח.
    • MOUNT_PATH: הנתיב היחסי שבו אתם מטמיעים את אמצעי האחסון, לדוגמה, /mnt/my-volume.
    • SIZE_LIMIT: מגבלת הזיכרון שרוצים להקצות לנפח האחסון, ב-MiB או ב-GiB (מצוין כ-Mi או כ-Gi), לדוגמה, 500Mi. המגבלה הזו צריכה להיות נמוכה מהזיכרון הכולל שהוגדר עבור הקונטיינרים.
  3. יוצרים או מעדכנים את מאגר העובדים באמצעות הפקודה הבאה:

    gcloud beta run worker-pools replace workerpool.yaml

Terraform

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

כדי לציין מאגר, נפח והרכבה של נפח יחיד:

resource "google_cloud_run_v2_worker_pool" "default" {
  name     = "WORKER_POOL"
  location = "REGION"
  launch_stage = "BETA"

  template {
    containers {
      image = "IMAGE_URL"
      volume_mounts {
        name = "VOLUME_NAME"
        mount_path = "MOUNT_PATH"
      }
    }
    volumes {
      name = "VOLUME_NAME"
      empty_dir {
        medium = "MEMORY"
        size_limit = "SIZE_LIMIT"
      }
    }
  }
}

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

  • SERVICE_NAME: השם של שירות Cloud Run.
  • REGION: האזור Google Cloud . לדוגמה, europe-west1.
  • IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר שמכיל את מאגר העובדים, למשל us-docker.pkg.dev/cloudrun/container/worker-pool:latest.
  • VOLUME_NAME: כל שם שרוצים לתת לנפח האחסון. הערך VOLUME_NAME משמש למיפוי הנפח לנקודת העיגון של הנפח.
  • MOUNT_PATH: הנתיב היחסי במערכת הקבצים של קובץ המאגר שבו רוצים לטעון את אמצעי האחסון הזה, לדוגמה, /mnt/my-volume.
  • SIZE_LIMIT: מגבלת הזיכרון שרוצים להקצות לנפח האחסון, ב-MiB או ב-GiB (מצוין כ-Mi או כ-Gi). לדוגמה, 500Mi. המגבלה הזו צריכה להיות נמוכה מהזיכרון הכולל שהוגדר עבור הקונטיינרים.

כדי לציין כמה מאגרי תגים, כרכים והרכבות של כרכים:

resource "google_cloud_run_v2_worker_pool" "default" {
  name     = "WORKER_POOL"
  location = "REGION"
  launch_stage = "BETA"

  template {
    containers {
      image = "IMAGE_URL"
      volume_mounts {
        name = "VOLUME_NAME"
        mount_path = "MOUNT_PATH"
      }
    }
    containers {
      image = "IMAGE_URL_2"
      volume_mounts {
        name = "VOLUME_NAME_2"
        mount_path = "MOUNT_PATH_2"
      }
    }
    volumes {
      name = "VOLUME_NAME"
      empty_dir {
        medium = "MEMORY"
        size_limit = "SIZE_LIMIT"
      }
    }
    volumes {
      name = "VOLUME_NAME_2"
      empty_dir {
        medium = "MEMORY"
        size_limit = "SIZE_LIMIT_2"
      }
    }
  }
}

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

  • SERVICE_NAME: השם של שירות Cloud Run.
  • REGION: האזור Google Cloud . לדוגמה, europe-west1.
  • IMAGE_URL, IMAGE_URL_2: הפניה לתמונת מאגר (container) שמכילה את מאגר העובדים, כמו us-docker.pkg.dev/cloudrun/container/worker-pool:latest.
  • VOLUME_NAME, VOLUME_NAME_2: כל שם שרוצים לתת לנפח. הערך הזה משמש למיפוי עוצמת הקול לנקודת העיגון של עוצמת הקול.
  • MOUNT_PATH, MOUNT_PATH_2: הנתיב היחסי במערכת הקבצים של הקונטיינר שבו רוצים לטעון את אמצעי האחסון הזה. לדוגמה: /mnt/my-volume.
  • SIZE_LIMIT, SIZE_LIMIT_2: מגבלת הזיכרון שרוצים להקצות לנפח, ב-MiB או ב-GiB (מצוין כ-Mi או כ-Gi) – לדוגמה, 500Mi. המגבלה הזו צריכה להיות נמוכה מהזיכרון הכולל שהוגדר עבור הקונטיינרים.

הצגת ההגדרות של משתני הסביבה במאגר העובדים

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

    כניסה ל-Cloud Run

  2. לוחצים על Worker pools כדי להציג את רשימת מאגרי העובדים שנפרסו.

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

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

קריאה וכתיבה של נתונים בווליום

אם משתמשים בתכונה של 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")

Go

משתמשים בחבילה 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 beta run worker-pools update WORKER_POOL \
    --clear-volumes
    --clear-volume-mounts

אם יש לכם כמה מאגרי תגים, אתם יכולים לפעול לפי המוסכמות של CLI של sidecars כדי לנקות את אמצעי האחסון והחיבורים של אמצעי האחסון:

gcloud beta 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 beta run worker-pools update WORKER_POOL \
    --remove-volume VOLUME_NAME \
    --container=container1 \
    --remove-volume-mount MOUNT_PATH \
    --container=container2 \
    --remove-volume-mount MOUNT_PATH