הגדרת טעינת אמצעי אחסון של Cloud Storage לשירותי Cloud Run

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

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

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

דרישות לגבי הזיכרון

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

  • כברירת מחדל, בכל השמירה במטמון של Cloud Storage FUSE, ‏Cloud Run משתמש בהגדרה של שמירת נתוני stat במטמון עם זמן חיים (TTL) של 60 שניות. גודל ברירת המחדל המקסימלי של מטמון הנתונים הסטטיסטיים הוא 32MB, וגודל ברירת המחדל המקסימלי של מטמון הסוגים הוא 4MiB.

  • כשקוראים מ-Cloud Storage, ‏Cloud Storage FUSE מבצע קריאות ל-API כדי לקרוא אובייקט ישירות, בלי להוריד את הקובץ כולו לספרייה מקומית. ‫Cloud Storage FUSE יוצר חיבור TCP וקורא את כל האובייקט של Cloud Storage, או רק חלקים מהקובץ שציינתם באפליקציה או במערכת ההפעלה באמצעות היסט. בזמן הקריאה, Cloud Storage FUSE צורך גם זיכרון שאינו מטמון של stat ו-type, כמו מערך של 1MiB לכל קובץ שהוא קורא, וגם ל-goroutines.

  • כברירת מחדל, כשכותבים ב-Cloud Storage, ‏Cloud Storage FUSE תומך ב-streaming-writes, נתיב כתיבה. ‫Cloud Storage FUSE מעלה נתונים ישירות ל-Cloud Storage בלי להעביר את הקובץ במלואו למערך הנתונים הזמני. כל קובץ שפותחים לכתיבה בסטרימינג צורך כ-64MiB זיכרון במהלך תהליך ההעלאה. כך אפשר לצמצם את זמן האחזור ואת השימוש במקום בכונן, וזה שימושי במיוחד לכתיבה רציפה של נתונים גדולים.

מגבלות

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

  • ב-Cloud Storage FUSE אין בקרת בו-זמניות על פעולות כתיבה מרובות (נעילת קבצים) באותו קובץ. כשמספר אנשים מנסים להחליף קובץ, פעולת הכתיבה האחרונה היא הקובעת וכל התוכן הקודם נמחק.
  • ‫Cloud Storage FUSE היא לא מערכת קבצים שתואמת באופן מלא ל-POSIX. פרטים נוספים זמינים במאמרי העזרה של Cloud Storage FUSE.

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

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

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

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

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

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

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

כדי לקבל את ההרשאות שנדרשות לזהות השירות כדי לגשת לקובץ ולקטגוריה של Cloud Storage, צריך לבקש מהאדמין להקצות לזהות השירות את התפקיד צפייה באובייקט אחסון (roles/storage.objectViewer). אם זהות השירות צריכה גם לבצע פעולות כתיבה בקטגוריה, צריך להקצות לה את התפקיד Storage Object User‏ (roles/storage.objectUser).

למידע נוסף על תפקידים והרשאות ב-Cloud Storage, קראו את המאמר IAM ל-Cloud Storage.

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

טעינת נפח אחסון ב-Cloud Storage

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

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

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

המסוף

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

    כניסה ל-Cloud Run

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

    1. אם אתם מגדירים שירות חדש, לוחצים על Deploy container וממלאים את דף הגדרות השירות הראשוני. לוחצים על Containers, Networking, Security כדי להרחיב את דף הגדרת השירות, ואז לוחצים על Volumes.

    2. אם אתם מגדירים שירות קיים, לוחצים על השירות ואז על הכרטיסייה Containers.

  3. לוחצים על Mount volume.

  4. בוחרים באפשרות קטגוריה של Cloud Storage בתור סוג האחסון.

  5. בשדה Mount path, מזינים את הנתיב שבו רוצים לטעון את אמצעי האחסון.

  6. מחפשים ובוחרים את הקטגוריה של Cloud Storage או ספרייה ספציפית שרוצים להשתמש בה לנפח האחסון. אם רוצים, יוצרים קטגוריה חדשה.

  7. אם רוצים להגדיר את הקטגוריה לקריאה בלבד, מסמנים את התיבה Read-only.

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

  9. לוחצים על Save.

  10. כדי ליצור שירות חדש, לוחצים על יצירה. לוחצים על View diff & redeploy ואז על Deploy changes בשירות קיים.

gcloud

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

    gcloud run deploy SERVICE \
      --image IMAGE_URL \
      --add-volume mount-path=MOUNT_PATH,type=cloud-storage,bucket=BUCKET_NAME,readonly=READ_ONLY

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

    • ‫SERVICE: שם השירות.
    • ‫IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר, לדוגמה us-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, המאגר REPO_NAME כבר צריך להיות קיים. כתובת ה-URL היא בפורמט LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • ‫MOUNT_PATH: הנתיב היחסי שבו אתם טוענים את הנפח, לדוגמה /mnt/my-volume.
    • ‫BUCKET_NAME: השם של הקטגוריה ב-Cloud Storage.
    • ‫READ_ONLY: true כדי להגדיר את אמצעי האחסון לקריאה בלבד, או false כדי לאפשר כתיבה.
  • אם אתם משתמשים בכמה קונטיינרים, קודם צריך לציין את אמצעי האחסון ואז לציין את נקודות ה-mount של אמצעי האחסון לכל קונטיינר:

    gcloud run services update SERVICE \
      --add-volume name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME \
      --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 run services describe SERVICE --format export > service.yaml
  2. מעדכנים לפי הצורך.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/execution-environment: gen2
        spec:
          containers:
          - image: IMAGE_URL
            volumeMounts:
            - name: VOLUME_NAME
              mountPath: MOUNT_PATH
          volumes:
          - name: VOLUME_NAME
            csi:
              driver: gcsfuse.run.googleapis.com
              readOnly: IS_READ_ONLY
              volumeAttributes:
                bucketName: BUCKET_NAME

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

    • ‫IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר, לדוגמה us-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, המאגר REPO_NAME כבר צריך להיות קיים. הפורמט של כתובת ה-URL הוא LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
    • ‫MOUNT_PATH: הנתיב היחסי שבו אתם טוענים את הנפח, לדוגמה /mnt/my-volume.
    • ‫VOLUME_NAME: כל שם שרוצים לתת לנפח האחסון. הערך של VOLUME_NAME משמש למיפוי של אמצעי האחסון לנקודת הטעינה של אמצעי האחסון.
    • ‫IS_READ_ONLY: הערך True כדי להגדיר את אמצעי האחסון לקריאה בלבד, או הערך False כדי לאפשר כתיבה.
    • ‫BUCKET_NAME: השם של הקטגוריה ב-Cloud Storage.
  3. יוצרים או מעדכנים את השירות באמצעות הפקודה הבאה:

    gcloud run services replace service.yaml

    כברירת מחדל, הפקודה gcloud run services replace משתמשת בקובץ service.yaml אם הוא קיים.

Terraform

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

מוסיפים את הקוד הבא למשאב google_cloud_run_v2_service בתצורה של Terraform:
  resource "google_cloud_run_v2_service" "default" {
    name     = "SERVICE"
    location = "REGION"

    template {
      containers {
        image = "IMAGE_URL"
        volume_mounts {
          name = "VOLUME_NAME"
          mount_path = "MOUNT_PATH"
        }
      }

      volumes {
        name = "VOLUME_NAME"
        gcs {
          bucket = google_storage_bucket.default.name
          read_only = IS_READ_ONLY
        }
      }
    }
  }

  resource "google_storage_bucket" "default" {
    name     = "BUCKET_NAME"
    location = "REGION"
  }

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

  • ‫SERVICE: השם של שירות Cloud Run.
  • ‫REGION: האזור של Google Cloud .
  • ‫IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר, לדוגמה us-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, המאגר REPO_NAME כבר צריך להיות קיים. הפורמט של כתובת ה-URL הוא LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG.
  • ‫VOLUME_NAME: כל שם שרוצים לתת לנפח האחסון. הערך של VOLUME_NAME משמש למיפוי של אמצעי האחסון לנקודת הטעינה של אמצעי האחסון.
  • ‫MOUNT_PATH: הנתיב היחסי שבו אתם טוענים את הנפח, לדוגמה /mnt/my-volume.
  • ‫IS_READ_ONLY: True כדי להגדיר את אמצעי האחסון לקריאה בלבד, או False כדי לאפשר כתיבה.
  • ‫BUCKET_NAME: השם של הקטגוריה ב-Cloud Storage.

פיתוח נייטיב

כדי לציין נקודות טעינה של אמצעי אחסון בקובץ compose.yaml, מוסיפים את המאפיין volumes להגדרת השירות. volumes או configs ברמה העליונה ממופים לקטגוריות של Cloud Storage.

  services:
    web:
      image: IMAGE
      volumes:
        - VOLUME_NAME:MOUNT_PATH
  volumes:
    VOLUME_NAME:

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

  • ‫IMAGE: כתובת ה-URL של קובץ האימג' של הקונטיינר.
  • ‫VOLUME_NAME: שם הנפח.
  • ‫MOUNT_PATH: הנתיב שבו רוצים לטעון את אמצעי האחסון.

פריסת השירותים

  1. כדי לפרוס את השירותים, מריצים את הפקודה gcloud run compose up:

    gcloud run compose up compose.yaml
  2. משיבים y לכל בקשה להתקנת רכיבים נדרשים או להפעלת ממשקי API.

  3. אופציונלי: אם רוצים לאפשר גישה לשירות בלי אימות, הופכים את השירות לגלוי לכולם.

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

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

אם אתם משתמשים בתכונה של טעינת נפח אחסון ב-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");

הגדרת אמצעי אחסון באמצעות אפשרויות טעינה

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

ציון אפשרויות טעינה

אפשר לציין אפשרויות טעינה באמצעות מסוף Google Cloud ,‏ Google Cloud CLI,‏ YAML או Terraform. אפשרויות הטעינה מופרדות בנקודה ופסיק (;) ב-Google Cloud CLI, ומופרדות בפסיקים ב-YAML, כמו שמוצג בכרטיסיות הבאות:

המסוף

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

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

    כניסה ל-Cloud Run

  2. לוחצים על השירות כדי לפתוח את דף הפרטים שלו.

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

    1. לוחצים על סמל העריכה לצד האחסון שרוצים לערוך.
    2. מרחיבים את Mount options.
    3. מגדירים את אפשרויות הטעינה על ידי עדכון השדות המתאימים או על ידי הוספת אפשרויות טעינה באופן ידני.
    4. לוחצים על Save.
  4. לוחצים על View diff & redeploy ואז על Deploy changes.

gcloud

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

  gcloud run deploy SERVICE \
      --image IMAGE_URL \
      --add-volume mount-path=MOUNT_PATH,type=cloud-storage,bucket=BUCKET_NAME,readonly=READ_ONLY,mount-options="OPTION_1=VALUE_1;OPTION_N=VALUE_N"

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

  • ‫SERVICE: שם השירות.
  • ‫IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר, לדוגמה us-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, המאגר REPO_NAME כבר צריך להיות קיים. כתובת ה-URL היא בפורמט LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
  • ‫MOUNT_PATH: הנתיב היחסי שבו אתם טוענים את הנפח, לדוגמה /cache.
  • ‫BUCKET_NAME: השם של הקטגוריה ב-Cloud Storage.
  • ‫READ_ONLY: true כדי להגדיר את אמצעי האחסון לקריאה בלבד, או false כדי לאפשר כתיבה.
  • ‫OPTION_1: אפשרות הטעינה הראשונה. שימו לב שאפשר לציין כמה אפשרויות טעינה שרוצים, כשכל אפשרות טעינה וזוג ערכים מופרדים באמצעות נקודה-פסיק.
  • ‫VALUE_1: ההגדרה הרצויה לאפשרות הטעינה הראשונה.
  • ‫OPTION_N: אפשרות הטעינה הבאה.
  • ‫VALUE_N: ההגדרה של אפשרות הטעינה הבאה.

YAML

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

    gcloud run services describe SERVICE --format export > service.yaml
  2. מעדכנים לפי הצורך.

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: SERVICE
    spec:
      template:
        metadata:
          annotations:
            run.googleapis.com/execution-environment: gen2
        spec:
          containers:
          - image: IMAGE_URL
            volumeMounts:
            - name: VOLUME_NAME
              mountPath: MOUNT_PATH
          volumes:
          - name: VOLUME_NAME
            csi:
              driver: gcsfuse.run.googleapis.com
              readOnly: IS_READ_ONLY
              volumeAttributes:
                bucketName: BUCKET_NAME
                mountOptions: OPTION_1=VALUE_1,OPTION_N=VALUE_N

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

    • ‫IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר, לדוגמה us-docker.pkg.dev/cloudrun/container/hello:latest. אם אתם משתמשים ב-Artifact Registry, המאגר REPO_NAME כבר צריך להיות קיים. כתובת ה-URL היא בפורמט LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/PATH:TAG
    • ‫MOUNT_PATH: הנתיב היחסי שבו אתם טוענים את הנפח, לדוגמה /cache.
    • ‫VOLUME_NAME: כל שם שרוצים לתת לנפח האחסון. הערך של VOLUME_NAME משמש למיפוי של אמצעי האחסון לנקודת הטעינה של אמצעי האחסון.
    • ‫IS_READ_ONLY: True כדי להגדיר את אמצעי האחסון לקריאה בלבד, או False כדי לאפשר כתיבה.
    • ‫BUCKET_NAME: השם של הקטגוריה ב-Cloud Storage.
    • ‫OPTION_1: אפשרות הטעינה הראשונה. שימו לב שאפשר לציין כמה אפשרויות טעינה שרוצים, כשכל אפשרות טעינה וצמד ערכים מופרדים באמצעות פסיק.
    • ‫VALUE_1: ההגדרה הרצויה לאפשרות הטעינה הראשונה.
    • ‫OPTION_N: אפשרות הטעינה הבאה.
    • ‫VALUE_N: ההגדרה של אפשרות הטעינה הבאה.
  3. יוצרים או מעדכנים את השירות באמצעות הפקודה הבאה:

    gcloud run services replace service.yaml

    כברירת מחדל, הפקודה gcloud run services replace משתמשת בקובץ service.yaml אם הוא קיים.

Terraform

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

מוסיפים את הקוד הבא למשאב google_cloud_run_v2_service בתצורה של Terraform:

  resource "google_cloud_run_v2_service" "default" {
    name     = "SERVICE"
    location = "REGION"

    template {
      containers {
        image = "IMAGE_URL"
        volume_mounts {
          name = "VOLUME_NAME"
          mount_path = "MOUNT_PATH"
        }
      }

      volumes {
        name = "VOLUME_NAME"
        gcs {
            bucket = google_storage_bucket.default.name
            read_only = IS_READ_ONLY
            mount_options = ["OPTION_1=VALUE_1", "OPTION_N=VALUE_N", "OPTION_O"]
        }
      }
    }
  }

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

  • ‫SERVICE: השם של שירות Cloud Run.
  • ‫REGION: האזור של Google Cloud .
  • ‫IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר שמכיל את מאגר ה-Workers, למשל us-docker.pkg.dev/cloudrun/container/worker-pool:latest
  • ‫VOLUME_NAME: כל שם שרוצים לתת לנפח האחסון. הערך של VOLUME_NAME משמש למיפוי של אמצעי האחסון לנקודת הטעינה של אמצעי האחסון.
  • ‫MOUNT_PATH: הנתיב היחסי שבו אתם טוענים את הנפח, לדוגמה /mnt/my-volume.
  • ‫IS_READ_ONLY: True כדי להגדיר את אמצעי האחסון לקריאה בלבד, או False כדי לאפשר כתיבה.
  • ‫BUCKET_NAME: השם של הקטגוריה ב-Cloud Storage.
  • ‫OPTION_1: אפשרות הטעינה הראשונה. שימו לב שאפשר לציין כמה אפשרויות טעינה שרוצים, כשכל אפשרות טעינה וצמד ערכים מופרדים באמצעות פסיק.
  • ‫VALUE_1: ההגדרה הרצויה לאפשרות הטעינה הראשונה.
  • ‫OPTION_N: אפשרות הטעינה השנייה, אם רלוונטי.
  • ‫VALUE_N: ההגדרה של אפשרות הטעינה השנייה.
  • ‫OPTION_O: אפשרות הטעינה השלישית, אם רלוונטי. בחלק מאפשרויות הטעינה אין ערך.

אפשרויות טעינה נפוצות

אפשרויות הטעינה משמשות בדרך כלל כדי:

  • קביעת הגדרות המטמון
  • טעינת ספרייה ספציפית בלבד מהקטגוריה של Cloud Storage
  • הגדרת הבעלות על אמצעי האחסון (uid, gid)
  • השבתת ספריות משתמעות
  • מציינים את רמות יומן ניפוי הבאגים.

קביעת הגדרות לשמירה במטמון

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

הגדרת המטמון תיאור ברירת מחדל
cache-dir שם אמצעי האחסון בזיכרון שישמש כספרייה הבסיסית לשמירת קבצים מהקטגוריה של Cloud Storage, בפורמט cr-volume:{volume name}. לדוגמה, אם יש לכם נפח בזיכרון בשם in-memory-1 שאתם רוצים להשתמש בו כספריית המטמון, ציינו את cr-volume:in-memory-1. הוראות להגדרת אמצעי אחסון בזיכרון זמינות במאמר הגדרת נקודות טעינה של אמצעי אחסון בזיכרון לשירותים. כשמפעילים את התכונות האלה, Cloud Run משנה את חשבונאות המשאבים של תהליך Cloud Storage FUSE וסופר את זה במגבלות הזיכרון של הקונטיינר. כדי להגדיל את מגבלת הזיכרון של הקונטיינר, קראו את המאמר הגדרת מגבלות הזיכרון לשירותים.
file-cache-download-chunk-size-mb מציינת את הגודל של כל בקשת קריאה ב-MiB שכל goroutine שולחת ל-Cloud Storage כשמורידים את האובייקט למטמון הקבצים. 200
file-cache-enable-parallel-downloads האצת הקריאה של קבצים גדולים באמצעות ספריית המטמון של הקבצים כמאגר נתונים לשליפה מראש, תוך שימוש בכמה תהליכי עבודה להורדת כמה חלקים של קובץ במקביל. TRUE
file-cache-max-parallel-downloads המספר המקסימלי של goroutines שאפשר ליצור בכל זמן נתון בכל משימות ההורדה של הקבצים. פי שניים ממספר ליבות המעבד (CPU) במחשב או 16, הגבוה מביניהם.
file-cache-parallel-downloads-per-file מספר בקשות ההורדה בו-זמנית לכל קובץ. 16
file-cache-cache-file-for-range-read ההגדרה הזו קובעת אם האובייקט המלא צריך לרדת באופן אסינכרוני ולהישמר בספריית המטמון של Cloud Storage FUSE, כשהקריאה הראשונה הושלמה מהיסט שאינו אפס. FALSE
stat-cache-max-size-mb הגודל המקסימלי במגה-בייטים (MiB) שהמטמון של נתוני stat יכול להשתמש בו. מטמון הנתונים הסטטיסטיים נשמר תמיד בזיכרון, ומשפיע על צריכת הזיכרון. אם עומס העבודה כולל עד 20,000 קבצים, צריך לציין את הערך 32. אם עומס העבודה משתמש ביותר מ-20,000 קבצים, צריך להגדיל את הערך ב-10 לכל 6,000 קבצים נוספים, כאשר המטמון של הנתונים הסטטיסטיים משתמש בממוצע של 1,500 בייטים לכל קובץ.

כדי לאפשר למטמון של הנתונים הסטטיסטיים להשתמש בכמות הזיכרון הנדרשת, צריך לציין את הערך -1. כדי להשבית את המטמון של הנתונים הסטטיסטיים, מציינים את הערך 0.
32
type-cache-max-size-mb הגודל המקסימלי ב-MiB לכל ספרייה שהמטמון של הסוג יכול להשתמש בו. מטמון הסוגים תמיד נשמר כולו בזיכרון, ומשפיע על צריכת הזיכרון.

צריך לציין ערך של 4 אם המספר המקסימלי של קבצים בספרייה אחת מהקטגוריה שאתם טוענים מכיל 20,000 קבצים או פחות. אם המספר המקסימלי של קבצים בספרייה אחת שאתם טוענים מכיל יותר מ-20,000 קבצים, צריך להגדיל את הערך ב-1 לכל 5,000 קבצים, שהם ממוצע של כ-200 בייטים לקובץ.

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

כדי להשבית את מטמון הסוגים, צריך לציין ערך של 0.
4

הפקודה הבאה ב-Google Cloud CLI מגדירה את metadata-cache-ttl-secs ל-120 שניות ומגדילה את קיבולת המטמון של הנתונים הסטטיסטיים והסוגים ל-52 ול-7 MiB, בהתאמה:

gcloud run services update SERVICE \
    --add-volume mount-path=MOUNT_PATH,type=cloud-storage,bucket=BUCKET_NAME,mount-options="metadata-cache-ttl-secs=120;stat-cache-max-size-mb=52;type-cache-max-size-mb=7"
    

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

  • ‫SERVICE: שם השירות.
  • ‫BUCKET_NAME: השם של הקטגוריה ב-Cloud Storage.
  • ‫MOUNT_PATH: הנתיב היחסי שבו אתם טוענים את הנפח, לדוגמה /cache.

הפעלת יומן ניפוי הבאגים

כברירת מחדל, Cloud Storage FUSE מתעד אירועים ברמת Info ומעלה. אפשר לשנות את הגדרות הרישום ביומן באמצעות כל אחת מרמות החומרה הבאות של היומן, שמופיעות בסדר עולה:

  • trace
  • debug
  • info
  • warning
  • error
  • כדי להשבית את כל הרישום ביומן, מציינים את הערך off.

כשמציינים רמת חומרה, Cloud Storage FUSE יוצר יומנים לאירועים עם רמת חומרה ששווה לרמת החומרה שצוינה או גבוהה ממנה. לדוגמה, כשמציינים את הרמה warning, מערכת Cloud Storage FUSE יוצרת יומנים של אזהרות ושגיאות.

הגדרת חומרת היומן לרמות גבוהות מ-info יכולה להשפיע על הביצועים וליצור כמות גדולה של נתוני רישום ביומן, לכן מומלץ לעשות זאת רק לפי הצורך. כדי שתהיה תאימות ל-Cloud Logging, הפורמט של היומן הוא text, ואין תמיכה בפורמט json.

שורת הפקודה הבאה מפעילה את יומן ניפוי הבאגים:

gcloud run services update SERVICE \
    --add-volume mount-path=MOUNT_PATH,type=cloud-storage,bucket=BUCKET_NAME,mount-options="log-severity=debug"

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

  • ‫SERVICE: שם השירות.
  • ‫BUCKET_NAME: השם של הקטגוריה ב-Cloud Storage.
  • ‫MOUNT_PATH: הנתיב היחסי שבו טוענים את אמצעי האחסון, לדוגמה /cache.

השבתת ספריות מרומזות

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

התכונה "ספריות משתמעות" מאפשרת ל-Cloud Run לזהות קבצים קיימים ב-Cloud Storage ששמות הקבצים שלהם מחקים מבנה של ספרייה, כמו /mydir/myfile.txt. אם תשביתו את הספריות המרומזות, Cloud Run לא יוכל להציג או לקרוא קבצים כאלה.

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

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

gcloud run services update SERVICE \
    --add-volume mount-path=MOUNT_PATH,type=cloud-storage,bucket=BUCKET_NAME,mount-options="implicit-dirs=false"

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

  • ‫SERVICE: שם השירות.
  • ‫BUCKET_NAME: השם של הקטגוריה ב-Cloud Storage.
  • ‫MOUNT_PATH: הנתיב היחסי שבו אתם טוענים את הנפח, לדוגמה /cache.

טעינת ספרייה ספציפית בתוך קטגוריה של Cloud Storage

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

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

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

gcloud run services update SERVICE \
    --add-volume mount-path=MOUNT_PATH,type=cloud-storage,bucket=BUCKET_NAME,mount-options="only-dir=images"

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

  • ‫SERVICE: שם השירות.
  • ‫BUCKET_NAME: השם של הקטגוריה ב-Cloud Storage.
  • ‫MOUNT_PATH: הנתיב היחסי שבו אתם טוענים את הנפח, לדוגמה /cache.

הגדרת עוצמת הקול UID ו-GID

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

שורת הפקודה הבאה מגדירה את uid ו-gid:

gcloud run services update SERVICE \
    --add-volume mount-path=MOUNT_PATH,type=cloud-storage,bucket=BUCKET_NAME,mount-options="uid=UID;gid=GID"

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

  • ‫SERVICE: שם השירות.
  • ‫MOUNT_PATH: הנתיב היחסי שבו אתם טוענים את הנפח, לדוגמה /cache.
  • ‫BUCKET_NAME: השם של הקטגוריה ב-Cloud Storage.
  • ‫UID: מזהה המשתמש שצריך לטעון את אמצעי האחסון בשבילו.
  • ‫GID: מזהה הקבוצה שרוצים לטעון את אמצעי האחסון בתור.

הגדרת אפשרויות טעינה אחרות

הרשימה הבאה כוללת את כל אפשרויות הטעינה שנתמכות ב-Cloud Run.

הארגון שלי

  • implicit-dirs
  • only-dir
  • rename-dir-limit

ניפוי באגים

  • debug_fuse_errors
  • debug_fuse
  • debug_gcs
  • debug-invariants
  • debug_mutex

מטמון

  • stat-cache-capacity
  • stat-cache-ttl
  • type-cache-ttl
  • enable-nonexistent-type-cache

הרשאות

  • uid
  • gid
  • file-mode
  • dir-mode

אחר

  • billing-project
  • client-protocol
  • experimental-enable-json-read
  • experimental-opentelemetry-collector-address
  • http-client-timeout
  • limit-bytes-per-sec
  • limit-ops-per-sec
  • max-conns-per-host
  • max-idle-conns-per-host
  • max-retry-sleep
  • -o
  • retry-multiplier
  • sequential-read-size-mb
  • stackdriver-export-interval

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

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

המסוף

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

    כניסה ל-Cloud Run

  2. ברשימת השירותים, לוחצים על השירות הרצוי כדי לפתוח את דף הפרטים שלו.

  3. לוחצים על הכרטיסייה Containers כדי לראות את פרטי הנפח.

gcloud

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

    gcloud run services describe SERVICE_NAME
  2. מאתרים את ההגדרה Volume mounts בפלט שהתקבל.

אופטימיזציה של ביצועי רוחב הפס ברשת של Cloud Storage FUSE

כדי לשפר את ביצועי הקריאה והכתיבה, חברו את שירות Cloud Run לרשת VPC באמצעות Direct VPC ונתבו את כל התנועה היוצאת דרך רשת ה-VPC. אפשר לעשות את זה באחת מהדרכים הבאות:

זמן ההפעלה של קונטיינר וטעינות של Cloud Storage FUSE

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

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

מאפייני הביצועים של Cloud Storage FUSE

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

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

כשכותבים לקטגוריה, Cloud Storage FUSE מעביר את האובייקט במלואו לזיכרון. המשמעות היא שכתיבת קבצים גדולים מוגבלת לכמות הזיכרון שזמינה למכונה של מאגר הנתונים (מגבלת הזיכרון המקסימלית של מאגר הנתונים היא 32GiB).

הכתיבה נמחקת מהקטגוריה רק כשמבצעים close או fsync: האובייקט המלא מועלה לקטגוריה. החריג היחיד שבו אובייקט לא מועלה מחדש במלואו לקטגוריה הוא במקרה של קובץ עם תוכן מצורף, כשהקובץ הוא בגודל 2MiB או יותר.

מידע נוסף זמין במקורות המידע הבאים:

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

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

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

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

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

gcloud run services update SERVICE \
    --container=container1 \
    --clear-volumes \
    --clear-volume-mounts \
    --container=container2 \
    --clear-volumes \
    --clear-volume-mounts

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

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

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

gcloud run services update SERVICE \
    --remove-volume VOLUME_NAME \
    --container=container1 \
    --remove-volume-mount MOUNT_PATH \
    --container=container2 \
    --remove-volume-mount MOUNT_PATH