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

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

רשימת ההרשאות והתפקידים ב-IAM שמשויכים ל-Cloud Run מופיעה במאמרים תפקידי IAM ב-Cloud Run והרשאות IAM ב-Cloud Run. אם מופע Cloud Run שלכם מתקשר עםGoogle Cloud ממשקי API, כמו ספריות לקוח של 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 שניות לכל הנפחים. אם חולפות יותר מ-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