בדף הזה מוסבר איך לטעון קטגוריה של Cloud Storage כנפח אחסון באמצעות טעינת נפחים ב-Cloud Run.
טעינת הקטגוריה כנפח ב-Cloud Run מציגה את התוכן של הקטגוריה כקבצים במערכת הקבצים של הקונטיינר. אחרי שמעלים את הקטגוריה כנפח אחסון, אפשר לגשת אליה כאילו היא הייתה ספרייה במערכת הקבצים המקומית, באמצעות פעולות וספריות של מערכת הקבצים בשפת התכנות, במקום להשתמש בספריות הלקוח של Google API.
אפשר לטעון את אמצעי האחסון במצב קריאה בלבד, ואפשר גם לציין אפשרויות טעינה לאמצעי האחסון.
דרישות זיכרון
בטעינת אמצעי אחסון של Cloud Storage נעשה שימוש בזיכרון של קונטיינר ב-Cloud Run לפעילויות הבאות:לכל השמירה במטמון ב-Cloud Storage FUSE, Cloud Run משתמש בהגדרת המטמון של נתוני stat עם זמן חיים (TTL) של 60 שניות כברירת מחדל. גודל ברירת המחדל של מטמון הנתונים הסטטיסטיים הוא 32MB, וגודל ברירת המחדל של מטמון הסוג הוא 4MiB.
כשקוראים מ-Cloud Storage, Cloud Storage FUSE שולח קריאות API כדי לקרוא אובייקט ישירות, בלי להוריד את הקובץ כולו לספרייה מקומית. Cloud Storage FUSE יוצר חיבור TCP וקורא בחזרה את האובייקט כולו ב-Cloud Storage, או רק חלקים מהקובץ שצוינו באפליקציה או במערכת ההפעלה באמצעות היסט. במהלך קריאה, Cloud Storage FUSE צורך גם זיכרון שאינו שמור במטמון של נתוני stat ו-type, כמו מערך של 1MiB לכל קובץ שהוא קורא, וגם עבור
goroutines.כשכותבים ל-Cloud Storage, Cloud Storage FUSE תומך ב-
streaming-writes, נתיב כתיבה, כברירת מחדל. Cloud Storage FUSE מעלה נתונים ישירות ל-Cloud Storage בלי להעביר את הקובץ למחסן ביניים. כל קובץ שפותחים להזרמה צורך בערך 64 מיביבייט של זיכרון במהלך תהליך ההעלאה. כך מקטינים את זמן האחזור ואת השימוש בנפח האחסון בדיסק, ולכן זה מועיל במיוחד לכתיבה רציפה של נתונים בכמויות גדולות.
מגבלות
מכיוון ש-Cloud Run משתמש ב-Cloud Storage FUSE לטעינת הנפח הזה, יש כמה דברים שחשוב לזכור כשמטעינים קטגוריה של Cloud Storage כנפח:
- Cloud Storage FUSE לא מאפשר בקרת בו-זמניות על פעולות כתיבה מרובות (נעילת קבצים) באותו קובץ. כשמספר אנשים מנסים להחליף קובץ, פעולת הכתיבה האחרונה היא הקובעת וכל התוכן הקודם נמחק.
- Cloud Storage FUSE היא לא מערכת קבצים שתואמת באופן מלא ל-POSIX. פרטים נוספים זמינים במאמרי העזרה של Cloud Storage FUSE.
נתיבים אסורים
ב-Cloud Run אי אפשר לטעון נפח אחסון בנתיבים /dev, /proc או /sys, או בספריות המשנה שלהם.
לפני שמתחילים
צריך קטגוריה של Cloud Storage כדי לטעון אותה כנפח.
כדי לשפר את הביצועים של קריאה וכתיבה ב-Cloud Storage, כדאי לעיין במאמר בנושא אופטימיזציה של הביצועים של רוחב הפס ברשת ב-Cloud Storage FUSE.
התפקידים הנדרשים
כדי לקבל את ההרשאות שדרושות להגדרת נקודות צירוף של נפחי Cloud Storage, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
- Cloud Run Developer (
roles/run.developer) במשימה ב-Cloud Run - משתמש בחשבון שירות (
roles/iam.serviceAccountUser) בזהות השירות
כדי לקבל את ההרשאות שנדרשות לזהות השירות כדי לגשת לקובץ ולמאגר Cloud Storage, צריך לבקש מהאדמין להקצות לזהות השירות את התפקיד צפייה באובייקט אחסון (roles/storage.objectViewer). אם זהות השירות צריכה גם לבצע פעולות כתיבה בדלי, צריך להקצות במקום זאת את התפקיד Storage Object User (roles/storage.objectUser).
פרטים נוספים על תפקידים והרשאות ב-Cloud Storage זמינים במאמר IAM ל-Cloud Storage.
רשימת ההרשאות והתפקידים ב-IAM שמשויכים ל-Cloud Run מופיעה במאמרים תפקידי IAM ב-Cloud Run והרשאות IAM ב-Cloud Run. אם עבודת Cloud Run שלכם מתקשרת עםGoogle Cloud ממשקי API, כמו ספריות לקוח ב-Cloud, כדאי לעיין במדריך להגדרת זהות שירות. מידע נוסף על מתן תפקידים זמין במאמרים הרשאות פריסה וניהול גישה.
טעינת נפח אחסון ב-Cloud Storage
אפשר לטעון כמה דליים בנתיבי טעינה שונים. אפשר גם לצרף נפח אחסון ליותר מקונטיינר אחד באמצעות אותם נתיבי הרכבה או נתיבי הרכבה שונים בקונטיינרים.
אם משתמשים בכמה מאגרי תגים, קודם מציינים את אמצעי האחסון ואז מציינים את נקודות הגישה לאמצעי האחסון לכל מאגר תגים.
המסוף
נכנסים לדף Jobs ב-Cloud Run במסוף Google Cloud :
לוחצים על Deploy container (פריסת מאגר תגים) כדי למלא את דף ההגדרות הראשוניות של המשימה. אם מגדירים משימה קיימת, בוחרים את המשימה ולוחצים על View and edit job configuration (הצגה ועריכה של הגדרת המשימה).
לוחצים על Containers, Connections, Security (מאגרי תגים, חיבורים, אבטחה) כדי להרחיב את דף מאפייני העבודה.
לוחצים על הכרטיסייה Volumes (נפחים).
- לוחצים על Mount volume (התקנת אמצעי אחסון).
- בוחרים באפשרות Cloud Storage bucket (קטגוריה של Cloud Storage) כסוג הנפח.
- בשדה Mount path (נתיב ההרכבה), מזינים את הנתיב שבו רוצים להרכיב את אמצעי האחסון.
- מעיינים בקטגוריה של Cloud Storage או בספרייה ספציפית ובוחרים את אלה שרוצים להשתמש בהם לנפח האחסון. אפשר גם ליצור קטגוריה חדשה.
- אם רוצים להגדיר את הדלי לקריאה בלבד, מסמנים את התיבה 'קריאה בלבד'.
- אפשר גם להרחיב את אפשרויות הטעינה כדי לציין אפשרויות טעינה.
- לוחצים על Save.
לוחצים על יצירה או על עדכון.
gcloud
כדי להוסיף נקודת גישה לנפח:
gcloud run jobs update JOB \ --add-volume mount-path=MOUNT_PATH,type=cloud-storage,bucket=BUCKET_NAME,readonly=READ_ONLY
מחליפים את מה שכתוב בשדות הבאים:
- JOB: השם של המשימה.
- MOUNT_PATH: הנתיב היחסי שבו אתם מטמיעים את אמצעי האחסון. לדוגמה,
/mnt/my-volume. - BUCKET_NAME: שם הקטגוריה של Cloud Storage.
- READ_ONLY:
trueכדי להגדיר את אמצעי האחסון לקריאה בלבד, אוfalseכדי לאפשר כתיבה.
אם אתם משתמשים בכמה מאגרי תגים, קודם מציינים את עוצמת הקול, ואז מציינים את נקודות הגישה של עוצמת הקול לכל מאגר תגים:
gcloud run jobs update JOB \ --add-volume name=VOLUME_NAME,type=cloud-storage,bucket=BUCKET_NAME \ --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 jobs describe JOB_NAME --format export > job.yaml
מעדכנים את MOUNT_PATH, VOLUME_NAME, BUCKET_NAME ואת IS_READ_ONLY לפי הצורך.
apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB_NAME spec: template: metadata: annotations: run.googleapis.com/execution-environment: gen2 spec: template: spec: containers: - image: IMAGE_URL volumeMounts: - mountPath: MOUNT_PATH name: VOLUME_NAME volumes: - name: VOLUME_NAME csi: driver: gcsfuse.run.googleapis.com readOnly: IS_READ_ONLY volumeAttributes: bucketName: BUCKET_NAME
מחליפים את מה שכתוב בשדות הבאים:
- IMAGE_URL: הפניה לקובץ אימג' בקונטיינר, לדוגמה
us-docker.pkg.dev/cloudrun/container/job:latest. - MOUNT_PATH: הנתיב היחסי שבו אתם מטמיעים את אמצעי האחסון. לדוגמה,
/mnt/my-volume. - VOLUME_NAME: כל שם שרוצים לתת לנפח האחסון. הערך VOLUME_NAME משמש למיפוי הנפח לנקודת הטעינה של הנפח.
- IS_READ_ONLY:
Trueכדי להגדיר את אמצעי האחסון לקריאה בלבד, אוFalseכדי לאפשר כתיבה. - BUCKET_NAME: שם הקטגוריה ב-Cloud Storage.
- IMAGE_URL: הפניה לקובץ אימג' בקונטיינר, לדוגמה
יוצרים או מעדכנים את העבודה באמצעות הפקודה הבאה:
gcloud run jobs replace job.yaml
Terraform
כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.
מוסיפים את השורות הבאות למשאבgoogle_cloud_run_v2_job בתצורת Terraform: resource "google_cloud_run_v2_job" "default" {
name = "JOB_NAME"
location = "REGION"
template {
template {
containers {
image = "IMAGE_URL"
volume_mounts {
name = "VOLUME_NAME"
mount_path = "MOUNT_PATH"
}
}
volumes {
name = "VOLUME_NAME"
gcs {
bucket = google_storage_bucket.default.name
read_only = IS_READ_ONLY
}
}
}
}
}
resource "google_storage_bucket" "default" {
name = "BUCKET_NAME"
location = "REGION"
}
מחליפים את מה שכתוב בשדות הבאים:
- JOB_NAME: השם של המשימה ב-Cloud Run.
- REGION: Google Cloud האזור.
- IMAGE_URL: הפניה לקובץ אימג' בקונטיינר, לדוגמה
us-docker.pkg.dev/cloudrun/container/job:latest. - VOLUME_NAME: כל שם שרוצים לתת לנפח האחסון. הערך VOLUME_NAME משמש למיפוי הנפח לנקודת הטעינה של הנפח.
- MOUNT_PATH: הנתיב היחסי שבו אתם מטמיעים את אמצעי האחסון. לדוגמה,
/mnt/my-volume. - IS_READ_ONLY:
Trueכדי להגדיר את אמצעי האחסון לקריאה בלבד, אוFalseכדי לאפשר כתיבה. - BUCKET_NAME: שם הקטגוריה ב-Cloud Storage.
קריאה וכתיבה של נתונים בווליום
אם משתמשים בתכונה של Cloud Run להרכבת נפח אחסון, אפשר לגשת לנפח אחסון מורכב באמצעות אותן ספריות בשפת התכנות שבהן משתמשים כדי לקרוא ולכתוב קבצים במערכת הקבצים המקומית.
האפשרות הזו שימושית במיוחד אם אתם משתמשים במאגר קיים שמצפה שהנתונים יאוחסנו במערכת הקבצים המקומית, ומשתמש בפעולות רגילות של מערכת הקבצים כדי לגשת אליהם.
בקטעי הקוד הבאים מניחים שיש נקודת הרכבה של נפח אחסון עם mountPath שמוגדר ל-/mnt/my-volume.
Nodejs
משתמשים במודול File System כדי ליצור קובץ חדש או לצרף לקובץ קיים בכרך /mnt/my-volume:
var fs = require('fs');
fs.appendFileSync('/mnt/my-volume/sample-logfile.txt', 'Hello logs!', { flag: 'a+' });Python
כתיבה לקובץ שנשמר באמצעי האחסון, /mnt/my-volume:
f = open("/mnt/my-volume/sample-logfile.txt", "a")המשך
משתמשים בחבילה os כדי ליצור קובץ חדש שנשמר בווליום, /mnt/my-volume:
f, err := os.Create("/mnt/my-volume/sample-logfile.txt")Java
משתמשים במחלקה Java.io.File כדי ליצור קובץ יומן בכרך /mnt/my-volume:
import java.io.File;
File f = new File("/mnt/my-volume/sample-logfile.txt");הגדרת נפח אחסון באמצעות אפשרויות טעינה
אפשר להשתמש באפשרויות ההרכבה כדי להגדיר מאפיינים שונים של הרכבת אמצעי האחסון. אפשרויות הטעינה הזמינות מאפשרות להגדיר את הגדרות המטמון, לטעון ספרייה ספציפית, להפעיל רישום באגים ביומן ועוד.
ציון אפשרויות הטעינה
אפשר לציין אפשרויות הרכבה באמצעות מסוף Google Cloud , Google Cloud CLI, YAML או Terraform. אפשרויות ההרכבה מופרדות באמצעות נקודה ופסיק (;) ב-Google Cloud CLI, ומופרדות באמצעות פסיקים ב-YAML, כמו שמוצג בכרטיסיות הבאות:
המסוף
כדי לציין אפשרויות טעינה לנפח אחסון קיים:
נכנסים לדף Jobs ב-Cloud Run במסוף Google Cloud :
לוחצים על המשימה ואז על View and edit job configuration (הצגה ועריכה של הגדרות המשימה).
לוחצים על הכרטיסייה Volumes (נפחים).
- לוחצים על עריכת נקודת העיגון של אמצעי האחסון.
- מרחיבים את אפשרויות טעינה.
- מעדכנים את השדות המתאימים או מוסיפים אפשרויות טעינה באופן ידני כדי להגדיר את אפשרויות הטעינה.
- לוחצים על Save.
לוחצים על פריסה.
gcloud
כדי להוסיף אמצעי אחסון ולטעון אותו עם אפשרויות טעינה:
gcloud run jobs update JOB \ --add-volume mount-path=MOUNT_PATH,type=cloud-storage,bucket=BUCKET_NAME,mount-options="OPTION_1=VALUE_1;OPTION_N=VALUE_N"
מחליפים את מה שכתוב בשדות הבאים:
- JOB: השם של המשימה.
- MOUNT_PATH: הנתיב היחסי שבו אתם מטמיעים את אמצעי האחסון. לדוגמה,
/cache. - BUCKET_NAME: שם הקטגוריה של Cloud Storage.
- OPTION_1: אפשרות הטעינה הראשונה. שימו לב שאפשר לציין כמה אפשרויות הרכבה שרוצים, וכל זוג של אפשרות הרכבה וערך מופרד באמצעות נקודה-פסיק.
- VALUE_1: ההגדרה שרוצים לאפשר לאפשרות ההרכבה הראשונה.
- OPTION_N: אפשרות הטעינה הבאה.
- VALUE_N: ההגדרה של אפשרות הטעינה הבאה.
YAML
אם אתם יוצרים משרה חדשה, דלגו על השלב הזה. אם אתם מעדכנים משימה קיימת, אתם צריכים להוריד את הגדרת ה-YAML שלה:
gcloud run jobs describe JOB_NAME --format export > job.yaml
מעדכנים לפי הצורך.
apiVersion: run.googleapis.com/v1 kind: Job metadata: name: JOB_NAME spec: metadata: template: metadata: annotations: run.googleapis.com/execution-environment: gen2 spec: template: spec: containers: - image: IMAGE_URL volumeMounts: - mountPath: MOUNT_PATH name: VOLUME_NAME volumes: - name: VOLUME_NAME csi: driver: gcsfuse.run.googleapis.com readOnly: IS_READ_ONLY volumeAttributes: bucketName: BUCKET_NAME mountOptions: OPTION_1=VALUE_1,OPTION_N=VALUE_N
מחליפים את מה שכתוב בשדות הבאים:
- IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר שמכיל את מאגר העובדים, למשל
us-docker.pkg.dev/cloudrun/container/worker-pool:latest - MOUNT_PATH: הנתיב היחסי שבו אתם מטמיעים את אמצעי האחסון. לדוגמה,
/cache. - VOLUME_NAME: כל שם שרוצים לתת לנפח האחסון. הערך VOLUME_NAME משמש למיפוי הנפח לנקודת הטעינה של הנפח.
- IS_READ_ONLY:
Trueכדי להגדיר את אמצעי האחסון לקריאה בלבד, אוFalseכדי לאפשר כתיבה. - BUCKET_NAME: שם הקטגוריה ב-Cloud Storage.
- OPTION_1: אפשרות הטעינה הראשונה. שימו לב שאפשר לציין כמה אפשרויות טעינה שרוצים, וכל צמד של אפשרות טעינה וערך מופרד באמצעות פסיק.
- VALUE_1: ההגדרה שרוצים לאפשר לאפשרות ההרכבה הראשונה.
- OPTION_N: אפשרות הטעינה הבאה.
- VALUE_N: ההגדרה של אפשרות הטעינה הבאה.
- IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר שמכיל את מאגר העובדים, למשל
יוצרים או מעדכנים את העבודה באמצעות הפקודה הבאה:
gcloud run jobs replace job.yaml
Terraform
כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.
מוסיפים את השורות הבאות למשאבgoogle_cloud_run_v2_job בתצורת Terraform:resource "google_cloud_run_v2_job" "default" {
name = "JOB_NAME"
location = "REGION"
template {
template {
containers {
image = "IMAGE_URL"
volume_mounts {
name = "VOLUME_NAME"
mount_path = "MOUNT_PATH"
}
}
volumes {
name = "VOLUME_NAME"
gcs {
bucket = google_storage_bucket.default.name
read_only = IS_READ_ONLY
mount_options = ["OPTION_1=VALUE_1", "OPTION_N=VALUE_N", "OPTION_O"]
}
}
}
}
}
מחליפים את מה שכתוב בשדות הבאים:
- JOB_NAME: השם של שירות Cloud Run.
- REGION: Google Cloud האזור.
- IMAGE_URL: הפניה לקובץ האימג' של הקונטיינר שמכיל את מאגר העובדים, למשל
us-docker.pkg.dev/cloudrun/container/worker-pool:latest - VOLUME_NAME: כל שם שרוצים לתת לנפח האחסון. הערך VOLUME_NAME משמש למיפוי הנפח לנקודת הטעינה של הנפח.
- MOUNT_PATH: הנתיב היחסי שבו אתם מטמיעים את אמצעי האחסון. לדוגמה,
/mnt/my-volume. - IS_READ_ONLY:
Trueכדי להגדיר את אמצעי האחסון לקריאה בלבד, אוFalseכדי לאפשר כתיבה. - BUCKET_NAME: שם הקטגוריה ב-Cloud Storage.
- OPTION_1: אפשרות הטעינה הראשונה. שימו לב: אפשר לציין כמה אפשרויות טעינה שרוצים, כשכל אפשרות טעינה וערך מופרדים בפסיק.
- VALUE_1: ההגדרה שרוצים לאפשר לאפשרות ההרכבה הראשונה.
- OPTION_N: אפשרות הטעינה השנייה, אם רלוונטית.
- VALUE_N: ההגדרה של אפשרות הטעינה השנייה.
- OPTION_O: אפשרות הטעינה השלישית, אם רלוונטי. חלק מאפשרויות ההרכבה לא כוללות ערך.
אפשרויות נפוצות לחיבור
אפשרויות הטעינה משמשות בדרך כלל כדי:
- קביעת הגדרות מטמון
- טעינה רק של ספרייה ספציפית מקטגוריה של Cloud Storage
- הגדרת הבעלות על אמצעי האחסון (
uid,gid) - השבתת ספריות מרומזות
- מציינים את רמות הרישום ביומן לניפוי באגים.
קביעת הגדרות של שמירת נתונים במטמון
כדי לשנות את הגדרות הקאשינג של הווליום, צריך להגדיר את אפשרויות המウント שקשורות לקאשינג. בטבלה הבאה מפורטות ההגדרות, וגם ערכי ברירת המחדל של Cloud Run:
| הגדרת מטמון | תיאור | ברירת מחדל |
|---|---|---|
cache-dir |
השם של אמצעי האחסון בזיכרון שמשמש כספרייה הבסיסית לשמירת קבצים מקטגוריה של Cloud Storage בפורמט cr-volume:{volume name}. לדוגמה, אם יש לכם נפח אחסון בזיכרון בשם in-memory-1 שבו אתם רוצים להשתמש כספריית מטמון, מציינים cr-volume:in-memory-1. הוראות להגדרה של אמצעי אחסון בזיכרון זמינות במאמר הגדרת טעינה של אמצעי אחסון בזיכרון לשירותים. כשמפעילים את התכונות האלה, Cloud Run משנה את חישוב המשאבים של תהליך Cloud Storage FUSE וכולל אותו במגבלות הזיכרון של הקונטיינר. כדי להגדיל את מגבלת הזיכרון של הקונטיינר, אפשר לעיין במאמר בנושא הגדרת מגבלות זיכרון לשירותים. |
|
file-cache-download-chunk-size-mb |
מציין את הגודל של כל בקשת קריאה ב-MiB שכל goroutine שולח ל-Cloud Storage כשמורידים את האובייקט למטמון הקבצים. | 200 |
file-cache-enable-parallel-downloads |
האפשרות הזו מאיצה את הקריאה של קבצים גדולים באמצעות ספריית מטמון הקבצים כמאגר אחזור מראש, ומשתמשת בכמה תהליכים להורדה מקבילה של כמה חלקים של קובץ. | TRUE |
file-cache-max-parallel-downloads |
המספר המקסימלי של goroutines שאפשר ליצור בכל זמן נתון בכל משימות ההורדה של הקבצים. | פי שניים ממספר ליבות ה-CPU במחשב או 16, הגבוה מביניהם. |
file-cache-parallel-downloads-per-file |
מספר בקשות ההורדה בו-זמנית לכל קובץ. | 16 |
file-cache-cache-file-for-range-read |
ההגדרה הזו קובעת אם האובייקט המלא יורד באופן אסינכרוני וייאחסן בספריית המטמון של Cloud Storage FUSE כשהקריאה הראשונה מסתיימת מהיסט שאינו אפס. | FALSE |
stat-cache-max-size-mb |
הגודל המקסימלי במביבייטים (MiB) שבו יכול להשתמש מטמון הנתונים של stat. המטמון של הנתונים הסטטיסטיים תמיד נשמר כולו בזיכרון, וזה משפיע על צריכת הזיכרון. מציינים ערך של 32 אם עומס העבודה כולל עד 20,000 קבצים. אם עומס העבודה שלכם משתמש ביותר מ-20,000 קבצים, צריך להגדיל את הגודל בערכים של 10 לכל 6,000 קבצים נוספים, כאשר מטמון הנתונים הסטטיסטיים משתמש בממוצע ב-1,500 בייט לכל קובץ.כדי לאפשר למטמון הנתונים הסטטיסטיים להשתמש בכמה זיכרון שצריך, מציינים ערך של -1. כדי להשבית את מטמון הנתונים הסטטיסטיים, מציינים ערך של 0. |
32 |
type-cache-max-size-mb |
הגודל המקסימלי ב-MiB לכל ספרייה שבה יכול המטמון של הסוג להשתמש. מטמון הסוג תמיד נשמר כולו בזיכרון, וזה משפיע על צריכת הזיכרון. מציינים ערך של 4 אם המספר המקסימלי של קבצים בספרייה אחת מהמאגר שאתם מצרפים מכיל 20,000 קבצים או פחות. אם המספר המקסימלי של קבצים בספרייה אחת שאתם מטמיעים מכיל יותר מ-20,000 קבצים, צריך להגדיל את הערך ב-1 לכל 5,000 קבצים, כלומר בממוצע כ-200 בייט לכל קובץ.כדי לאפשר למטמון הסוגים להשתמש בכמה זיכרון שצריך, מציינים ערך של -1.כדי להשבית את מטמון הסוגים, מציינים ערך של 0. |
4 |
הפקודה הבאה ב-Google Cloud CLI מגדירה את metadata-cache-ttl-secs ל-120 שניות ומגדילה את קיבולת המטמון של הנתונים הסטטיסטיים והסוגים ל-52 ו-7 מיגה-בייט, בהתאמה:
gcloud run jobs update JOB \ --add-volume mount-path=MOUNT_PATH,type=cloud-storage,bucket=BUCKET_NAME,mount-options="metadata-cache-ttl-secs=120;stat-cache-max-size-mb=52;type-cache-max-size-mb=7"
מחליפים את מה שכתוב בשדות הבאים:
- JOB: השם של המשימה.
- MOUNT_PATH: הנתיב היחסי שבו אתם מטמיעים את אמצעי האחסון. לדוגמה:
/cache. - BUCKET_NAME: שם הקטגוריה של Cloud Storage.
הפעלת רישום נתונים של ניפוי באגים
כברירת מחדל, Cloud Storage FUSE מתעד אירועים ברמה Info ומעלה. אפשר לשנות את הגדרות הרישום ביומן באמצעות כל אחת מרמות החומרה הבאות של היומן, שמופיעות בסדר עולה מהנמוכה ביותר לגבוהה ביותר:
tracedebuginfowarningerror- כדי להשבית את כל הרישום ביומן, מציינים את הערך
off.
כשמציינים רמת חומרה, Cloud Storage FUSE יוצר יומנים לאירועים עם רמת חומרה ששווה לרמת החומרה שצוינה או גבוהה ממנה. לדוגמה, כשמציינים את הרמה warning, Cloud Storage FUSE יוצר יומנים לאזהרות ולשגיאות.
הגדרת רמת החומרה של היומן לרמות גבוהות מ-info עלולה להשפיע על הביצועים וליצור כמות גדולה של נתוני רישום ביומן, ולכן מומלץ לעשות זאת רק לפי הצורך. כדי שתהיה תאימות ל-Cloud Logging, הפורמט של היומן הוא פורמט text, ופורמט json לא אפשרי.
שורת הפקודה הבאה מפעילה את רישום היומנים לניפוי באגים:
gcloud run jobs update JOB \ --add-volume mount-path=MOUNT_PATH,type=cloud-storage,bucket=BUCKET_NAME,mount-options="log-severity=debug"
מחליפים את מה שכתוב בשדות הבאים:
- JOB בשם של המשימה.
- BUCKET_NAME בשם של הקטגוריה ב-Cloud Storage.
- MOUNT_PATH עם הנתיב היחסי שבו אתם מטמיעים את אמצעי האחסון – לדוגמה, MOUNT_PATH.
/cache
השבתת ספריות מרומזות
כדי ש-Cloud Storage ייראה יותר כמו מערכת קבצים רגילה, Cloud Run מאפשר ספריות מרומזות כברירת מחדל כשמטעינים קטגוריה של Cloud Storage. אפשר להשבית ספריות מרומזות באמצעות אפשרות ההרכבה implicit-dirs. השבתה של ספריות מרומזות יכולה לשפר את הביצועים ואת העלות, אבל יש לכך השלכות על התאימות.
התכונה 'ספריות משתמעות' מאפשרת ל-Cloud Run לזהות קבצים קיימים ב-Cloud Storage שהשמות שלהם מחקים מבנה של ספריות, כמו /mydir/myfile.txt. אם משביתים את הספריות המרומזות, Cloud Run לא יכול לרשום או לקרוא קבצים כאלה.
השבתה של ספריות מרומזות מפחיתה את מספר הבקשות ל-Cloud Storage, מה שיכול לשפר את הביצועים והעלות של האפליקציה. מידע נוסף זמין במאמר בנושא קבצים וספריות ב-Cloud Storage FUSE.
שורת הפקודה הבאה משביתה ספריות משתמעות:
gcloud run jobs update JOB \ --add-volume mount-path=MOUNT_PATH,type=cloud-storage,bucket=BUCKET_NAME,mount-options="implicit-dirs=false"
מחליפים את מה שכתוב בשדות הבאים:
- JOB: השם של המשימה.
- BUCKET_NAME: שם הקטגוריה של Cloud Storage.
- MOUNT_PATH: הנתיב היחסי שבו אתם מטמיעים את אמצעי האחסון. לדוגמה,
/cache.
טעינת ספרייה ספציפית בתוך קטגוריה של Cloud Storage
כברירת מחדל, Cloud Run טוען את כל הקטגוריה ב-Cloud Storage, וכך מאפשר למשימות של Cloud Run גישה לכל התוכן שלה. במקרים מסוימים, יכול להיות שתרצו לטעון רק ספרייה ספציפית. לדוגמה, אם הקטגוריה מכילה מספר גדול של קבצים, טעינה של ספרייה ספציפית יכולה לשפר את הביצועים.
אפשר גם להשתמש בזה למטרות בידוד, כשצריך שלמשימות שונות תהיה גישה לספריות שונות בדלי האחסון.
שורת הפקודה הבאה מציינת את הספרייה לטעינה:
gcloud run jobs update JOB \ --add-volume mount-path=MOUNT_PATH,type=cloud-storage,bucket=BUCKET_NAME,mount-options="only-dir=images"
מחליפים את מה שכתוב בשדות הבאים:
- JOB: השם של המשימה.
- BUCKET_NAME: שם הקטגוריה של Cloud Storage.
- MOUNT_PATH: הנתיב היחסי שבו אתם מטמיעים את אמצעי האחסון. לדוגמה,
/cache.
הגדרת עוצמת הקול UID ו-GID
משתמשים באפשרויות ההרכבה uid ו-gid כדי לשנות את מזהה המשתמש ומזהה הקבוצה של אמצעי האחסון. האפשרות הזו שימושית אם רוצים להגדיר בעלות על הקובץ למשתמש או לקבוצה ספציפיים שתואמים לזהות של קונטיינר אחד או יותר שפועלים. כברירת מחדל, הכרכים הם בבעלות של root.
שורת הפקודה הבאה מגדירה את uid ואת gid:
gcloud run jobs update JOB \ --add-volume mount-path=MOUNT_PATH,type=cloud-storage,bucket=BUCKET_NAME,mount-options="uid=UID;gid=GID"
מחליפים את מה שכתוב בשדות הבאים:
- JOB: השם של המשימה.
- MOUNT_PATH: הנתיב היחסי שבו אתם מטמיעים את אמצעי האחסון. לדוגמה,
/cache. - BUCKET_NAME: שם הקטגוריה של Cloud Storage.
- UID: מזהה המשתמש שאליו יצורף אמצעי האחסון.
- GID: מזהה הקבוצה שדרכה יותקן אמצעי האחסון.
הגדרת אפשרויות אחרות להעלאה
זו רשימה מלאה של כל אפשרויות ההרכבה שנתמכות ב-Cloud Run.
הארגון שלי
implicit-dirsonly-dirrename-dir-limit
ניפוי באגים
debug_fuse_errorsdebug_fusedebug_gcsdebug-invariantsdebug_mutex
מטמון
stat-cache-capacitystat-cache-ttltype-cache-ttlenable-nonexistent-type-cache
הרשאות
uidgidfile-modedir-mode
אחר
billing-projectclient-protocolexperimental-enable-json-readexperimental-opentelemetry-collector-addresshttp-client-timeoutlimit-bytes-per-seclimit-ops-per-secmax-conns-per-hostmax-idle-conns-per-hostmax-retry-sleep-oretry-multipliersequential-read-size-mbstackdriver-export-interval
לתיעוד המלא של אפשרויות ההרכבה הנתמכות, אפשר לעיין במאמר אפשרויות ההרכבה של שורת הפקודה Cloud Storage FUSE.
הצגת ההגדרות של טעינת אמצעי אחסון
אפשר לראות את ההגדרות הנוכחיות של טעינת אמצעי האחסון באמצעות מסוף Google Cloud או Google Cloud CLI.
המסוף
במסוף Google Cloud , נכנסים לדף Cloud Run jobs:
לוחצים על המשרה שמעניינת אתכם כדי לפתוח את הדף פרטי המשרה.
לוחצים על הצגה ועריכה של הגדרות העבודה.
לוחצים על הכרטיסייה Volumes (נפחים).
מאתרים את הכרכים ואת הפרטים.
gcloud
משתמשים בפקודה הבאה:
gcloud run jobs describe JOB_NAME
מאתרים את ההגדרה volume mounts (נקודות חיבור של אמצעי אחסון) בהגדרה שמוחזרת.
אופטימיזציה של ביצועי רוחב הפס ברשת של Cloud Storage FUSE
כדי לשפר את ביצועי הקריאה והכתיבה, כדאי לחבר את משימת Cloud Run לרשת VPC באמצעות Direct VPC, ולהעביר את כל התעבורה היוצאת דרך רשת ה-VPC. אפשר לעשות את זה באחת מהדרכים הבאות:
- מפעילים את הגישה הפרטית ל-Google, ומוודאים שהפרמטר
vpc-egressמוגדר לערךall-traffic. - אפשר להשתמש באחת מהאפשרויות שמתוארות בדף השיטות המומלצות בנושא רשת, בקטע תנועה פנימית ל-Google API.
זמן ההפעלה של קונטיינרים וטעינות של Cloud Storage FUSE
השימוש ב-Cloud Storage FUSE עלול להאריך מעט את זמן ההפעלה הקרה של קונטיינר Cloud Run, כי Cloud Run מתחיל את טעינת אמצעי האחסון לפני שהוא מתחיל את הקונטיינרים. הקונטיינר יופעל רק אם Cloud Storage FUSE יוטען בהצלחה.
שימו לב ש-Cloud Storage FUSE מטעין נפח אחסון רק אחרי שהוא יוצר חיבור ל-Cloud Storage. עיכובים ברשת יכולים להשפיע על זמן ההפעלה של מאגר התגים. בהתאם לכך, אם ניסיון החיבור נכשל, Cloud Storage FUSE לא יצליח לבצע mount והמשימה של Cloud Run לא תתחיל. בנוסף, אם הטעינה של Cloud Storage FUSE נמשכת יותר מ-30 שניות, המשימה של Cloud Run תיכשל כי ל-Cloud Run יש פסק זמן כולל של 30 שניות לביצוע כל הטעינות.
מאפייני הביצועים של Cloud Storage FUSE
אם מגדירים שני אמצעי אחסון, שכל אחד מהם מצביע על קטגוריה אחרת, יופעלו שני תהליכים של Cloud Storage FUSE. ההתקנות והתהליכים מתבצעים במקביל.
הפעולות באמצעות Cloud Storage FUSE מושפעות מרוחב הפס ברשת, כי Cloud Storage FUSE מתקשר עם Cloud Storage באמצעות Cloud Storage API. חלק מהפעולות, כמו הצגת התוכן של מאגר, עשויות להיות איטיות אם רוחב הפס של הרשת נמוך. באופן דומה, קריאה של קובץ גדול יכולה לקחת זמן כי היא מוגבלת גם על ידי רוחב הפס של הרשת.
כשכותבים לקטגוריה, Cloud Storage FUSE מעביר את האובייקט באופן מלא לזיכרון. המשמעות היא שכתיבת קבצים גדולים מוגבלת על ידי כמות הזיכרון שזמינה למופע של המאגר (מגבלת הזיכרון המקסימלית של המאגר היא 32GiB).
הכתיבה מועברת לקטגוריה רק כשמבצעים פעולת close או fsync: האובייקט המלא מועלה לקטגוריה. המקרה היחיד שבו אובייקט לא מועלה מחדש במלואו לקטגוריה הוא קובץ עם תוכן שנוסף לו, כשהקובץ הוא בנפח 2MiB או יותר.
מידע נוסף זמין במקורות המידע הבאים:
ניקוי והסרה של נפחים ונקודות חיבור של נפחים
אפשר לנקות את כל אמצעי האחסון והחיבורים, או להסיר אמצעי אחסון וחיבורים ספציפיים.
ניקוי כל אמצעי האחסון והחיבורים שלהם
כדי לנקות את כל אמצעי האחסון והטעינות של אמצעי האחסון מהעבודה שלכם עם קונטיינר יחיד, מריצים את הפקודה הבאה:
gcloud run jobs update JOB \ --clear-volumes --clear-volume-mounts
אם יש לכם כמה מאגרי תגים, אתם יכולים לפעול לפי המוסכמות של CLI של sidecars כדי לנקות את הכרכים והחיבורים של הכרכים:
gcloud run jobs update JOB \ --clear-volumes \ --clear-volume-mounts \ --container=container1 \ --clear-volumes \ -–clear-volume-mounts \ --container=container2 \ --clear-volumes \ -–clear-volume-mounts
הסרה של נפחים בודדים והצמדות של נפחים
כדי להסיר נפח אחסון, צריך גם להסיר את כל הנפחים המחוברים שמשתמשים בנפח הזה.
כדי להסיר אמצעי אחסון בודדים או נקודות חיבור של אמצעי אחסון, משתמשים בדגלים remove-volume ו-remove-volume-mount:
gcloud run jobs update JOB \ --remove-volume VOLUME_NAME --container=container1 \ --remove-volume-mount MOUNT_PATH \ --container=container2 \ --remove-volume-mount MOUNT_PATH