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

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

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

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

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

התנהגות

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

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

אם לא מציינים מגבלת גודל, המערכת מגדירה אותה אוטומטית למחצית מהגודל הכולל של כל המאגרי המידע במופע. לדוגמה, emptyDir נפח = [זיכרון (קונטיינר א') + זיכרון (קונטיינר ב') + זיכרון (קונטיינר נ')]/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 CLI או YAML.

gcloud

  • כדי לטעון נפח אחסון:

    gcloud beta run instances update INSTANCE \
      --add-volume mount-path=MOUNT_PATH,type=in-memory,size-limit=SIZE_LIMIT

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

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

    gcloud beta run instances update INSTANCE \
      --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 instances describe INSTANCE --format export > instance.yaml
  2. בדוגמה הבאה מופיעה הגדרת ה-YAML:

    apiVersion: run.googleapis.com/v1
    kind: Instance
    metadata:
      name: INSTANCE
      annotations:
        run.googleapis.com/launch-stage: BETA
    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

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

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

    gcloud beta run instances replace instance.yaml

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

אם משתמשים בתכונה של 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 beta run instances update INSTANCE \
    --clear-volumes \
    --clear-volume-mounts

הסרה של אמצעי אחסון בודדים והצמדות של אמצעי אחסון

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

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

gcloud beta run instances update INSTANCE \
    --remove-volume VOLUME_NAME \
    --container=container1 \
    --remove-volume-mount MOUNT_PATH \
    --container=container2 \
    --remove-volume-mount MOUNT_PATH