במדריך הזה נסביר איך להשתמש בנפחי אחסון מתמידים של Kubernetes שמגובים בקטגוריות של Cloud Storage, כדי לנהל את משאבי האחסון של קבוצות ה-Pod של Kubernetes ב-Google Kubernetes Engine (GKE). כדאי להשתמש באפשרות האחסון הזו אם אתם כבר מכירים את PersistentVolumes ורוצים עקביות עם הפריסות הקיימות שלכם שמסתמכות על סוג המשאב הזה.
המדריך הזה מיועד לאדמינים ולמפעילים של פלטפורמות שרוצים לפשט את ניהול האחסון של אפליקציות 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 באמצעות התכונה שמירת קבצים במטמון. שמירת קבצים במטמון יכולה לשפר את ביצועי האפליקציה של GKE, על ידי שמירת קבצים ב-Cloud Storage שניגשים אליהם לעיתים קרובות במטמון בדיסק מקומי מהיר יותר.
בנוסף, אפשר להשתמש בתכונה הורדה מקבילה כדי להאיץ קריאה של קבצים גדולים מ-Cloud Storage להורדות מרובות-הליכים. אתם יכולים להשתמש בתכונה הזו כדי לשפר את זמני הטעינה של המודלים, במיוחד כשמדובר בקריאות של יותר מ-1 GB.
הפעלת מנהל ההתקן: כש-PersistentVolumeClaim מבקש אחסון שתואם למפרט של PersistentVolume, GKE מפעיל את מנהל ההתקן של Cloud Storage FUSE CSI.
טעינת קטגוריה: דרייבר ה-CSI טוען את הקטגוריה לצומת שבו מתוזמן ה-Pod ששלח את הבקשה. כך התוכן של הקטגוריה נגיש ל-Pod כספרייה במערכת הקבצים המקומית של ה-Pod. כדי לחדד את האופן שבו קטגוריות נטענות במערכת הקבצים, אפשר להשתמש באפשרויות טעינה. אפשר גם להשתמש במאפייני נפח כדי להגדיר התנהגות ספציפית של מנהל התקן ה-CSI של Cloud Storage FUSE.
חיבור מחדש: אם ה-Pod מופעל מחדש או מתוזמן מחדש לצומת אחר, מנהל ההתקן של CSI מרכיב מחדש את אותה קטגוריה לצומת החדש, כדי להבטיח גישה לנתונים.
יצירת PersistentVolume
יוצרים מניפסט של 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.
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: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 יכול לגשת אליהן. מידע נוסף זמין במאמר טעינה דינמית במסמכי התיעוד של Cloud Storage FUSE.
מחילים את המניפסט על האשכול:
kubectl apply -f PV_FILE_PATHמחליפים את PV_FILE_PATH בנתיב לקובץ ה-YAML.
יצירת PersistentVolumeClaim
יוצרים מניפסט 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במניפסט של PersistentVolume צריך להתאים ל-spec.resources.requests.storageבמניפסט של PersistentVolumeClaim. לקטגוריות של 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.
תרחיש לדוגמה לשימוש יכול להיות טעינה של נפחי אחסון מתמיד שונים עם אפשרויות טעינה שונות לאותו Pod, כאשר כל נפח אחסון מתמיד מתייחס לאותה קטגוריה של Cloud Storage.
פתרון בעיות
מידע נוסף על פתרון בעיות בדרייבר Cloud Storage FUSE CSI אפשר למצוא במדריך לפתרון בעיות במאמרי העזרה של פרויקט GitHub.
המאמרים הבאים
- איך משפרים את הביצועים של מנהל התקן ה-CSI של Cloud Storage FUSE
- דוגמאות נוספות לשימוש ב-CSI driver ב-GitHub
- מידע נוסף על Cloud Storage FUSE