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

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

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

מגבלות

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

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

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

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

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

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

טעינת נפח NFS

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

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

הגדרת טעינת נפח NFS באמצעות Google Cloud CLI או YAML;

gcloud

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

    gcloud beta run instances update INSTANCE \
    --add-volume mount-path=MOUNT_PATH,type=nfs,location=IP_ADDRESS:NFS_PATH,readonly=READ_ONLY

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

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

    gcloud beta run instances update INSTANCE \
      --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 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
        nfs:
          server: IP_ADDRESS
          path: NFS_PATH
          readOnly: IS_READ_ONLY

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

    • ‫INSTANCE: השם של המכונה ב-Cloud Run.
    • ‫CONTAINER_NAME: שם הקונטיינר.
    • ‫IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר, למשל us-docker.pkg.dev/cloudrun/container/hello: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 instances replace instance.yaml

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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