בדף הזה מוסבר איך לטעון שיתוף קבצים של 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
אם אתם יוצרים מכונה חדשה, דלגו על השלב הזה. אם אתם מעדכנים מופע קיים, אתם צריכים להוריד את הגדרות ה-YAML שלו:
gcloud beta run instances describe INSTANCE --format export > instance.yaml
בדוגמה הבאה מופיעה הגדרת ה-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כדי לאפשר כתיבה.
יוצרים או מעדכנים את המכונה באמצעות הפקודה הבאה:
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