Google Kubernetes Engine (GKE) מספק דרך פשוטה לפרוס ולנהל באופן אוטומטי את מנהל ההתקן של Container Storage Interface (CSI) של דיסק מתמשך ב-Compute Engine באשכולות. מנהל ההתקן של CSI לדיסק אחסון מתמיד ב-Compute Engine תמיד מופעל באשכולות Autopilot, ואי אפשר להשבית או לערוך אותו. באשכולות Standard, צריך להפעיל את מנהל ההתקן של ממשק אחסון בקונטיינרים (CSI) לדיסק אחסון מתמיד של Compute Engine.
גרסת ה-CSI Driver של דיסק מתמשך ב-Compute Engine קשורה למספרי הגרסאות של GKE. גרסת ה-CSI Driver של דיסק מתמשך ב-Compute Engine היא בדרך כלל הגרסה העדכנית ביותר שזמינה בזמן שחרור גרסת GKE. העדכון של מנהלי ההתקנים מתבצע באופן אוטומטי כשמשדרגים את האשכול לתיקון (patch) האחרון של GKE.
יתרונות
לשימוש במנהל התקן CSI של דיסק לאחסון מתמיד ב-Compute Engine יש את היתרונות הבאים:
- הוא מאפשר פריסה וניהול אוטומטיים של מנהל ההתקן של Persistent Disk, בלי צורך להגדיר אותו באופן ידני.
- אתם יכולים להשתמש במפתחות הצפנה בניהול הלקוח (CMEK). המפתחות האלה משמשים להצפנת המפתחות להצפנת נתונים, שבאמצעותם מוצפנים הנתונים שלכם. למידע נוסף על CMEK ב-GKE, קראו את המאמר שימוש ב-CMEK.
- אפשר להשתמש בתמונות מצב של נפחים עם מנהל התקן ה-CSI של דיסק מתמשך ב-Compute Engine. תמונות מצב של נפח אחסון מאפשרות ליצור עותק של נפח האחסון בנקודת זמן ספציפית. אתם יכולים להשתמש בעותק הזה כדי להחזיר נפח אחסון למצב קודם או כדי להקצות נפח אחסון חדש.
- אפשר להשתמש בשיבוט נפחים עם מנהל ההתקן של ה-CSI של דיסק מתמשך ב-Compute Engine באשכולות שמריצים GKE בגרסה 1.22 ואילך. שיבוט נפח מאפשר ליצור עותק של הנפח בנקודת זמן ספציפית, עם כל הנתונים מנפח המקור.
- תיקוני באגים ועדכוני תכונות מופצים בנפרד מגרסאות Kubernetes משניות. לוח הזמנים הזה בדרך כלל מוביל לקצב מהיר יותר של פרסום גרסאות.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את המשימות הבאות:
- מפעילים את ממשק ה-API של Google Kubernetes Engine. הפעלת Google Kubernetes Engine API
- כדי להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז לאתחל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
הפעלת מנהל התקן CSI של דיסק קבוע ב-Compute Engine
כדי להפעיל את מנהל התקן ה-CSI של Persistent Disk ב-Compute Engine באשכולות Standard קיימים, משתמשים ב-Google Cloud CLI או במסוף Google Cloud .
כדי להפעיל את ה-driver באשכול קיים, מבצעים את השלבים הבאים:
gcloud
gcloud container clusters update CLUSTER-NAME \
--update-addons=GcePersistentDiskCsiDriver=ENABLED
מחליפים את CLUSTER-NAME בשם של האשכול הקיים.
המסוף
נכנסים לדף Google Kubernetes Engine במסוף Google Cloud .
ברשימת האשכולות, לוחצים על שם האשכול שרוצים לשנות.
בקטע Features (תכונות), לצד השדה Compute Engine persistent disk CSI Driver (מנהל התקן CSI של דיסק לאחסון מתמיד ב-Compute Engine), לוחצים על edit Edit Compute Engine CSI driver (עריכת מנהל התקן CSI של Compute Engine).
מסמנים את התיבה Enable Compute Engine Persistent Disk CSI Driver.
לוחצים על שמירת השינויים.
אחרי שמפעילים את מנהל ההתקן CSI של Persistent Disk ב-Compute Engine, אפשר להשתמש במנהל ההתקן בנפחי אחסון של Kubernetes באמצעות שם מנהל ההתקן ומנהל ההקצאות: pd.csi.storage.gke.io.
השבתת מנהל התקן CSI של דיסק לאחסון מתמיד ב-Compute Engine
אפשר להשבית את מנהל ההתקן CSI של דיסק מתמשך ב-Compute Engine עבור אשכולות רגילים באמצעות Google Cloud CLI או Google Cloud המסוף.
אם משביתים את מנהל ההתקן, כל ה-Pods שמשתמשים כרגע ב-PersistentVolumes שבבעלות מנהל ההתקן לא מסתיימים. גם Pods חדשים שמנסים להשתמש ב-PersistentVolumes האלה לא מצליחים להתחיל.
כדי להשבית את מנהל ההתקן באשכול Standard קיים:
gcloud
gcloud container clusters update CLUSTER-NAME \
--update-addons=GcePersistentDiskCsiDriver=DISABLED
מחליפים את CLUSTER-NAME בשם של האשכול הקיים.
המסוף
נכנסים לדף Google Kubernetes Engine במסוף Google Cloud .
ברשימת האשכולות, לוחצים על שם האשכול שרוצים לשנות.
בקטע Features (תכונות), לצד השדה Compute Engine persistent disk CSI Driver (מנהל התקן CSI של דיסק לאחסון מתמיד ב-Compute Engine), לוחצים על edit Edit Compute Engine CSI driver (עריכת מנהל התקן CSI של Compute Engine).
מבטלים את הסימון בתיבה Enable Compute Engine Persistent Disk CSI Driver.
לוחצים על שמירת השינויים.
שימוש במנהל התקן ה-CSI של דיסקים לאחסון מתמיד ב-Compute Engine לאשכולות Linux
בקטעים הבאים מתואר התהליך האופייני לשימוש בנפח Kubernetes שמגובה על ידי דרייבר CSI ב-GKE. הקטעים האלה רלוונטיים רק לאשכולות שמשתמשים ב-Linux.
יצירת StorageClass
אחרי שמפעילים את מנהל ה-CSI של דיסק מתמשך ב-Compute Engine, GKE מתקין אוטומטית את StorageClasses הבאים:
-
standard-rwo, באמצעות דיסק אחסון מתמיד מאוזן -
premium-rwo, באמצעות דיסק מתמיד שמבוסס על SSD
באשכולות Autopilot, ברירת המחדל של StorageClass היא standard-rwo, שמשתמשת במנהל התקן ה-CSI של דיסק מתמשך ב-Compute Engine. באשכולות Standard, סוג האחסון (StorageClass) שמוגדר כברירת מחדל משתמש בתוסף נפח gcePersistentDisk בתוך העץ של Kubernetes.
כדי לראות את השם של StorageClasses שהותקנו, מריצים את הפקודה הבאה:
kubectl get sc
אפשר גם להתקין StorageClass אחר שמשתמש במנהל התקן ה-CSI של דיסק מתמשך ב-Compute Engine. כדי לעשות את זה, מוסיפים pd.csi.storage.gke.io בשדה provisioner.
לדוגמה, אפשר ליצור StorageClass באמצעות הקובץ הבא, שנקרא pd-example-class.yaml.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: pd-example
provisioner: pd.csi.storage.gke.io
# Recommended setting. Delays the binding and provisioning of a PersistentVolume until a Pod that uses the
# PersistentVolumeClaim is created and scheduled on a node.
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
type: pd-balanced
אפשר לציין את סוגי הדיסקים הקבועים הבאים בפרמטר type:
pd-balancedpd-ssdpd-standard-
pd-extreme(נתמך ב-GKE מגרסה 1.26 ואילך)
אם אתם משתמשים ב-pd-standard או ב-pd-extreme, כדאי לעיין בסוגי מכונות שלא נתמכים כדי לקבל מידע על הגבלות נוספות לשימוש.
כשמשתמשים באפשרות pd-extreme, צריך להוסיף את השדה provisioned-iops-on-create למניפסט. הערך של השדה הזה צריך להיות זהה לערך ה-IOPS שהוקצה שציינתם כשנוצר הדיסק הקשיח.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: pd-extreme-example
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
type: pd-extreme
provisioned-iops-on-create:'10000'
אחרי שיוצרים את הקובץ pd-example-class.yaml, מריצים את הפקודה הבאה:
kubectl create -f pd-example-class.yaml
יצירת PersistentVolumeClaim
אפשר ליצור PersistentVolumeClaim שמפנה ל-StorageClass של מנהל ה-CSI של דיסק קבוע ב-Compute Engine.
הקובץ הבא, שנקרא pvc-example.yaml, משתמש בסוג האחסון (storage class) שהותקן מראש standard-rwo:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: podpvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: standard-rwo
resources:
requests:
storage: 6Gi
אחרי שיוצרים את מניפסט PersistentVolumeClaim, מריצים את הפקודה הבאה:
kubectl create -f pvc-example.yaml
ב-StorageClass שהותקן מראש (standard-rwo), volumeBindingMode
מוגדר ל-WaitForFirstConsumer. כשהערך של volumeBindingMode הוא WaitForFirstConsumer, לא מתבצעת הקצאה של PersistentVolume עד שתזמון של Pod שמפנה אל PersistentVolumeClaim. אם volumeBindingMode ב-StorageClass מוגדר ל-Immediate (או אם הוא מושמט), PersistentVolume שמגובה בדיסק קבוע מוקצה אחרי שנוצר PersistentVolumeClaim.
יצירת Pod שמשתמש בנפח האחסון
כשמשתמשים בפודים עם PersistentVolumes, מומלץ להשתמש בבקר של עומס עבודה (כמו Deployment או StatefulSet). בדרך כלל לא משתמשים ב-Pod עצמאי, אבל בדוגמה הבאה משתמשים בו כדי לפשט את הדברים.
בדוגמה הבאה נעשה שימוש בנפח האחסון שיצרתם בקטע הקודם:
apiVersion: v1
kind: Pod
metadata:
name: web-server
spec:
containers:
- name: web-server
image: nginx
volumeMounts:
# The path in the container where the volume will be mounted.
- mountPath: /var/lib/www/html
# The name of the volume that is being defined in the "volumes" section.
name: mypvc
volumes:
- name: mypvc
persistentVolumeClaim:
# References the PersistentVolumeClaim created earlier.
claimName: podpvc
readOnly: false
תזמון תאימות האחסון ב-GKE Autopilot
באשכולות Autopilot, GKE מנהל באופן אוטומטי את הקצאת הצמתים והמשאבים. כדי שמערכת Autopilot תקצה צמתים שתואמים לסוג האחסון המבוקש, צריך לציין את הפרמטר use-allowed-disk-topology: "true" בהגדרה המותאמת אישית של StorageClass.
הגדרת הפרמטר הזה מחייבת את התנהגויות התזמון הבאות:
- הכלי Cluster Autoscaler מקצה רק צמתים חדשים עם סוגי מכונות שתומכים בסוג הדיסק המבוקש.
- ה-Pod מתוזמן בצומת תואם. התזמון הזה מונע מה-Pod להיתקע במצבים
ContainerCreatingאוPending.
מידע נוסף מופיע במאמר תזמון צמתים נתמכים.
בסדרות חדשות יותר של מכונות, כמו C3 או E4, נדרש אחסון ב-Google Cloud Hyperdisk (כמו hyperdisk-balanced). בסדרות המכונות האלה אין תמיכה בסוגים קודמים של נפחי אחסון ב-Persistent Disk, כמו נפחי אחסון ב-Persistent Disk רגיל (pd-standard) או ב-SSD Persistent Disk (pd-ssd). התאימות של האחסון משפיעה על התזמון באופן הבא:
- מעבר חלקה: אם עומס עבודה עם שמירת מצב משתמש בסוג נפח של Persistent Disk מגרסה קודמת, כמו נפחים של Persistent Disk רגיל (
pd-standard) או SSD Persistent Disk (pd-ssd), אבל לא מבקש במפורש סדרת מכונות ספציפית, GKE מתזמן אוטומטית את ה-Pods בצמתי E2 כי הם תומכים בסוגי הנפח האלה של Persistent Disk. עומס העבודה חוזר בשקט מהחומרה החדשה יותר שמוגדרת כברירת מחדל. - תזמון נכשל (בהמתנה): יכול להיות שביקשתם במפורש סדרת מכונות חדשה יותר (לדוגמה, באמצעות שדות
nodeSelectorאו ComputeClass מותאם אישית). אם מצרפים גם סוג קודם של נפח Persistent Disk, כמו נפחי דיסק מתמיד סטנדרטי (pd-standard) או נפחי דיסק מתמיד שמבוסס על SSD (pd-ssd), GKE לא יכול למצוא צומת שעומד בשתי המגבלות. ה-Pod נשאר במצבPending. - קונפליקט בין סוגי אחסון שונים (בהמתנה): אם Pod מפנה לכמה PVC שמשתמשים בסוגי אחסון שונים (לדוגמה, שילוב של סוג נפח מוקדם יותר של Persistent Disk כמו Persistent Disk רגיל (
pd-standard) ואחסון Google Cloud Hyperdisk), יכול להיות ש-GKE לא יוכל למצוא סוג צומת שתומך בכל האילוצים. במקרה כזה, ה-Pod נשאר במצבPending. - Insufficient CPU request for extreme disks (Pending): סוגי נפחים קיצוניים, כמו
hyperdisk-extremeו-pd-extreme, דורשים צורות גדולות של מכונות וירטואליות עם מספרים גבוהים של vCPU. אם בקשת ה-Pod שלכם כוללת מעט מדי ליבות וירטואליות של CPU (vCPU), יכול להיות ש-GKE יקצה צורה של צומת שלא תומכת בסוג הנפח, ולכן ה-Pod יישאר במצבPending. כדי לוודא שהתזמון מתבצע בצורה תקינה, צריך לציין בקשות למעבדים שהן גדולות מספיק כדי ש-Autopilot יקצה צורה נתמכת של מכונה וירטואלית. רשימה של סוגי המכונות הנתמכים ודרישות המינימום של vCPU זמינה במאמר תמיכה במכונות.
הוראות לפתרון בעיות ופרטים על אופן האימות של ההתנהגות הזו באמצעות
בדיקת יומנים זמינים במאמר
Workload scheduled on older machine series or stuck in Pending state due to storage incompatibility (עומס עבודה מתוזמן בסדרת מכונות ישנה יותר או תקוע במצב בגלל חוסר תאימות לאחסון).
שימוש במנהל התקן ה-CSI של דיסקים לאחסון מתמיד ב-Compute Engine עבור אשכולות Windows
בקטעים הבאים מתואר התהליך הרגיל לשימוש בנפח אחסון של Kubernetes שמגובה על ידי מנהל התקן CSI ב-GKE. הקטעים האלה ספציפיים לאשכולות שפועלים ב-Windows.
חשוב לוודא ש:
- גרסת האשכול היא 1.19.7-gke.2000, 1.20.2-gke.2000 או גרסה מתקדמת יותר.
- גרסאות הצמתים הן 1.18.12-gke.1203, 1.19.6-gke.800 או גרסה חדשה יותר.
יצירת StorageClass
יצירת StorageClass ל-Windows דומה מאוד ליצירה ל-Linux. חשוב לדעת ש-StorageClass שמותקן כברירת מחדל לא יפעל ב-Windows כי סוג מערכת הקבצים שונה. מנהל התקן ה-CSI של דיסק לאחסון מתמיד ב-Compute Engine ל-Windows דורש NTFS כסוג מערכת הקבצים.
לדוגמה, אפשר ליצור StorageClass באמצעות הקובץ הבא שנקרא pd-
windows-class.yaml. חשוב להוסיף את csi.storage.k8s.io/fstype: NTFS לרשימת הפרמטרים:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: pd-sc-windows
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
type: pd-balanced
csi.storage.k8s.io/fstype: NTFS
יצירת PersistentVolumeClaim
אחרי שיוצרים StorageClass ל-Windows, אפשר ליצור PersistentVolumeClaim שמפנה ל-StorageClass הזה:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: podpvc-windows
spec:
accessModes:
- ReadWriteOnce
storageClassName: pd-sc-windows
resources:
requests:
storage: 6Gi
יצירת Pod שמשתמש בנפח האחסון
בדוגמה הבאה נעשה שימוש בנפח האחסון שיצרתם במשימה הקודמת:
apiVersion: v1
kind: Pod
metadata:
name: web-server
spec:
# Node selector to ensure the Pod runs on a Windows node.
nodeSelector:
kubernetes.io/os: windows
containers:
- name: iis-server
# The container image to use.
image: mcr.microsoft.com/windows/servercore/iis
ports:
- containerPort: 80
volumeMounts:
# The path in the container where the volume will be mounted.
- mountPath: /var/lib/www/html
name: mypvc
volumes:
- name: mypvc
persistentVolumeClaim:
# References the PersistentVolumeClaim created earlier.
claimName: podpvc-windows
readOnly: false
אפשר לשנות באופן דינמי את ה-IOPS ואת קצב העברת הנתונים של Hyperdisk באמצעות VolumeAttributeClass
אפשר להשתמש ב-VolumeAttributesClass עם מנהל התקן ה-CSI של דיסקים לאחסון מתמיד ב-Compute Engine כדי לשנות באופן דינמי מאפיינים של דיסקים לאחסון מתמיד, כולל IOPS וקצב העברת נתונים. מוודאים שגרסת אשכול GKE היא 1.34 ואילך.
בקטע הזה נסביר איך להשתמש ב-VolumeAttributesClass כדי לשנות באופן דינמי את ביצועי עוצמת הקול. יוצרים שני משאבי VolumeAttributesClass, silver ו-gold, כדי להגדיר רמות שונות של IOPS ושל קצב העברת נתונים. אחר כך יוצרים StorageClass, PersistentVolumeClaim שמפנה לרמה silver ו-Pod כדי לצרוך את הנפח. לבסוף, מעדכנים את PersistentVolumeClaim כך שיפנה לרמת gold, וכך מתבצע עדכון דינמי של הגדרות הביצועים של אמצעי האחסון.
יוצרים VolumeAttributesClass כדי להגדיר רמות ביצועים
בקטע הזה מוגדרים משאבי VolumeAttributesClass עם רמות לדוגמה בשמות silver ו-gold.
שומרים את קובץ המניפסט הבא בשם
vac-classes.yaml:apiVersion: storage.k8s.io/v1 kind: VolumeAttributesClass metadata: name: silver driverName: pd.csi.storage.gke.io parameters: iops: "3000" throughput: "188Mi" --- apiVersion: storage.k8s.io/v1 kind: VolumeAttributesClass metadata: name: gold driverName: pd.csi.storage.gke.io parameters: iops: "6000" throughput: "345Mi"החלת המניפסט:
kubectl apply -f vac-classes.yaml
יצירת StorageClass ל-Hyperdisk
בקטע הזה מוגדר משאב StorageClass להקצאת נפחי אחסון של Hyperdisk.
שומרים את קובץ המניפסט הבא בשם
hyperdisk-sc.yaml:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: hyperdisk-example provisioner: pd.csi.storage.gke.io volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true parameters: type: hyperdisk-balancedמחילים את המניפסט:
kubectl apply -f hyperdisk-sc.yaml
יצירת PVC עם רמת ביצועים ראשונית
בקטע הזה נוצר PVC ונעשה שימוש ברמת המינוי הראשונית שנקראת silver.
שומרים את המניפסט הבא בתור
vac-silver-pvc.yaml:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: test-pv-claim spec: accessModes: - ReadWriteOnce storageClassName: hyperdisk-example volumeAttributesClassName: silver resources: requests: storage: 200Giהחלת המניפסט:
kubectl apply -f vac-silver-pvc.yamlכדי להקצות נפח אחסון מתמיד, יוצרים Pod שמשתמש ב-PVC. ה-
StorageClassשנוצר בקטע הקודם מגדיר אתvolumeBindingMode: WaitForFirstConsumer, מה שמעכב את הקצאת הנפח עד ש-Pod צורך את ה-PVC. שומרים את המניפסט הבא בתורtest-pod.yaml:apiVersion: v1 kind: Pod metadata: name: test-pvc-pod spec: containers: - name: nginx-container image: nginx:latest ports: - containerPort: 80 volumeMounts: - name: pvc-storage mountPath: /usr/share/nginx/html volumes: - name: pvc-storage persistentVolumeClaim: claimName: test-pv-claimהחלת המניפסט:
kubectl apply -f test-pod.yamlכדי לבדוק את הגדרות הביצועים של הדיסק, אפשר לעיין במאמר בדיקת הגדרות הביצועים של הדיסק במסוף Google Cloud . ערך Provisioned IOPS צריך להיות
3000וערך Provisioned throughput צריך להיות188.
עדכון ה-PVC לשימוש בשכבת ביצועים אחרת
בקטע הזה מעדכנים את ה-PVC כך שישתמש ברמה gold במקום ברמה silver.
שומרים את קובץ המניפסט הבא בשם
vac-gold-pvc.yaml:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: test-pv-claim spec: accessModes: - ReadWriteOnce storageClassName: hyperdisk-example volumeAttributesClassName: gold resources: requests: storage: 200Giמחילים את המניפסט:
kubectl apply -f vac-gold-pvc.yamlכדי לוודא שהגדרות הביצועים של הדיסק עודכנו, אפשר לעיין במאמר אימות הגדרות הביצועים של הדיסק במסוף Google Cloud . ערך Provisioned IOPS צריך להיות
6000וערך Provisioned throughput צריך להיות345.
אימות הגדרות הביצועים של הדיסק ב Google Cloud מסוף
כדי לוודא שהגדרות ה-IOPS וקצב הנתונים חלות על ה-Persistent Disk, בודקים את פרטי הדיסק במסוף Google Cloud .
אחזור שם הדיסק:
PV_NAME=$(kubectl get pvc test-pv-claim -o=jsonpath='{.spec.volumeName}') DISK_NAME=$(kubectl get pv $PV_NAME -o=jsonpath='{.spec.csi.volumeHandle}' | sed 's|.*/||') echo "Persistent disk name: $DISK_NAME"נכנסים לדף Disks במסוף Google Cloud .
לוחצים על השם של הדיסק הקשיח התמידי שזהה לשם הדיסק מהפלט של השלב הקודם.
בדף Disk details (פרטי הדיסק), בקטע Performance (ביצועים), אפשר לראות את הערכים Provisioned IOPS (פעולות קלט/פלט שהוקצו) ו-Provisioned throughput (קצב העברת הנתונים שהוקצה).
מידע נוסף זמין במאמר הצגת הגדרות הביצועים שהוקצו ל-Hyperdisk.
שיקולים לגבי שינוי דינמי
- החלת הגדרות קודמות מחדש: אם אי אפשר לקשר PVC עם מחלקת מאפייני נפח בגלל שגיאה, כמו משאבים לא זמינים, אפשר להחיל מחדש את ה-PVC הקודם.
- תמיכה במכסות: מישור הבקרה של Kubernetes יכול לאכוף מכסות על PVC שמפנים אל
VolumeAttributesClassספציפי באמצעותscopeSelectorב-ResourceQuota.
שימוש במנהל התקן ה-CSI של דיסקים לאחסון מתמיד ב-Compute Engine עם סוגים של מערכות קבצים שאינם ברירת המחדל
סוג מערכת הקבצים שמוגדר כברירת מחדל בדיסקים לאחסון מתמיד של Compute Engine ב-GKE הוא ext4. אפשר גם להשתמש בסוג האחסון xfs אם תמונת הצומת תומכת בו. כאן אפשר לעיין ברשימת מנהלי ההתקנים הנתמכים לפי תמונת הצומת.
בדוגמה הבאה אפשר לראות איך משתמשים ב-xfs כסוג ברירת המחדל של מערכת הקבצים במקום ב-ext4 עם מנהל התקן ה-CSI של דיסק מתמשך ב-Compute Engine.
יצירת StorageClass
שומרים את המניפסט הבא כקובץ YAML בשם
pd-xfs-class.yaml:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: xfs-class provisioner: pd.csi.storage.gke.io parameters: # The type of Compute Engine persistent disk to provision. type: pd-balanced # Specify "xfs" as the filesystem type. csi.storage.k8s.io/fstype: xfs volumeBindingMode: WaitForFirstConsumerמחילים את המניפסט:
kubectl apply -f pd-xfs-class.yaml
יצירת PersistentVolumeClaim
שומרים את המניפסט הבא בתור
pd-xfs-pvc.yaml:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: xfs-pvc spec: # References the StorageClass created earlier. storageClassName: xfs-class accessModes: - ReadWriteOnce resources: requests: # The amount of storage requested. storage: 10Giהחלת המניפסט:
kubectl apply -f pd-xfs-pvc.yaml
יצירת Pod שמשתמש בנפח האחסון
שומרים את קובץ המניפסט הבא בשם
pd-xfs-pod.yaml:apiVersion: v1 kind: Pod metadata: name: pd-xfs-pod spec: containers: - name: cloud-sdk image: google/cloud-sdk:slim # Keep the container running for 1 hour. args: ["sleep","3600"] volumeMounts: # The path in the container where the volume will be mounted. - mountPath: /xfs name: xfs-volume # Define the volumes available to the containers in the Pod. volumes: - name: xfs-volume persistentVolumeClaim: # References the PersistentVolumeClaim created earlier. claimName: xfs-pvcהחלת המניפסט:
kubectl apply -f pd-xfs-pod.yaml
איך מוודאים שהנפח הותקן בצורה נכונה
פותחים סשן של מעטפת ב-Pod:
kubectl exec -it pd-xfs-pod -- /bin/bashמחפשים מחיצות
xfs:df -aTh --type=xfsהפלט אמור להיראות כך:
Filesystem Type Size Used Avail Use% Mounted on /dev/sdb xfs 30G 63M 30G 1% /xfs
צפייה ביומנים של מנהל התקן CSI של דיסק לאחסון מתמיד ב-Compute Engine
אפשר להשתמש ב-Cloud Logging כדי לראות אירועים שקשורים למנהל התקן ה-CSI של דיסק מתמשך ב-Compute Engine. יומנים יכולים לעזור לכם לפתור בעיות.
מידע נוסף על Cloud Logging זמין במאמר צפייה ביומני GKE.
כדי לראות את היומנים של מנהל ההתקן CSI של דיסק מתמשך ב-Compute Engine, פועלים לפי השלבים הבאים:
נכנסים לדף Cloud Logging במסוף Google Cloud .
כדי לסנן את הרשומות ביומן ולהציג רק את הרשומות שקשורות ל-CSI Driver שפועל במרחב השמות, מריצים את השאילתה הבאה ב-Cloud Logging:
resource.type="k8s_container" resource.labels.project_id="PROJECT_ID" resource.labels.location="LOCATION" resource.labels.cluster_name="CLUSTER_NAME" resource.labels.namespace_name="kube-system" resource.labels.container_name="gce-pd-driver"מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_ID: שם הפרויקט. -
LOCATION: האזור או התחום של Compute Engine שבו נמצא האשכול. -
CLUSTER_NAME: השם של האשכול.
-
בעיות מוכרות
סוגי מכונות שלא נתמכים
אם אתם משתמשים בקבוצת המכונות מסדרת C3, אין תמיכה בסוג הדיסק המתמשך pd-standard.
תזמון תאימות של אחסון ב-Autopilot
עבור עומסי עבודה שפועלים במצב אוטומטי (באשכולות Autopilot או באשכולות Standard שמשתמשים ב-ComputeClasses של Autopilot), פודים עם אחסון מתמיד מצורף מתוזמנים רק בסדרות מכונות תואמות:
- Persistent Disks מדור קודם: פודים שמשתמשים בדיסקים מדור קודם של
pd-standardפועלים רק בסדרות מכונות שתומכות בהם, כמו צמתים שלE2. - Hyperdisk: פודים שמשתמשים באחסון מהדור הבא כמו
hyperdisk-balancedפועלים בסדרות מכונות חדשות יותר, כמו צמתיC3. - מצב בהמתנה: אם מגדירים באופן מפורש הפעלה של Pod בסדרת מכונות חדשה יותר (לדוגמה, באמצעות בוררי צמתים כדי לבקש צמתים מסוג
C3, או באמצעות הגדרה של ComputeClass בהתאמה אישית), אבל מצרפים דיסק מדור קודם מסוגpd-standard, ה-Pod נשאר במצבPendingללא הגבלת זמן. הסיבה לכך היא ש-GKE לא יכול למצוא צומת שעומד גם באילוצים של סוג המכונה וגם באילוצים של תאימות הדיסק. כשבוחרים במפורש סדרת מכונות, אתם אחראים לוודא את התאימות של PersistentVolume ושל הדיסק.
אם תנסו להפעיל Pod במחשב, וה-Pod ישתמש בסוג דיסק מתמשך שלא נתמך, תוצג הודעת אזהרה כמו זו שמופיעה ב-Pod:
AttachVolume.Attach failed for volume "pvc-d7397693-5097-4a70-9df0-b10204611053" : rpc error: code = Internal desc = unknown Attach error: failed when waiting for zonal op: operation operation-1681408439910-5f93b68c8803d-6606e4ed-b96be2e7 failed (UNSUPPORTED_OPERATION): [pd-standard] features are not compatible for creating instance.
אם באשכול יש כמה מאגרי צמתים עם סוגים שונים של מכונות, אפשר להשתמש בהכתמות של צמתים ובהעדפות של צמתים כדי להגביל את המקומות שבהם אפשר לתזמן את עומסי העבודה. לדוגמה, אפשר להשתמש בגישה הזו כדי להגביל עומס עבודה באמצעות pd-standard כך שלא יפעל במשפחת מכונות לא נתמכת.
אם אתם משתמשים בסוג דיסק האחסון המתמיד pd-extreme, אתם צריכים לוודא שהדיסק מחובר למכונת VM עם צורה מתאימה. מידע נוסף זמין במאמר תמיכה בתצורות מכונה.
המאמרים הבאים
- איך משתמשים בהרחבת נפח האחסון
- איך משתמשים בתמונות מצב של אמצעי אחסון
- איך משתמשים בשיבוט נפח
- איך יוצרים דיסקים קשיחים אזוריים
- מידע נוסף על מנהל ההתקן ב-GitHub