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

בדף הזה מוסבר איך לטעון שיתוף קבצים ב-NFS כנפח ב-Cloud Run. אפשר להשתמש בכל שרת NFS, כולל שרת NFS משלכם שמארח את עצמו באופן מקומי או במכונה וירטואלית ב-Compute Engine. אם עדיין אין לכם שרת NFS, מומלץ להשתמש ב-Filestore, שהוא שירות NFS מנוהל מלא של Google Cloud.

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

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

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

מגבלות

  • ‫Cloud Run לא תומך בנעילת NFS. נפחי NFS מותקנים אוטומטית במצב ללא נעילה.

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

כדי לטעון שרת NFS כנפח ב-Cloud Run, צריך לוודא שיש לכם את הדברים הבאים:

  • רשת VPC שבה פועל שרת ה-NFS או מופע Filestore.
  • שרת NFS שפועל ברשת VPC, עם מאגר העובדים של Cloud Run שמחובר לרשת ה-VPC הזו. אם עדיין אין לכם שרת NFS, אתם יכולים ליצור אותו על ידי יצירת מופע Filestore.
  • מאגר העובדים של Cloud Run מצורף לרשת ה-VPC שבה שרת ה-NFS פועל. כדי ליהנות מהביצועים הכי טובים, מומלץ להשתמש בDirect VPC ולא ב-VPC Connectors.
  • אם אתם משתמשים בפרויקט קיים, צריך לוודא שההגדרה של חומת האש של ה-VPC מאפשרת ל-Cloud Run להגיע לשרת ה-NFS. (אם מתחילים מפרויקט חדש, זה נכון כברירת מחדל). אם אתם משתמשים ב-Filestore כשרת NFS, אתם צריכים ליצור כלל יציאה בחומת האש כדי לאפשר ל-Cloud Run להגיע ל-Filestore. לשם כך, פועלים לפי ההוראות במסמכי Filestore.
  • מגדירים את ההרשאות בשיתוף הקבצים המרוחק של NFS כדי לאפשר גישה למשתמש של הקונטיינר. כברירת מחדל, Filestore מספק גישת קריאה לכל המשתמשים, אבל מגביל את גישת הכתיבה למשתמש Root (uid 0). אם הקונטיינר שלכם דורש גישת כתיבה ולא פועל כמשתמש Root, אתם צריכים להשתמש בלקוח מחובר (שפועל כמשתמש Root) כדי לשנות את הרשאות השיתוף. לדוגמה, אפשר להשתמש בפקודה chown כדי לשנות את הבעלות על הקבצים או הספריות למזהה המשתמש הספציפי שהקונטיינר פועל כמותו.

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

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

צירוף נפח אחסון מסוג NFS

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

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

מגדירים טעינה של נפח NFS באמצעות מסוף 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 type, בוחרים באפשרות NFS.
      • בשדה Volume name (שם נפח האחסון), מזינים את השם שרוצים להשתמש בו עבור נפח האחסון.
      • בשדה NFS Server (שרת NFS), מזינים את שם הדומיין או את המיקום (בפורמט IP_ADDRESS) של שיתוף הקבצים ב-NFS.
      • בשדה נתיב, מזינים את הנתיב לספריית שרת ה-NFS שרוצים לטעון.
      • לוחצים על סיום.
    • לוחצים על הכרטיסייה Container (מאגר תגים), מאתרים את מאגר התגים שרוצים לצרף ומרחיבים את הפרטים של מאגר התגים.
    • לוחצים על הכרטיסייה Volume Mounts (חיבורי אמצעי אחסון).
    • לוחצים על Mount volume (הוספת אמצעי אחסון).
      • בוחרים את נפח ה-NFS מהתפריט.
      • מציינים את הנתיב שבו רוצים לטעון את אמצעי האחסון.
      • לוחצים על Mount Volume (הוספת עוצמת קול).
      • לוחצים על סיום.
  5. לוחצים על יצירה או על פריסה.

gcloud

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

    gcloud beta run worker-pools update WORKER_POOL \
    --add-volume name=VOLUME_NAME,type=nfs,location=IP_ADDRESS:NFS_PATH \
    --add-volume-mount volume=VOLUME_NAME,mount-path=MOUNT_PATH

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

    • WORKER_POOL: השם של מאגר העובדים.
    • VOLUME_NAME: השם שרוצים לתת לנפח האחסון.
    • IP_ADDRESS: המיקום של שיתוף הקבצים ב-NFS.
    • NFS_PATH: הנתיב לשיתוף קבצים ב-NFS שמתחיל בלוכסן – לדוגמה /example-directory.
    • MOUNT_PATH: הנתיב היחסי שבו אתם מטמיעים את אמצעי האחסון, לדוגמה, /mnt/my-volume.
  • כדי לטעון את אמצעי האחסון כאמצעי אחסון לקריאה בלבד:

    --add-volume name=VOLUME_NAME,type=nfs,location=IP_ADDRESS:NFS_PATH,readonly=true
  • אם אתם משתמשים בכמה מאגרי תגים, קודם מציינים את אמצעי האחסון, ואז מציינים את נקודות הטעינה של אמצעי האחסון לכל מאגר תגים:

    gcloud beta run worker-pools update WORKER_POOL \
    --add-volume name=VOLUME_NAME,type=nfs,location=IP_ADDRESS:NFS_PATH \
    --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
            nfs:
              server: IP_ADDRESS
              path: NFS_PATH
              readOnly: IS_READ_ONLY

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

    • 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.
    • IP_ADDRESS: הכתובת של שיתוף הקבצים ב-NFS.
    • NFS_PATH: הנתיב לשיתוף קבצים ב-NFS שמתחיל בקו נטוי, לדוגמה /example-directory.
    • IS_READ_ONLY: True כדי להגדיר את אמצעי האחסון לקריאה בלבד, או False כדי לאפשר כתיבה.
  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"
      }
    }
    vpc_access {
      network_interfaces {
        network    = "default"
        subnetwork = "default"
      }
    }

    volumes {
      name = "VOLUME_NAME"
      nfs {
        server    = google_filestore_instance.default.networks[0].ip_addresses[0]
        path      = "NFS_PATH"
        read_only = "IS_READ_ONLY"
      }
    }
  }
}

resource "google_filestore_instance" "default" {
  name     = "cloudrun-worker-pool"
  location = "REGION"
  tier     = "BASIC_HDD"

  file_shares {
    capacity_gb = 1024
    name        = "share1"
  }

  networks {
    network = "default"
    modes   = ["MODE_IPV4"]
  }
}

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

  • WORKER_POOL: שם מאגר העובדים.
  • 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.
  • NFS_PATH: הנתיב לשיתוף קבצים ב-NFS.
  • IS_READ_ONLY: True כדי להגדיר את אמצעי האחסון לקריאה בלבד, או False כדי לאפשר כתיבה.

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

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

    כניסה ל-Cloud Run

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

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

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

פתרון בעיות ב-NFS

אם נתקלתם בבעיות, כדאי לבדוק את הדברים הבאים:

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

זמן ההפעלה של הקונטיינר והטעינה של נפח ה-NFS

שימוש בנקודות חיבור של נפח NFS יכול להאריך מעט את זמן ההפעלה במצב התחלתי(cold start) של קונטיינר Cloud Run, כי נקודת החיבור של הנפח מופעלת לפני הפעלת הקונטיינרים. הקונטיינר יופעל רק אם NFS יותקן בהצלחה.

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

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

מאפייני הביצועים של NFS

אם יוצרים יותר מנפח NFS אחד, כל הנפחים מותקנים במקביל.

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

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

  • האפליקציה שלכם מרוקנת את נתוני הקובץ באופן מפורש באמצעות sync(2),‏ msync(2) או fsync(3).
  • האפליקציה סוגרת קובץ באמצעות close(2).
  • עומס על הזיכרון גורם לשחרור משאבי זיכרון של המערכת.

מידע נוסף זמין במאמרי העזרה של Linux בנושא NFS.

ניקוי והסרה של נפחים ונקודות חיבור של נפחים

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

ניקוי כל אמצעי האחסון והחיבורים שלהם

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

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