בדף הזה מוסבר איך לטעון שיתוף קבצים של NFS כנפח ב-Cloud Run. אפשר להשתמש בכל שרת NFS, כולל שרת NFS משלכם שמארח את עצמו באופן מקומי או במכונה וירטואלית ב-Compute Engine. אם עדיין אין לכם שרת NFS, מומלץ להשתמש ב-Filestore, שהוא שירות NFS מנוהל מלא של Google Cloud.
טעינת שיתוף הקבצים של NFS כנפח ב-Cloud Run מציגה את שיתוף הקבצים כקבצים במערכת הקבצים של הקונטיינר. אחרי שמתקינים את שיתוף הקבצים כנפח אחסון, אפשר לגשת אליו כאילו הוא ספרייה במערכת הקבצים המקומית, באמצעות פעולות וספריות של מערכת הקבצים בשפת התכנות.
נתיבים אסורים
ב-Cloud Run אי אפשר לטעון נפח ב-/dev, ב-/proc או ב-/sys, או בספריות המשנה שלהם.
מגבלות
- Cloud Run לא תומך בנעילת NFS. נפחי NFS מותקנים אוטומטית במצב ללא נעילה.
לפני שמתחילים
כדי לטעון שרת 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 :
בתפריט, בוחרים באפשרות מאגרי עובדים ולוחצים על פריסת קונטיינר כדי להגדיר מאגר עובדים חדש. אם אתם מגדירים מאגר עובדים קיים, לוחצים על מאגר העובדים ואז על 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
אם יש לכם כמה מאגרי תגים, אתם יכולים לפעול לפי המוסכמות של CLI של sidecars כדי לנקות את הכרכים והחיבורים של הכרכים:
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