בדף הזה מוסבר איך לטעון שיתוף קבצים של 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 , Google Cloud CLI, YAML או Terraform.
המסוף
נכנסים ל-Cloud Run במסוף Google Cloud :
בתפריט, בוחרים באפשרות Worker pools (מאגרי עובדים) ולוחצים על Deploy container (פריסת קונטיינר) כדי להגדיר מאגר עובדים חדש. אם אתם מגדירים מאגר עובדים קיים, לוחצים על מאגר העובדים ואז על Edit and deploy new revision (עריכה ופריסה של עדכון חדש).
אם אתם מגדירים מאגר עובדים חדש, ממלאים את הדף הראשוני של מאגר העובדים ולוחצים על Containers, Networking, Security (מאגרי קונטיינרים, רשתות, אבטחה) כדי להרחיב את דף ההגדרות של מאגרי העובדים.
לוחצים על הכרטיסייה Volumes (אמצעי אחסון).
- לוחצים על Mount volume (התקנת אמצעי אחסון).
- לוחצים על NFS בתור סוג הנפח.
- בשדה Mount path (נתיב ההרכבה), מזינים את הנתיב שבו רוצים להרכיב את אמצעי האחסון.
- בשדה NFS server (שרת NFS), מזינים את שם הדומיין או את המיקום (בפורמט
IP_ADDRESS) של שיתוף הקבצים ב-NFS. - בשדה נתיב, מזינים את הנתיב לספריית שרת ה-NFS שרוצים לטעון.
- לוחצים על Save.
לוחצים על יצירה או על פריסה.
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: שם מאגר העובדים.
- 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
אם אתם יוצרים מאגר עובדים חדש, דלגו על השלב הזה. אם אתם מעדכנים מאגר עובדים קיים, מורידים את הגדרת ה-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: השם של מאגר העובדים של 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כדי לאפשר כתיבה.
יוצרים או מעדכנים את מאגר העובדים באמצעות הפקודה הבאה:
gcloud run worker-pools replace worker-pool.yaml
אם קיים קובץ
worker-pool.yaml, הפקודהgcloud run worker-pools replaceמשתמשת בו כברירת מחדל.
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: השם של מאגר העובדים.
- 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כדי לאפשר כתיבה.
הצגת ההגדרות של משתני הסביבה במאגר העובדים
נכנסים ל-Cloud Run במסוף Google Cloud :
לוחצים על Worker pools כדי להציג את רשימת מאגרי העובדים שנפרסו.
לוחצים על מאגר העובדים שרוצים לבדוק כדי להציג את חלונית הפרטים שלו.
לוחצים על הכרטיסייה Containers כדי להציג את ההגדרה של מאגר העובדים.
פתרון בעיות ב-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 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