במדריך הזה מוסבר איך להשתמש בנפחי אחסון מתמיד של Kubernetes שמגובים על ידי קטגוריות של Cloud Storage כדי לנהל משאבי אחסון עבור קבוצות Pod של Kubernetes ב-Google Kubernetes Engine (GKE). כדאי להשתמש באפשרות האחסון הזו אם אתם כבר מכירים את נפחי האחסון המתמיד ורוצים עקביות עם הפריסות הקיימות שלכם שמסתמכות על סוג המשאב הזה.
המדריך הזה מיועד לאדמינים ולמפעילים של פלטפורמות שרוצים לפשט את ניהול האחסון של אפליקציות GKE.
לפני שקוראים את הדף הזה, חשוב לוודא שמכירים את נפחי האחסון המתמיד של Kubernetes, את קבוצות ה-Pod של Kubernetes ואת קטגוריות Cloud Storage.
אם אתם רוצים ממשק יעיל שמבוסס על Pod ולא דורש ניסיון קודם בנפחי אחסון מתמיד של Kubernetes, כדאי לעיין במאמר בנושא טעינת קטגוריות של Cloud Storage כנפחי אחסון זמני של CSI.
לפני שמתחילים
חשוב לוודא שהשלמתם את הדרישות המוקדמות הבאות:
- הסבר על הדרישות והמגבלות של מנהל התקן ה-CSI של Cloud Storage FUSE.
- יצירת הקטגוריה של Cloud Storage
- הפעלת מנהל התקן ה-CSI של Cloud Storage FUSE
- הגדרת גישה לקטגוריות של Cloud Storage
איך פועלים נפחי אחסון קבועים לקטגוריות של Cloud Storage
בהקצאת משאבים סטטית, אתם יוצרים אובייקט PersistentVolume אחד או יותר שמכילים את הפרטים של מערכת האחסון הבסיסית. לאחר מכן, פודים באשכולות יכולים לצרוך את נפח האחסון באמצעות PersistentVolumeClaims.
השימוש בנפח אחסון קבוע שמגובה על ידי קטגוריה של Cloud Storage כולל את הפעולות הבאות:
הגדרת אחסון: מגדירים PersistentVolume באשכול GKE, כולל מנהל התקן CSI לשימוש וכל הפרמטרים הנדרשים. במנהל התקן ה-CSI של Cloud Storage FUSE, מציינים את שם הקטגוריה ופרטים רלוונטיים אחרים.
אם רוצים, אפשר לשפר את הביצועים של מנהל ההתקן של CSI באמצעות התכונה file caching. שמירת קבצים במטמון יכולה לשפר את הביצועים של אפליקציות GKE על ידי שמירת קבצים ב-Cloud Storage שמתבצעת אליהם גישה לעיתים קרובות במטמון בדיסק מקומי מהיר יותר.
בנוסף, אפשר להשתמש בתכונה הורדה מקבילה כדי להאיץ קריאה של קבצים גדולים מ-Cloud Storage להורדות מרובות-הליכים. אתם יכולים להשתמש בתכונה הזו כדי לשפר את זמני הטעינה של המודל, במיוחד כשמדובר בקריאות בגודל של יותר מ-1 GB.
הפעלת ה-driver: כש-PersistentVolumeClaim מבקש אחסון שתואם למפרט של PersistentVolume, GKE מפעיל את ה-driver של Cloud Storage FUSE CSI.
טעינת קטגוריה: דרייבר ה-CSI טוען את הקטגוריה לצומת שבו מתוזמן הפוד ששלח את הבקשה. כך התוכן של ה-Bucket נגיש ל-Pod כספרייה במערכת הקבצים המקומית של ה-Pod. כדי לחדד את האופן שבו קטגוריות נטענות במערכת הקבצים, אפשר להשתמש באפשרויות טעינה. אפשר גם להשתמש במאפייני נפח כדי להגדיר התנהגות ספציפית של מנהל התקן ה-CSI של Cloud Storage FUSE.
חיבור מחדש: אם ה-Pod מופעל מחדש או מתוזמן מחדש לצומת אחר, מנהל ההתקן של CSI מרכיב מחדש את אותה קטגוריה לצומת החדש, כדי להבטיח גישה לנתונים.
יצירת נפח אחסון מתמיד
יוצרים מניפסט של PersistentVolume עם המפרט הבא:
Pod
apiVersion: v1 kind: PersistentVolume metadata: name: gcs-fuse-csi-pv spec: accessModes: - ReadWriteMany capacity: storage: 5Gi storageClassName: example-storage-class mountOptions: - implicit-dirs csi: driver: gcsfuse.csi.storage.gke.io volumeHandle: BUCKET_NAME claimRef: name: gcs-fuse-csi-static-pvc namespace: NAMESPACEמחליפים את הערכים הבאים:
- NAMESPACE: מרחב השמות של Kubernetes שבו רוצים לפרוס את ה-Pod.
- BUCKET_NAME: השם של קטגוריית Cloud Storage שציינתם כשהגדרתם גישה לקטגוריות של Cloud Storage. אפשר לציין קו תחתון (
_) כדי לטעון את כל הקטגוריות שלחשבון השירות של Kubernetes יש גישה אליהן. מידע נוסף זמין במאמר Dynamic mounting במאמרי העזרה של Cloud Storage FUSE.
בדוגמה למניפסט מוצגות ההגדרות הנדרשות האלה:
-
spec.csi.driver: משתמשים ב-gcsfuse.csi.storage.gke.ioכשם של מנהל התקן CSI.
אפשר גם לשנות את המשתנים האלה:
-
spec.mountOptions: העברת אפשרויות טעינה אל Cloud Storage FUSE. מציינים את הדגלים כרשימה. פרטים נוספים מופיעים במאמר בנושא אפשרויות לטעינת נפח אחסון קבוע. -
spec.csi.volumeAttributes: העברת מאפייני נפח נוספים אל Cloud Storage FUSE.
קפסולה (שמירה במטמון של קבצים)
apiVersion: v1 kind: PersistentVolume metadata: name: gcs-fuse-csi-pv spec: accessModes: - ReadWriteMany capacity: storage: 5Gi storageClassName: example-storage-class mountOptions: - implicit-dirs - file-cache:max-size-mb:-1 csi: driver: gcsfuse.csi.storage.gke.io volumeHandle: BUCKET_NAME claimRef: name: gcs-fuse-csi-static-pvc namespace: NAMESPACEמחליפים את הערכים הבאים:
- NAMESPACE: מרחב השמות של Kubernetes שבו רוצים לפרוס את ה-Pod.
- BUCKET_NAME: שם הקטגוריה ב-Cloud Storage שציינתם כשקבעתם את הגישה לקטגוריות ב-Cloud Storage.
אפשר לציין קו תחתון (
_) כדי לטעון את כל הקטגוריות שחשבון השירות של Kubernetes יכול לגשת אליהן. מידע נוסף זמין במאמר Dynamic mounting במאמרי העזרה של Cloud Storage FUSE.
Pod (הורדה מקבילה)
apiVersion: v1 kind: PersistentVolume metadata: name: gcs-fuse-csi-pv spec: accessModes: - ReadWriteMany capacity: storage: 5Gi storageClassName: example-storage-class mountOptions: - implicit-dirs - file-cache:enable-parallel-downloads:true - file-cache:max-size-mb:-1 csi: driver: gcsfuse.csi.storage.gke.io volumeHandle: BUCKET_NAME claimRef: name: gcs-fuse-csi-static-pvc namespace: NAMESPACEמחליפים את הערכים הבאים:
- 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.
יצירת בקשה לנפח אחסון מתמיד
יוצרים מניפסט PersistentVolumeClaim עם המפרט הבא:
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: gcs-fuse-csi-static-pvc namespace: NAMESPACE spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi storageClassName: example-storage-classמחליפים את NAMESPACE במרחב השמות של Kubernetes שבו רוצים לפרוס את ה-Pod.
כדי לקשר את PersistentVolume ל-PersistentVolumeClaim, צריך לבדוק את הגדרות התצורה הבאות:
-
spec.storageClassName: הערךstorageClassNameבמניפסטים של PersistentVolume ו-PersistentVolumeClaim חייב להיות זהה כדי שהדרישה תקושר לנפח האחסון. מנהל התקן ה-CSI של Cloud Storage FUSE לא משתמש באובייקטים מסוגStorageClass. צריך רק לוודא שהשדהstorageClassNameזהה בשני המשאבים. אפשר להשתמש במחרוזת ריקה או לא ריקה בשדה הזה. היא לא צריכה להתייחס לאובייקט StorageClass קיים, והיא משמשת רק כתווית קישור בין PV ל-PVC. - השדות
spec.accessModesבמניפסטים של PersistentVolume ו-PersistentVolumeClaim צריכים להיות זהים. - השדה
spec.capacity.storageבמניפסט של נפח האחסון המתמיד צריך להיות זהה לערך שלspec.resources.requests.storageבמניפסט של בקשת נפח האחסון המתמיד. לקטגוריות של Cloud Storage אין מגבלות גודל, לכן אפשר להזין כל מספר לקיבולת, אבל אי אפשר להשאיר את השדה ריק.
-
מחילים את המניפסט על האשכול:
kubectl apply -f PVC_FILE_PATHמחליפים את PVC_FILE_PATH בנתיב לקובץ ה-YAML.
צריכת הנפח ב-Pod
יוצרים מניפסט של Pod בהתאם למפרט הבא:
apiVersion: v1 kind: Pod metadata: name: gcs-fuse-csi-example-static-pvc namespace: NAMESPACE annotations: gke-gcsfuse/volumes: "true" spec: containers: - image: busybox name: busybox command: ["sleep"] args: ["infinity"] volumeMounts: - name: gcs-fuse-csi-static mountPath: /data readOnly: true serviceAccountName: KSA_NAME volumes: - name: gcs-fuse-csi-static persistentVolumeClaim: claimName: gcs-fuse-csi-static-pvc readOnly: trueמחליפים את הערכים הבאים:
- NAMESPACE: מרחב השמות של Kubernetes שבו רוצים לפרוס את ה-Pod.
- KSA_NAME: השם של Kubernetes ServiceAccount שיצרתם כשהגדרתם גישה לקטגוריות של Cloud Storage.
בדוגמה למניפסט מוצגות ההגדרות הנדרשות האלה:
-
metadata.annotations: ההערהgke-gcsfuse/volumes: "true"נדרשת. מידע נוסף על הערות אופציונליות זמין במאמר בנושא הגדרת קונטיינר sidecar.
אפשר גם לשנות את המשתנים האלה:
-
spec.containers[n].volumeMounts[n].readOnly: מציינים true אם רק נקודות טעינה ספציפיות של נפח הן לקריאה בלבד. -
spec.volumes[n].persistentVolumeClaim.readOnly: מציינים true אם כל נקודות הטעינה של אמצעי האחסון הן לקריאה בלבד.
מחילים את המניפסט על האשכול:
kubectl apply -f POD_FILE_PATHמחליפים את POD_FILE_PATH בנתיב לקובץ ה-YAML.
(אופציונלי) טעינת אותה קטגוריה של Cloud Storage עם PersistentVolumes שונים
החל מגרסה GKE 1.33.0-gke.1932000, אפשר להשתמש בכמה PersistentVolumes שמגובים על ידי אותה קטגוריה של Cloud Storage. בכל אובייקט PersistentVolume, צריך להשתמש בערך volumeHandle ייחודי בפורמט BUCKET_NAME:UNIQUE_SUFFIX.
תרחיש לדוגמה לשימוש יכול להיות צירוף של PersistentVolumes שונים עם אפשרויות צירוף שונות לאותו Pod, כאשר כל PersistentVolume מתייחס לאותה קטגוריה של Cloud Storage.
פתרון בעיות
מידע נוסף על פתרון בעיות בדרייבר Cloud Storage FUSE CSI אפשר למצוא במדריך לפתרון בעיות במאמרי העזרה של פרויקט GitHub.
המאמרים הבאים
- איך משפרים את הביצועים של מנהל התקן ה-CSI של Cloud Storage FUSE
- דוגמאות נוספות לשימוש בדרייבר CSI ב-GitHub
- מידע נוסף על Cloud Storage FUSE