במדריך הזה נסביר איך לשפר את הביצועים של מנהל ההתקן ה-CSI של Cloud Storage FUSE ב-Google Kubernetes Engine (GKE). כדי לקבל מידע על דרך פשוטה ואוטומטית לאופטימיזציה של הביצועים של Cloud Storage FUSE לעומסי עבודה של AI/ML, ראו אופטימיזציה אוטומטית של הביצועים באמצעות פרופילים של Cloud Storage FUSE. השלבים הידניים במאמר הזה מיועדים למשתמשים מתקדמים, או כדי לתת מענה לצרכים מותאמים אישית שלא נכללים בפרופילים.
Cloud Storage FUSE מציע גמישות ומדרגיות, אבל כדי להשיג ביצועים אופטימליים חשוב לבצע הגדרה וכוונון מדויקים. הביצועים של Cloud Storage FUSE יכולים להיות שונים ממערכת קבצים של POSIX מבחינת זמן האחזור, התפוקה והעקביות. המטרה של כוונון היא לצמצם את התקורה של פעולות מטא-נתונים ולמקסם את היעילות של גישה לנתונים. אם אתם מריצים אפליקציות AI/ML שצורכות נתונים בקטגוריות של Cloud Storage, כוונון של מנהל ההתקן CSI יכול להוביל לזמני אימון והסקה מהירים יותר של אפליקציות ה-AI/ML.
המדריך הזה מיועד למפתחים ולמהנדסי למידת מכונה (ML) שרוצים לשפר את הביצועים של האפליקציות שלהם, שגשת לנתונים שמאוחסנים בקטגוריות של Cloud Storage.
לפני שקוראים את הדף הזה, חשוב לוודא שמכירים את העקרונות הבסיסיים של Cloud Storage, Kubernetes ומנהל התקן ה-CSI של Cloud Storage FUSE. חשוב גם לבדוק את דרישות הגרסה של GKE לתכונות ספציפיות שרוצים להשתמש בהן.
הגדרת אפשרויות ההרכבה
מנהל התקן ה-CSI של Cloud Storage FUSE תומך באפשרויות טעינה כדי להגדיר איך קטגוריות של Cloud Storage נטענות במערכת הקבצים המקומית.
אפשר לציין אפשרויות הרכבה בדרכים הבאות, בהתאם לסוג הנפח שבו אתם משתמשים:
נפח אחסון זמני של CSI
אם אתם משתמשים בכרכים זמניים של CSI, אתם צריכים לציין את אפשרויות ההרכבה בשדה spec.volumes[n].csi.volumeAttributes.mountOptions של מניפסט ה-Pod.
צריך לציין את אפשרויות הטעינה כמחרוזת, עם סימונים שמופרדים בפסיקים וללא רווחים. לדוגמה:
mountOptions: "implicit-dirs,file-cache:enable-parallel-downloads:true,file-cache:download-chunk-size-mb:3"
נפח אחסון מתמיד
אם אתם משתמשים בנפחי אחסון מתמידים, צריך לציין את אפשרויות ההרכבה בשדה spec.mountOptions במניפסט PersistentVolume.
צריך לציין את אפשרויות ההרכבה כרשימה. לדוגמה:
mountOptions:
- implicit-dirs
- file-cache:enable-parallel-downloads:true
- file-cache:download-chunk-size-mb:3
שיקולים לגבי טעינה
כשמגדירים נקודות הרכבה באמצעות מנהל התקן CSI, כדאי לקחת בחשבון את הנקודות הבאות:
שיקולים כלליים
- הדגלים הבאים אסורים:
app-name,temp-dir,foreground,log-file,log-format,key-file,token-urlו-reuse-token-from-url. - כברירת מחדל, Cloud Storage FUSE לא מציג ספריות מרומזות.
- אם רוצים לטעון רק ספרייה בקטגוריה ולא את כל הקטגוריה, צריך להעביר את הנתיב היחסי של הספרייה באמצעות הדגל
only-dir=relative/path/to/the/bucket/root.
אבטחה והרשאות
- אם אתם משתמשים בהקשר אבטחה עבור ה-Pod או הקונטיינר, או אם קובץ האימג' של הקונטיינר משתמש בקבוצה או במשתמש שאינם root, אתם צריכים להגדיר את דגלי הטעינה
uidו-gid. צריך גם להשתמש בדגלי הטעינהfile-modeו-dir-modeכדי להגדיר את ההרשאות של מערכת הקבצים. שימו לב שאי אפשר להריץ פקודותchmod,chownאוchgrpבמערכת קבצים של Cloud Storage FUSE, לכן צריך להשתמש בדגלי ההרכבהuid,gid,file-modeו-dir-modeכדי לקבל גישה למשתמש או לקבוצה שהם לא משתמש או קבוצה עם הרשאות root.
אפשרויות טעינה של ליבת Linux
- אם אתם צריכים להגדיר את אפשרויות הטעינה של ליבת Linux, אתם יכולים להעביר את האפשרויות באמצעות הדגל
o. לדוגמה, אם אתם לא רוצים לאפשר הפעלה ישירה של קבצים בינאריים במערכת הקבצים המצורפת, צריך להגדיר את הדגלo=noexec. לכל אפשרות צריך להשתמש בדגל נפרד, לדוגמה,o=noexec,o=noatime. מותר להשתמש רק באפשרויות הבאות:exec,noexec,atime,noatime,sync,asyncו-dirsync.
הגדרת שמירה במטמון
בקטע הזה מוסבר על אפשרויות השמירה במטמון שזמינות עם מנהל ההתקן Cloud Storage FUSE CSI כדי לשפר את הביצועים.
שמירת קבצים במטמון
אפשר להשתמש במנהל התקן ה-CSI של Cloud Storage FUSE עם שמירת קבצים במטמון כדי לשפר את ביצועי הקריאה של אפליקציות שמטפלות בקבצים קטנים מקטגוריות של Cloud Storage. תכונת מטמון הקבצים של Cloud Storage FUSE היא מטמון קריאה מבוסס-לקוח, שמאפשר לשרת קריאות חוזרות של קבצים מהר יותר מאחסון המטמון שתבחרו.
אתם יכולים לבחור מתוך מגוון אפשרויות אחסון למטמון הקריאה, כולל Local SSD, אחסון בלוקים עמיד כמו Google Cloud Hyperdisk או Persistent Disk, ודיסק RAM (זיכרון), בהתאם לצרכים שלכם מבחינת מחיר וביצועים.
הפעלה של שמירת קבצים במטמון ושימוש בה
כברירת מחדל, תכונת שמירת הקבצים במטמון מושבתת ב-GKE. כדי להפעיל שמירה במטמון של קבצים באמצעות מנהל התקן ה-CSI של Cloud Storage FUSE, צריך להביע הסכמה.
כדי להפעיל את שמירת הקבצים במטמון ולשלוט בה, מגדירים את מאפיין עוצמת הקול fileCacheCapacity או משתמשים באפשרות ההרכבה file-cache:max-size-mb.
כברירת מחדל, GKE משתמש בנפח emptyDir לשמירת קבצים במטמון של Cloud Storage FUSE, שמגובה על ידי האחסון הזמני שהוגדר בצומת. יכול להיות שזה דיסק האתחול שמצורף לצומת או SSD מקומי בצומת. אם מפעילים Local SSD בצומת, GKE משתמש ב-Local SSD כדי לגבות את אמצעי האחסון emptyDir.
אתם יכולים להגדיר נפח מטמון קריאה מותאם אישית עבור קונטיינר ה-sidecar כדי להחליף את נפח ברירת המחדל emptyDir של מטמון הקבצים בפעולות קריאה.
מידע נוסף על שיטות מומלצות לשמירת קבצים במטמון זמין במאמר בנושא הביצועים של Cloud Storage FUSE.
בחירת האחסון לגיבוי של מטמון הקבצים
כדי לבחור את האחסון לגיבוי של מטמון הקבצים, כדאי לעיין בשיקולים הבאים:
למשפחות של מכונות וירטואליות עם GPU ומעבד שתומכות ב-Local SSD (לדוגמה, מכונות וירטואליות מסוג A3), מומלץ להשתמש ב-Local SSD.
- במכונות וירטואליות מסוג A3+, GKE מגדיר באופן אוטומטי SSD מקומי לשימוש ב-Pods.
- אם משפחת המכונות הווירטואליות לא תומכת ב-SSD מקומי, GKE משתמש בדיסק האתחול לצורך שמירת נתונים במטמון. סוג הכונן שמוגדר כברירת מחדל לכונן האתחול ב-GKE הוא
pd-balanced. אם משפחת המכונות הווירטואליות תומכת ב-Local SSD אבל האחסון הזמני ב-Local SSD לא מופעל כברירת מחדל, אפשר להפעיל Local SSD במאגר הצמתים. השינוי הזה חל על מכונות מהדור הראשון והשני, כמו מכונות N1 ו-N2. מידע נוסף זמין במאמר בנושא יצירת אשכול עם SSD מקומי.
כדי לבדוק אם ב-Local SSD מופעל אחסון זמני בצומת, מריצים את הפקודה הבאה:
kubectl describe node <code><var>NODE_NAME</var></code> | grep "cloud.google.com/gke-ephemeral-storage-local-ssd"
במשפחות של מכונות וירטואליות של TPU, במיוחד v6 ומעלה, מומלץ להשתמש ב-RAM כמטמון קבצים כדי להשיג את הביצועים הטובים ביותר, כי למופעים של המכונות הווירטואליות האלה יש RAM גדול יותר.
- כשמשתמשים ב-RAM, חשוב לשים לב לשגיאות של חוסר זיכרון (OOM), כי הן גורמות לשיבושים ב-Pod. Cloud Storage FUSE צורך זיכרון, ולכן הגדרת מטמון קבצים לצריכת קונטיינר ה-sidecar עלולה לגרום לשגיאות OOM. כדי למנוע תרחישים כאלה, צריך לשנות את הערך בשדה
file-cache:max-size-mbשל הגדרת מטמון הקבצים לערך קטן יותר. - למשפחות אחרות של TPU, מומלץ להשתמש ב-
pd-balancedאו ב-pd-ssd. סוג הדיסק שמוגדר כברירת מחדל לדיסק האתחול ב-GKE הואpd-balanced.
- כשמשתמשים ב-RAM, חשוב לשים לב לשגיאות של חוסר זיכרון (OOM), כי הן גורמות לשיבושים ב-Pod. Cloud Storage FUSE צורך זיכרון, ולכן הגדרת מטמון קבצים לצריכת קונטיינר ה-sidecar עלולה לגרום לשגיאות OOM. כדי למנוע תרחישים כאלה, צריך לשנות את הערך בשדה
לא מומלץ להשתמש בדיסק האתחול לאחסון במטמון, כי זה עלול להוביל לירידה בביצועים ולסיום לא צפוי של הפעולה. במקום זאת, כדאי להשתמש ב-PersistentVolume שמגובה על ידי אחסון בלוקים עמיד.
שימוש במטמון קבצים שמבוסס על דיסק RAM
אם אתם משתמשים במכונת TPU וירטואלית עם RAM גדול מספיק, אתם יכולים להשתמש בדיסק RAM לאחסון במטמון של קבצים או להורדה מקבילה כדי לצמצם את התקורה של השימוש בדיסק אתחול.
כדי להשתמש בדיסק RAM עם מנהל התקן ה-CSI של Cloud Storage FUSE, מוסיפים את הקוד הבא למניפסט:
volumes:
- name: gke-gcsfuse-cache
emptyDir:
medium: Memory
מטמון נתונים סטטיסטיים
מנהל התקן ה-CSI של Cloud Storage FUSE משפר את הביצועים באמצעות שמירת מטא-נתונים של קבצים במטמון, כמו גודל ושעת שינוי. דרייבר ה-CSI מפעיל את מטמון הסטטוס הזה כברירת מחדל, ומקטין את זמן האחזור על ידי אחסון מידע באופן מקומי במקום לבקש אותו שוב ושוב מ-Cloud Storage. אתם יכולים להגדיר את הגודל המקסימלי שלו (ברירת המחדל היא 32 MB) ואת משך הזמן שהנתונים יישארו במטמון (ברירת המחדל היא 60 שניות). אפשר לצמצם את מספר הקריאות ל-API של Cloud Storage באמצעות כוונון עדין של מטמון המטא-נתונים, וכך לשפר את הביצועים והיעילות של האפליקציה על ידי צמצום תעבורת הרשת והחביון.
מידע נוסף על שיטות מומלצות לשמירה במטמון של נתוני stat זמין במאמר סקירה כללית על שמירה במטמון ב-Cloud Storage FUSE.
שימוש באחזור מראש של מטא-נתונים כדי לאכלס מראש את מטמון המטא-נתונים
התכונה 'טעינה מראש של מטא-נתונים' מאפשרת ל-Cloud Storage FUSE CSI driver לטעון באופן יזום מטא-נתונים רלוונטיים לגבי האובייקטים בקטגוריה של Cloud Storage במטמון של Cloud Storage FUSE. הגישה הזו מצמצמת את הקריאות ל-Cloud Storage, והיא מועילה במיוחד לאפליקציות שמשתמשות במערכי נתונים גדולים עם הרבה קבצים, כמו עומסי עבודה (workloads) של אימון AI/ML.
כדי להשתמש בתכונה הזו, צריך GKE מגרסה 1.32.1-gke.1357001 ואילך. התכונה הזו לא נתמכת בחיבור דינמי, שבו מציינים קו תחתון (_) כדי לחבר את כל הקטגוריות שלחשבון שירות Kubernetes יש גישה אליהן. אם משתמשים בהרכבה דינמית, לא מתבצעת אחזור מראש של מטא נתונים.
כדי לראות שיפורים בביצועים כתוצאה מאחזור מראש של מטא-נתונים, צריך להגדיר את הערך של זמן החיים (TTL) של פריטים במטמון של המטא-נתונים ללא הגבלה. בדרך כלל, הגדרת TTL מונעת את ההתיישנות של תוכן שנשמר במטמון. כשמגדירים את ה-TTL ללא הגבלה, צריך לנקוט אמצעי זהירות כדי שלא לשנות את התוכן של הקטגוריה מחוץ לפס (כלומר, לא לאפשר לעומס עבודה או לגורם אחר לשנות את עומס העבודה). שינויים מחוץ לפס לא מוצגים באופן מקומי ועלולים לגרום לבעיות עקביות.
כדי להפעיל את האחזור המקדים של המטא-נתונים, מבצעים את שינויי ההגדרות הבאים. מומלץ להפעיל את התכונה הזו בכרכים שקוראים אותם הרבה.
- מגדירים את מאפיין עוצמת הקול
gcsfuseMetadataPrefetchOnMount: true. - מעדכנים את אפשרויות ההרכבה הבאות:
-
metadata-cache:stat-cache-max-size-mb:-1כדי לבטל את המגבלה על קיבולת המטמון של נתוני ה-stat. -
metadata-cache:type-cache-max-size-mb:-1כדי לבטל את ההגדרה של מגבלת הקיבולת של מטמון הסוג. -
file-system:kernel-list-cache-ttl-secs:-1כדי למנוע את התפוגה של פריטים במטמון של רשימת ליבות. -
metadata-cache:ttl-secs:-1כדי למנוע את התפוגה של פריטי מטא-נתונים שנשמרו במטמון.
-
- כדי למנוע שיבושים בעומס העבודה, מומלץ להגדיל את מגבלת הזיכרון של
gke-gcsfuse-metadata-prefetchsidecar.- כדי להגדיל את המגבלות, צריך להגדיר את הערך של הערת ה-Pod
gke-gcsfuse/metadata-prefetch-memory-limitל-"512Mi"או לערך גבוה יותר. מידע נוסף זמין במאמר הגדרת משאבים של קונטיינר sidecar. - אפשרות אחרת היא לבטל את הגדרת מגבלת הזיכרון על ידי הגדרת הערת ה-Pod
gke-gcsfuse/metadata-prefetch-memory-limitל-"0"(האפשרות הזו נתמכת רק באשכולות רגילים).
- כדי להגדיל את המגבלות, צריך להגדיר את הערך של הערת ה-Pod
לדוגמה, אפשר לעיין בדוגמת הקוד במאמר שיפור הביצועים של קריאת קבצים גדולים באמצעות הורדה מקבילה.
מטמון רשימות
כדי לזרז את הרישום של אפליקציות בספרייה, אפשר להפעיל שמירת רשימות במטמון. התכונה הזו מאחסנת את רשימות הספרייה בזיכרון, כדי שאפשר יהיה לטפל בבקשות חוזרות מהר יותר. מטמון הרשימה מושבת כברירת מחדל. כדי להפעיל אותו, צריך להגדיר את הפרמטר kernel-list-cache-ttl-secs באפשרויות ההרכבה. ההגדרה הזו קובעת את משך הזמן שבו כרטיסי המוצר נשמרים במטמון.
שיפור קריאות רציפות של קבצים גדולים באמצעות קריאה עם מאגר
קריאות עם מאגר זמני יכולות לשפר את ביצועי הקריאה הסדרתית של קבצים גדולים, על ידי אחזור מראש של חלקים מאובייקט Cloud Storage באופן אסינכרוני למאגר זמני בזיכרון. המאגר מאפשר להציג קריאות עוקבות מהמאגר במקום לדרוש קריאות רשת.
לפני שמפעילים קריאות עם מאגר זמני, כדאי לשים לב לנקודות הבאות:
קריאות עם מאגר זמני לא תואמות לשמירת קבצים במטמון. אם גם קריאות עם אחסון זמני וגם אחסון במטמון של קבצים מופעלים, אחסון במטמון של קבצים מקבל עדיפות והמערכת מתעלמת מקריאות עם אחסון זמני.
קריאות עם מאגר זמני יכולות לצרוך הרבה זיכרון ומשאבי מחשוב.
כדי להפעיל קריאות עם מאגר זמני, מגדירים את ההגדרה הנוספת הזו במניפסט באמצעות אפשרויות הטעינה:
enable-buffered-read.
מומלץ להשתמש באפשרויות ההרכבה:
read-global-max-blocks כדי לציין את המספר המקסימלי של בלוקים שזמינים לקריאות עם מאגר זמני בכל ידיות הקבצים.
שיפור ביצועי קריאה של קבצים גדולים באמצעות הורדה מקבילה
אתם יכולים להשתמש בהורדה מקבילה של Cloud Storage FUSE כדי להאיץ את הקריאה של קבצים גדולים מ-Cloud Storage להורדות מרובות-שרשורים. הורדה מקבילה של Cloud Storage FUSE יכולה להיות שימושית במיוחד בתרחישים של מודלים שמשרתים בקשות עם קריאות בגודל של יותר מ-1GB.
כדי להשתמש בהורדות מקבילות, צריך להפעיל את מטמון הקבצים. החל מגרסה GKE 1.32.0-gke.1795000, Cloud Storage FUSE אוכף את הדרישה הזו באופן מחמיר ומציג את השגיאה הבאה אם מנסים להשתמש בהורדות מקבילות ללא מטמון הקבצים, מה שמונע את הפעלת ה-Pod: MountVolume.SetUp failed for volume "gcs-fuse-csi-pv" : rpc error: code = Internal desc = gcsfuse failed with error: Error: error while parsing config: error parsing parallel download config: file cache should be enabled for parallel download support.
דוגמאות נפוצות:
- הצגת מודל, שבה נדרש מאגר גדול של אחזור מראש כדי להאיץ את הורדת המודל במהלך אתחול המופע.
- שחזורים של נקודות ביקורת, שבהם נדרש מטמון נתונים לקריאה בלבד כדי לשפר את הגישה החד-פעמית לכמה קבצים גדולים.
אפשר להשתמש בהורדה מקבילה לאפליקציות שמבצעות קריאות של קבצים גדולים בשרשור יחיד. יכול להיות שהביצועים של אפליקציות עם מקביליות קריאה גבוהה (שימוש ביותר משמונה שרשורים) יהיו נמוכים יותר עם התכונה הזו.
כדי להשתמש בהורדה מקבילה עם מנהל התקן ה-CSI של Cloud Storage FUSE, פועלים לפי השלבים הבאים:
יוצרים אשכול עם הפעלת שמירת קבצים במטמון, כמו שמתואר במאמר הפעלה של שמירת קבצים במטמון ושימוש בה.
כדי להפעיל הורדה מקבילה, מגדירים את ההגדרות הנוספות האלה במניפסט באמצעות אפשרויות ההרכבה:
(אופציונלי) אם צריך, אפשר לשנות את מאפייני עוצמת הקול הבאים:
-
file-cache:cache-file-for-range-readלהקראה אקראית או חלקית. -
metadata-cache:stat-cache-max-size-mbו-metadata-cache:type-cache-max-size-mbלאימון עומסי עבודה.
-
צמצום צריכת המכסה מבדיקות בקרת גישה
כברירת מחדל, מנהל ההתקן של CSI מבצע בדיקות של בקרת גישה כדי לוודא שלחשבון השירות של ה-Pod יש גישה לקטגוריות של Cloud Storage. התוצאה היא תקורה נוספת בצורה של קריאות ל-Kubernetes Service API, ל-Security Token Service ול-IAM. החל מגרסה GKE 1.29.9-gke.1251000, אפשר להשתמש במאפיין volume skipCSIBucketAccessCheck כדי לדלג על בדיקות מיותרות כאלה ולצמצם את ניצול המכסה.
דוגמה להצגת מסקנות
בדוגמה הבאה אפשר לראות איך מפעילים הורדה מקבילה להסקת מסקנות:
יוצרים מניפסט של PersistentVolume ו-PersistentVolumeClaim עם המפרט הבא:
apiVersion: v1 kind: PersistentVolume metadata: name: serving-bucket-pv spec: accessModes: - ReadWriteMany capacity: storage: 64Gi persistentVolumeReclaimPolicy: Retain storageClassName: example-storage-class claimRef: namespace: NAMESPACE name: serving-bucket-pvc mountOptions: - implicit-dirs #avoid if list cache enabled and doing metadata prefetch - metadata-cache:ttl-secs:-1 - metadata-cache:stat-cache-max-size-mb:-1 - metadata-cache:type-cache-max-size-mb:-1 - file-cache:max-size-mb:-1 - file-cache:cache-file-for-range-read:true - file-system:kernel-list-cache-ttl-secs:-1 - file-cache:enable-parallel-downloads:true - read_ahead_kb=1024 csi: driver: gcsfuse.csi.storage.gke.io volumeHandle: BUCKET_NAME volumeAttributes: skipCSIBucketAccessCheck: "true" gcsfuseMetadataPrefetchOnMount: "true" --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: serving-bucket-pvc namespace: NAMESPACE spec: accessModes: - ReadWriteMany resources: requests: storage: 64Gi volumeName: serving-bucket-pv storageClassName: example-storage-classמחליפים את הערכים הבאים:
-
NAMESPACE: מרחב השמות של Kubernetes שבו רוצים לפרוס את ה-Pod. -
BUCKET_NAME: שם הקטגוריה ב-Cloud Storage שציינתם כשקבעתם את הגישה לקטגוריות ב-Cloud Storage. אפשר לציין קו תחתון (_) כדי לטעון את כל הקטגוריות שחשבון השירות של Kubernetes יכול לגשת אליהן. מידע נוסף זמין במאמר Dynamic mounting במאמרי העזרה של Cloud Storage FUSE.
-
מחילים את המניפסט על האשכול:
kubectl apply -f PV_FILE_PATHמחליפים את
PV_FILE_PATHבנתיב לקובץ ה-YAML.יוצרים מניפסט של Pod עם המפרט הבא כדי להשתמש ב-PersistentVolumeClaim, בהתאם לסוג מטמון הקבצים שבו אתם משתמשים: מטמון קבצים שמגובה על ידי SSD מקומי או מטמון קבצים שמגובה על ידי דיסק RAM:
אחסון SSD מקומי
apiVersion: v1 kind: Pod metadata: name: gcs-fuse-csi-example-pod namespace: NAMESPACE annotations: gke-gcsfuse/volumes: "true" gke-gcsfuse/cpu-limit: "0" gke-gcsfuse/memory-limit: "0" gke-gcsfuse/ephemeral-storage-limit: "0" spec: containers: # Your workload container spec ... volumeMounts: - name: serving-bucket-vol mountPath: /serving-data readOnly: true serviceAccountName: KSA_NAME volumes: - name: serving-bucket-vol persistentVolumeClaim: claimName: serving-bucket-pvcדיסק RAM
apiVersion: v1 kind: Pod metadata: name: gcs-fuse-csi-example-pod namespace: NAMESPACE annotations: gke-gcsfuse/volumes: "true" gke-gcsfuse/cpu-limit: "0" gke-gcsfuse/memory-limit: "0" gke-gcsfuse/ephemeral-storage-limit: "0" spec: containers: # Your workload container spec ... volumeMounts: - name: serving-bucket-vol mountPath: /serving-data readOnly: true serviceAccountName: KSA_NAME volumes: - name: gke-gcsfuse-cache # gcsfuse file cache backed by RAM Disk emptyDir: medium: Memory - name: serving-bucket-vol persistentVolumeClaim: claimName: serving-bucket-pvcמחילים את המניפסט על האשכול:
kubectl apply -f POD_FILE_PATHמחליפים את
POD_FILE_PATHבנתיב לקובץ ה-YAML.
אופטימיזציה של חיפושי DNS באמצעות NodeLocal DNSCache ב-GKE
בגרסאות GKE מוקדמות יותר מ-1.34.1-gke.3899000, אם משתמשים ב-Cloud Storage FUSE עם פרוטוקול HTTP/1.1, יצירה תכופה של חיבורים חדשים עלולה להוביל לנפח גדול של חיפושי DNS. התנהגות כזו עלולה להשפיע על הביצועים, במיוחד בסביבות GKE.
כדי לבצע אופטימיזציה של שאילתות DNS ולצמצם את זמן האחזור בגרסאות קודמות של GKE, כדאי לפרוס NodeLocal DNSCache.
Standard Pods: פריסת NodeLocal DNSCache מייעלת באופן אוטומטי את חיפושי ה-DNS עבור רוב ה-Pods הרגילים באשכול.
Host network Pods: כדי להשתמש ב-NodeLocal DNSCache, צריך לבצע שינוי נוסף בהגדרה של Pods שמשתמשים בהגדרה
hostNetwork: true. צריך לבטל את ברירת המחדל שלdnsPolicyבמפרט של ה-pod ולהגדיר את הערךClusterFirstWithHostNet.
בדרך כלל אין צורך במטמון DNS נפרד בתרחישים הבאים, כי המערכת מטפלת במטמון באופן פנימי:
מכונות וירטואליות ב-Compute Engine: ליבת מערכת ההפעלה של המכונה הווירטואלית בדרך כלל שומרת במטמון את בדיקות ה-DNS בצורה יעילה, ולכן אין צורך בשכבת מטמון נוספת.
GKE 1.34.1-gke.3899000 ואילך: בגרסאות האלה של Cloud Storage FUSE יש מטמון DNS מובנה, שפותר את הבעיה של חיפושים בתדירות גבוהה באופן פנימי.
הגדרת מאפייני עוצמת הקול
מאפייני נפח מאפשרים להגדיר התנהגות ספציפית של מנהל התקן ה-CSI של Cloud Storage FUSE.
מנהל התקן ה-CSI של Cloud Storage FUSE לא מאפשר לציין ישירות את קובץ ההגדרות של Cloud Storage FUSE. אפשר להגדיר חלק מהשדות בקובץ ההגדרות באמצעות מאפייני הנפח של Cloud Storage FUSE CSI. הדרייבר של CSI מטפל בתרגום של ערכי המאפיין volume לשדות בקובץ ההגדרות.
רשימה מלאה של מאפייני עוצמת הקול הנתמכים זמינה בחומר העזר בנושא מאפייני עוצמת הקול.
אפשר לציין את מאפייני עוצמת הקול בדרכים הבאות:
- בשדה
spec.csi.volumeAttributesבמניפסט של PersistentVolume, אם אתם משתמשים בנפחי אחסון מתמיד. - בשדה
spec.volumes[n].csi.volumeAttributes, אם משתמשים בכרכים זמניים של CSI.
בקובץ המניפסט, אפשר לציין את מאפייני עוצמת הקול כצמדי מפתח/ערך. לדוגמה:
volumeAttributes:
mountOptions: "implicit-dirs"
fileCacheCapacity: "-1"
gcsfuseLoggingSeverity: warning
מדדים של Cloud Storage FUSE
מדדי Cloud Storage FUSE הבאים זמינים עכשיו דרך GKE Monitoring API. פרטים על מדדים של Cloud Storage FUSE, כמו תוויות, סוג ויחידה, מופיעים במאמר מדדי מערכת של GKE. המדדים האלה זמינים לכל Pod שמשתמש ב-Cloud Storage FUSE, ואפשר להשתמש במדדים כדי להגדיר תובנות לכל נפח ולא לכל קטגוריה.
המדדים מופעלים כברירת מחדל החל מגרסה 1.33.0-gke.2248000 של GKE ואילך. כדי להשבית אותן, מגדירים את מאפיין עוצמת הקול
disableMetrics לערך true.
מדדים של מערכת קבצים
מדדים של מערכת הקבצים עוקבים אחרי הביצועים והתקינות של מערכת הקבצים, כולל מספר הפעולות, השגיאות ומהירות הפעולה. המדדים האלה יכולים לעזור לזהות צווארי בקבוק ולשפר את הביצועים.
gcsfusecsi/fs_ops_countgcsfusecsi/fs_ops_error_countgcsfusecsi/fs_ops_latency
מדדים של Cloud Storage
אתם יכולים לעקוב אחרי מדדים של Cloud Storage, כולל נפח הנתונים, המהירות ופעילות הבקשות, כדי להבין איך האפליקציות שלכם יוצרות אינטראקציה עם קטגוריות של Cloud Storage. הנתונים האלה יכולים לעזור לכם לזהות תחומים לאופטימיזציה, כמו שיפור דפוסי הקריאה או הפחתת מספר הבקשות.
gcsfusecsi/gcs_download_bytes_countgcsfusecsi/gcs_read_countgcsfusecsi/gcs_read_bytes_countgcsfusecsi/gcs_reader_countgcsfusecsi/gcs_request_countgcsfusecsi/gcs_request_latencies
מדדים של מטמון קבצים
כדי לבצע אופטימיזציה של Cloud Storage FUSE ושל ביצועי האפליקציה, אתם יכולים לעקוב אחרי מדדים של מטמון קבצים, כולל נפח קריאת הנתונים, המהירות ושיעור הפגיעה במטמון. כדאי לנתח את המדדים האלה כדי לשפר את אסטרטגיית השמירה במטמון ולמקסם את מספר הפעמים שהנתונים נמצאו במטמון.
gcsfusecsi/file_cache_read_bytes_countgcsfusecsi/file_cache_read_latenciesgcsfusecsi/file_cache_read_count
הפעלת ברירות המחדל של הביצועים של Cloud Storage FUSE
החל מגרסה 1.33.2-gke.4655000, GKE מפעיל באופן אוטומטי מספר הגדרות ברירת מחדל של ביצועים ל-Cloud Storage FUSE שפועל בצמתים שמגובים על ידי סוגי מכונות עם ביצועים גבוהים. הגדרות ברירת המחדל האלה של הביצועים לא נתמכות מגרסה 1.34.1-gke.1431000 עד גרסה 1.34.1-gke.3403001 בגלל בעיה ידועה.
במהלך טעינת אמצעי האחסון, מנהל התקן ה-CSI של Cloud Storage FUSE מאחזר את סוג מופע הצומת של היעד ומעביר אותו ל-Cloud Storage FUSE באמצעות אפשרות טעינה חדשה machine-type.
כשמעבירים לו סוג מכונה עם ביצועים גבוהים, Cloud Storage FUSE מגדיר אוטומטית את אפשרויות הטעינה הבאות שמוגדרות כברירת מחדל:
metadata-cache:negative-ttl-secs:0metadata-cache:ttl-secs:-1metadata-cache:stat-cache-max-size-mb:1024metadata-cache:type-cache-max-size-mb:128implicit-dirs:truefile-system:rename-dir-limit:200000write:global-max-blocks:1600
אם אחת מאפשרויות ההרכבה האלה מצוינת באופן מפורש, ברירות המחדל האוטומטיות לא יחליפו אותה.
כדי להפסיק להשתמש בתכונה הזו, צריך לכלול את האפשרות disable-autoconfig באפשרויות הטעינה. לדוגמה:
mountOptions: "implicit-dirs,disable-autoconfig"
שיטות מומלצות לשיפור הביצועים
בקטע הזה מפורטות כמה טכניקות מומלצות לשיפור הביצועים ולאופטימיזציה של מנהל התקן CSI של Cloud Storage FUSE.
שימוש בקטגוריות עם מרחב שמות היררכי (HNS): מומלץ להשתמש בקטגוריות עם HNS כדי להשיג עלייה משמעותית של פי 8 במספר השאילתות הראשוניות לשנייה (QPS). הבחירה הזו גם מאפשרת לשנות שם של ספריות במהירות ובאופן אטומי, וזהו תנאי חיוני ליצירת נקודות ביקורת יעילות באמצעות Cloud Storage FUSE. קטגוריות עם HNS מאפשרות חוויה טובה יותר שדומה לשימוש בקבצים,כי הן תומכות ב-40,000 בקשות קריאה של אובייקטים ו-8, 000 בקשות כתיבה של אובייקטים בשנייה. זה שיפור משמעותי לעומת 8,000 בקשות קריאה של אובייקטים ו-1,000 בקשות כתיבה של אובייקטים בשנייה שמוצעות בקטגוריות שטוחות.
טעינת ספריות ספציפיות כשזה אפשרי: אם עומס העבודה שלכם כולל גישה לספרייה ספציפית בתוך קטגוריה, השתמשו בדגל
--only-dirבמהלך הטעינה. הגישה הממוקדת הזו מזרזת את הקריאות לרשימה, כי היא מגבילה את היקף הקריאות ל-LookUpInode, שכוללות קריאה ל-list+statלכל קובץ או ספרייה בנתיב שצוין. אם מצמצמים את הנתיב של נקודת הגישה לספריית המשנה הנדרשת, אפשר לצמצם את מספר הקריאות האלה ולשפר את הביצועים.אופטימיזציה של שמירת מטא-נתונים במטמון: מגדירים את מטמון המטא-נתונים כדי למקסם את הקיבולת שלו ומגדירים זמן חיים (TTL) אינסופי. השיטה הזו למעשה שומרת במטמון את כל המטא-נתונים שהייתה אליהם גישה למשך משך העבודה, וכך מצמצמת את בקשות הגישה למטא-נתונים ב-Cloud Storage. ההגדרה הזו מועילה במיוחד לנפחי אחסון לקריאה בלבד, כי היא מבטלת חיפושים חוזרים של מטא-נתונים ב-Cloud Storage. עם זאת, חשוב לוודא שצריכת הזיכרון שמשויכת למטמון הגדול של המטא-נתונים תואמת ליכולות של המערכת.
מקסום משאבי ה-sidecar של GKE: Cloud Storage FUSE פועל בתוך קונטיינר sidecar בסביבת GKE. כדי למנוע צווארי בקבוק במשאבים, צריך להסיר את המגבלות על צריכת המעבד והזיכרון של קונטיינר ה-sidecar. כך Cloud Storage FUSE יכול לשנות את ניצול המשאבים שלו בהתאם לדרישות עומס העבודה, ולמנוע הגבלת קצב העברת נתונים (throttling), מה שעוזר להבטיח תפוקה אופטימלית.
אכלוס מראש של מטמון המטא-נתונים: מפעילים את האחזור המקדים של המטא-נתונים עבור מנהל התקן ה-CSI. כך מאכלסים ביעילות את המטא נתונים ואת מטמון הרשימות, מצמצמים את הקריאות למטא נתונים ב-Cloud Storage ומאיצים את ההרצה הראשונית. הרבה מסגרות ML מבצעות את הפעולה הזו באופן אוטומטי, אבל חשוב לוודא שהשלב הזה מתבצע בקוד אימון מותאם אישית. מידע נוסף זמין במאמר שימוש באחזור מראש של מטא-נתונים כדי לאכלס מראש את מטמון המטא-נתונים.
שימוש במטמון קבצים והורדות מקבילות: מומלץ להפעיל את התכונה של מטמון קבצים, במיוחד עבור עומסי עבודה של אימון רב-תקופתי, שבהם הנתונים נקראים שוב ושוב. מטמון הקבצים מאחסן נתונים שניגשים אליהם לעיתים קרובות באחסון מקומי (SSD במקרה של מכונות A3), וכך משפר את ביצועי הקריאה. כדאי להשתמש בתכונה הזו יחד עם התכונה של הורדות מקבילות, במיוחד כשמדובר בהגשת עומסי עבודה. כך אפשר להאיץ את ההורדה של קבצים גדולים על ידי פיצול שלהם לחלקים קטנים יותר והורדה שלהם בו-זמנית.
הפעלת קריאות עם מאגר זמני: קריאות עם מאגר זמני יכולות לשפר את ביצועי הקריאה הסדרתית של קבצים גדולים, על ידי אחזור מראש של חלקים מאובייקט Cloud Storage למאגר זמני בזיכרון באופן אסינכרוני. המאגר מאפשר להגיש קריאות עוקבות מהמאגר במקום לדרוש קריאות לרשת. מידע נוסף זמין במאמר בנושא שיפור קריאות רציפות של קבצים גדולים באמצעות קריאה עם מאגר זמני.
אופטימיזציה של נקודות ביקורת: כדי להשתמש בנקודות ביקורת עם Cloud Storage FUSE, מומלץ מאוד להשתמש בקטגוריית HNS. אם משתמשים בקטגוריה שלא מוגדרת בה מערכת HNS, צריך להגדיר את הפרמטר
rename-dir-limitלערך גבוה כדי להתאים לשינוי השמות של הספריות שנעשה לעיתים קרובות על ידי מסגרות ML במהלך יצירת נקודות ביקורת. עם זאת, שימו לב ששינוי שמות של ספריות בדליים שאינם HNS עשוי להיות לא אטומי, והוא עשוי להימשך זמן רב יותר.הפעלת שמירת רשימות במטמון: כדי לשפר עוד יותר את הביצועים, מפעילים שמירת רשימות במטמון באמצעות הדגל
--kernel-list-cache-ttl-secs. התכונה הזו שומרת במטמון את רשימות הספרייה והקבצים, וכך משפרת את המהירות של פעולותls. שמירת רשימות במטמון מועילה במיוחד לעומסי עבודה שכוללים רישומים חוזרים של כל הספרייה, כמו בתרחישי אימון של AI/ML. מומלץ להשתמש במטמון של רשימות עם נקודות הרכבה לקריאה בלבד, כדי לשמור על עקביות הנתונים.הגדלת הקריאה מראש של ליבת המערכת: בעומסי עבודה שכוללים בעיקר קריאות רציפות של קבצים גדולים, כמו שירות ושחזור של נקודות ביקורת, הגדלת הגודל של הקריאה מראש יכולה לשפר משמעותית את הביצועים. כדי להגדיל את קריאת הנתונים מראש ב-Cloud Storage FUSE, מציינים את הדגל
read_ahead_kbב-mountOptionsומגדירים אותו ל-1MB (למשלread_ahead_kb=1024). כדי להשתמש בתכונה הזו, צריך GKE גרסה 1.32.2-gke.1297001 ואילך. במאגרי מידע אזוריים, Cloud Storage FUSE מנהל אוטומטית את פרמטר הליבהread_ahead_kbב-GKE בגרסה 1.35.0-gke.3047001 ואילך. לכן, האפשרותread_ahead_kbלא רלוונטית, והמערכת תתעלם מכל ערך שיוזן בה.הפעלת כתיבה של נתונים בזמן אמת: כתיבה של נתונים בזמן אמת היא נתיב כתיבה חדש שמעלה נתונים ישירות ל-Cloud Storage בזמן שהם נכתבים. הגישה הזו שונה משיטת הכתיבה שמוגדרת כברירת מחדל, שבה כל הכתיבה מועברת באופן זמני לספרייה מקומית ואז מועלית ל-Cloud Storage אחרי פעולה של
closeאוfsync. כתיבה באמצעות סטרימינג מקטינה את זמן האחזור ואת השימוש בנפח האחסון, ולכן היא מועילה במיוחד לכתיבות גדולות ורציפות, כמו נקודות ביקורת. כדי להפעיל כתיבה לסטרימינג, מציינים את התכונה הניסיונית בשורת הפקודהenable-streaming-writesב-mountOptions.
פתרון בעיות
מידע נוסף על פתרון בעיות זמין במאמרים הבאים:
- פתרון בעיות של אירועי חוסר זיכרון (OOM) ב-Cloud Storage FUSE באמצעות Cloud Profiler.
- מדריך לפתרון בעיות במאמרי העזרה של פרויקט GitHub.