בדף הזה מוסבר איך לטעון תיקיית קבצים משותפת ב-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, כשמאגר ה-Workers של Cloud Run מחובר לאותה רשת VPC. אם אין לכם שרת NFS, אתם יכולים ליצור מכונה של Filestore.
- מאגר ה-workers של 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. אם מאגר ה-Workers של Cloud Run מתממשק עם ממשקי API שלGoogle Cloud , כמו ספריות הלקוח של Cloud, עיינו במדריך להגדרת זהות השירות. מידע נוסף על הקצאת תפקידים זמין במאמרים הרשאות פריסה וניהול הגישה.
טעינת נפח NFS
אפשר לטעון כמה שרתי NFS, מכונות Filestore או סוגי נפחים אחרים בנתיבי טעינה שונים.
אם אתם משתמשים בכמה קונטיינרים, קודם צריך לציין את אמצעי האחסון ואז לציין את נקודות הגישה לאמצעי האחסון של כל קונטיינר.
מגדירים טעינה של אמצעי אחסון NFS באמצעות מסוף Google Cloud , Google Cloud CLI, YAML או Terraform.
המסוף
נכנסים לדף Cloud Run במסוף Google Cloud :
בתפריט הניווט של Cloud Run, לוחצים על Worker pools:
אם אתם מגדירים מאגר קיים של עובדים, לוחצים על מאגר העובדים ואז על Edit and deploy new revision.
אם אתם מגדירים מאגר וורקרים חדש, לוחצים על Deploy container ואז ממלאים את הדף הראשוני של מאגר הוורקרים. לאחר מכן לוחצים על Containers, Networking, Security כדי להרחיב את דף ההגדרות של מאגרי ה-workers.
לוחצים על הכרטיסייה כרכים.
לוחצים על Mount volume.
לוחצים על NFS בתור סוג הנפח.
כדי להגדיר את עוצמת הקול:
- בשדה Mount path, מזינים את הנתיב שבו רוצים לטעון את אמצעי האחסון.
- בשדה NFS server, מזינים את שם הדומיין או המיקום (בפורמט
IP_ADDRESS) של שיתוף הקבצים ב-NFS. - בשדה Path, מזינים את הנתיב לספריית שרת ה-NFS שרוצים לטעון.
- לוחצים על Save.
לוחצים על Create או על Deploy.
gcloud
כדי להוסיף נקודת טעינה של אמצעי אחסון:
gcloud run worker-pools update WORKER_POOL \ --add-volume mount-path=MOUNT_PATH,type=nfs,location=IP_ADDRESS:NFS_PATH,readonly=READ_ONLY
מחליפים את מה שכתוב בשדות הבאים:
- WORKER_POOL: השם של מאגר ה-workers.
- MOUNT_PATH: הנתיב היחסי שבו טוענים את אמצעי האחסון, לדוגמה
/mnt/my-volume. - IP_ADDRESS: המיקום של שיתוף הקבצים ב-NFS.
- NFS_PATH: הנתיב לשיתוף הקבצים ב-NFS שמתחיל בלוכסן, לדוגמה
/example-directory. - READ_ONLY:
trueכדי להגדיר את אמצעי האחסון לקריאה בלבד, אוfalseכדי לאפשר כתיבה.
אם משתמשים בכמה מאגרים, קודם מציינים את אמצעי האחסון ואז מציינים את נקודות הגישה לאמצעי האחסון בכל מאגר:
gcloud 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
אם אתם יוצרים מאגר חדש של Worker, דלגו על השלב הזה. אם אתם מעדכנים מאגר קיים של Worker, הורידו את הגדרת ה-YAML שלו:
gcloud run worker-pools describe WORKER_POOL --format export > worker-pool.yaml
הדוגמה הבאה מכילה את הגדרת ה-YAML:
apiVersion: run.googleapis.com/v1 kind: WorkerPool metadata: name: WORKER_POOL 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: השם של מאגר ה-workers ב-Cloud Run.
- CONTAINER_NAME: שם הקונטיינר.
-
IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר שמכיל את מאגר ה-workers, למשל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כדי לאפשר כתיבה.
יוצרים או מעדכנים את מאגר ה-workers באמצעות הפקודה הבאה:
gcloud run worker-pools replace worker-pool.yaml
כברירת מחדל, הפקודה
gcloud run worker-pools replaceמשתמשת בקובץworker-pool.yamlאם הוא קיים.
Terraform
כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.
resource "google_cloud_run_v2_worker_pool" "default" {
name = "WORKER_POOL"
location = "REGION"
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: השם של מאגר ה-Workers.
- REGION: האזור ב- Google Cloud . לדוגמה:
europe-west1. -
IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר שמכיל את מאגר ה-Workers, למשל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כדי לאפשר כתיבה.
הצגת ההגדרות של משתני הסביבה של מאגר ה-workers
נכנסים ל-Cloud Run במסוף Google Cloud :
לוחצים על Worker pools כדי להציג את רשימת מאגרי ה-workers שנפרסו.
לוחצים על מאגר העובדים שרוצים לבדוק כדי להציג את חלונית הפרטים שלו.
לוחצים על הכרטיסייה Containers כדי להציג את הגדרות הקונטיינר של מאגר ה-Workers.
פתרון בעיות ב-NFS
אם נתקלתם בבעיות, כדאי לבדוק את הדברים הבאים:
- מאגר ה-workers של Cloud Run מחובר לרשת ה-VPC שבה נמצא שרת ה-NFS.
- אין כללים של חומת אש שמונעים מ-Cloud Run להגיע לשרת ה-NFS.
- אם הקונטיינר צריך לכתוב נתונים, ודאו שההרשאות של שיתוף ה-NFS מוגדרות כך שהמשתמש של הקונטיינר יוכל לכתוב.
זמן ההפעלה של קונטיינר וטעינת נפח NFS
שימוש בנקודות טעינה של נפחי NFS יכול להאריך מעט את זמן ההפעלה הראשונית של קונטיינר Cloud Run, כי נקודת הטעינה של הנפח מופעלת לפני הפעלת הקונטיינרים. הקונטיינר יתחיל לפעול רק אם ה-NFS יותקן בהצלחה.
שימו לב ש-NFS טוען את אמצעי האחסון רק אחרי שהוא מתחבר לשרת ומאחזר את הטיפול בקבצים. אם Cloud Run לא מצליח ליצור חיבור לשרת, מאגר ה-workers של Cloud Run לא יתחיל לפעול.
בנוסף, כל עיכוב ברשת יכול להשפיע על זמן ההפעלה של הקונטיינר, כי ל-Cloud Run יש זמן קצוב כולל של 30 שניות לכל נקודות ה-mount. אם טעינת ה-NFS נמשכת יותר מ-30 שניות, מאגר ה-Workers של Cloud Run לא יתחיל לפעול.
מאפייני הביצועים של NFS
אם יוצרים יותר מנפח NFS אחד, כל הנפחים נטענים במקביל.
מכיוון ש-NFS היא מערכת קובצי רשת, היא כפופה למגבלות רוחב פס, והגישה למערכת הקבצים יכולה להיות מושפעת מרוחב פס מוגבל.
כשכותבים לנפח ה-NFS, הכתיבה מאוחסנת בזיכרון של Cloud Run עד שהנתונים נמחקים. הנתונים נמחקים במקרים הבאים:
- האפליקציה מרוקנת את נתוני הקובץ באופן מפורש באמצעות sync(2), msync(2) או fsync(3).
- האפליקציה סוגרת קובץ באמצעות close(2).
- עומס על הזיכרון מאלץ את המערכת לפנות משאבים בזיכרון המערכת.
מידע נוסף זמין במאמרי העזרה של Linux בנושא NFS.
ניקוי והסרה של אמצעי אחסון ונקודות טעינה של אמצעי אחסון
אפשר לנקות את כל אמצעי האחסון ונקודות הטעינה, או להסיר אמצעי אחסון ונקודות טעינה ספציפיים.
ניקוי כל אמצעי האחסון ונקודות הטעינה של אמצעי האחסון
כדי לנקות את כל הנפחים ונקודות העגינה של הנפחים ממאגר ה-Workers עם קונטיינר יחיד, מריצים את הפקודה הבאה:
gcloud run worker-pools update WORKER_POOL \ --clear-volumes \ --clear-volume-mounts
gcloud 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 run worker-pools update WORKER_POOL \ --remove-volume VOLUME_NAME \ --container=container1 \ --remove-volume-mount MOUNT_PATH \ --container=container2 \ --remove-volume-mount MOUNT_PATH