ב-Google Kubernetes Engine (GKE) בגרסה 1.24 ואילך, אפשר להשתמש בתכונה של הרחבת נפח האחסון ב-Kubernetes כדי לשנות את הקיבולת של נפח אחסון קבוע אחרי שהוא נוצר.
מידע נוסף על הרחבת נפח זמין במאמרי העזרה של Kubernetes בקוד פתוח.
דרישות מוקדמות
יש כמה דרישות מוקדמות להרחבת נפח האחסון:
- אם עוצמת הקול שרוצים לשנות את הגודל שלה מנוהלת על ידי מנהל התקן CSI:
- מוודאים שגרסת אשכול GKE היא 1.16 ואילך.
אם באשכול יש מאגרי צמתים של Windows, צריך לוודא שגרסת GKE היא 1.18 ואילך.
אם אתם משתמשים במנהל התקן ה-CSI המנוהל של GKE Filestore, גרסת האשכול צריכה להיות 1.21 ואילך.
אם אתם משתמשים ב-Managed Lustre CSI driver, גרסת האשכול צריכה להיות
1.35.0-gke.2331000ומעלה. - כדי לוודא שמנהל ה-CSI תומך בהרחבת נפח האחסון, כדאי לעיין במסמכים של ספק האחסון. מנהל התקן CSI של Persistent Disk ב-Compute Engine, מנהל התקן CSI של Filestore ומנהל התקן CSI של Managed Lustre תומכים בהרחבת נפח האחסון.
- מוודאים שגרסת אשכול GKE היא 1.16 ואילך.
אם באשכול יש מאגרי צמתים של Windows, צריך לוודא שגרסת GKE היא 1.18 ואילך.
אם אתם משתמשים במנהל התקן ה-CSI המנוהל של GKE Filestore, גרסת האשכול צריכה להיות 1.21 ואילך.
אם אתם משתמשים ב-Managed Lustre CSI driver, גרסת האשכול צריכה להיות
- אם עוצמת הקול שרוצים לשנות את הגודל שלה מנוהלת על ידי תוסף עוצמת קול בתוך העץ:
- מוודאים שגרסת אשכול GKE היא 1.11 ואילך. בגרסאות 1.11 עד 1.14 של אשכול GKE יש תמיכה בהרחבת נפחי אחסון שמנוהלים על ידי תוספים בתוך העץ, אבל כדי להשלים את הרחבת נפח האחסון צריך להפסיק את כל ה-Pods שמשתמשים בנפח האחסון וליצור אותם מחדש.
- כדאי לעיין במסמכים של ספק האחסון כדי לוודא שהתוסף של נפח האחסון בתוך העץ תומך בהרחבת נפח האחסון (התוסף של נפח האחסון בתוך העץ של Compute Engine Persistent Disk תומך בכך).
- אי אפשר להרחיב את הנפח כשמשתמשים במצב גישה
ReadOnlyMany.
שימוש בהרחבת נפח
כדי להשתמש בהרחבת נפח, מבצעים את המשימות הבאות:
מוסיפים את
allowVolumeExpansion: trueל-StorageClass, אם השדה עדיין לא קיים ב-StorageClass. לדוגמה:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: standard provisioner: my.driver ... allowVolumeExpansion: trueכדי לבקש שינוי בקיבולת הנפח, עורכים את השדה
spec.resources.requests.storageשל PersistentVolumeClaim.kubectl edit pvc pvc-nameלדוגמה, אתם יכולים לשנות את ה-PVC הבא מדיסק של 30 gibibyte (GiB) לדיסק של 40GiB.
לפני העריכה:
# pvc-demo.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-demo spec: accessModes: - ReadWriteOnce resources: requests: storage: 30Giאחרי העריכה:
# pvc-demo.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-demo spec: accessModes: - ReadWriteOnce resources: requests: storage: 40Giכדי לאמת את השינוי, צופים ב-PVC. כדי להציג את ה-PVC, מריצים את הפקודה הבאה:
kubectl get pvc pvc-name -o yamlבסופו של דבר, הנפח החדש יופיע בשדה
status.capacity. לדוגמה:... spec: accessModes: - ReadWriteOnce resources: requests: storage: 40Gi storageClassName: standard volumeMode: Filesystem volumeName: pvc-078b7484-cc8d-4077-9bcb-2c17d8d4550c status: accessModes: - ReadWriteOnce capacity: storage: 40Gi ...
אם משנים ישירות את הקיבולת של PersistentVolume, יכול להיות שמערכת הקבצים של הקונטיינר תהיה שגויה. כדי לפתור את הבעיות האלה, אפשר לעיין במאמר בנושא פתרון בעיות שקשורות לשינויים בהרחבת נפח האחסון.
ניהול הרחבות של נפח אחסון ב-StatefulSets
אם אתם צריכים להגדיל את נפחי האחסון שמשמשים את ה-Pods ב-StatefulSet ב-Kubernetes, אתם צריכים לשנות את השדה spec.resources.requests.storage של ה-PersistentVolumeClaims (PVCs) שמשויכים ל-Pods. ניסיון לשנות את השדה volumeClaimTemplates ישירות באובייקט StatefulSet יגרום לשגיאה.
בנוסף, אם תגדילו את מספר הרפליקות של ה-StatefulSet, עדיין ייווצרו PVCs בגודל המקורי. כדי לשנות באופן קבוע את הגודל של אמצעי האחסון שהוקצו ל-Pods שמנוהלים על ידי StatefulSet, צריך למחוק את אובייקט ה-StatefulSet וליצור אותו מחדש עם הגודל המעודכן שצוין בשדה volumeClaimTemplates.
כדי להשאיר את ה-Pods המקוריים פעילים בזמן שמשנים את ה-StatefulSet כדי להקצות רפליקות עתידיות עם גודל הווליום החדש, אפשר לבצע את השלבים הבאים.
שומרים את ה-StatefulSet הקיים בקובץ:
kubectl get StatefulSet statefulset-name -o yaml > sts-backup.yamlלכל PersistentVolumeClaim ב-StatefulSet, פותחים את האובייקט
PersistentVolumeClaimבכלי לעריכת טקסט:kubectl edit pvc PVC_NAMEמעדכנים את השדה
spec.resources.requests.storageלגודל הנפח החדש, כמו בדוגמה הבאה:apiVersion: v1 kind: PersistentVolumeClaim metadata: # lines omitted for clarity spec: resources: requests: storage: 14Gi # lines omitted for clarityפרטים נוספים מופיעים במאמר בנושא הרחבת טענות של נפחים מתמשכים.
שומרים את השינויים וסוגרים את הכלי לעריכת טקסט. מחכים ש-Kubernetes יעדכן את ה-PersistentVolumeClaim עם השינויים.
הסרת אובייקט StatefulSet מהאשכול תוך שמירה על הפעלת ה-Pods כ-Pods עצמאיים:
kubectl delete sts statefulset-name --cascade=orphanעורכים את גודל האחסון של הווליום החדש בקובץ
sts-backup.yamlשנשמר באופן מקומי, במיוחד את הערך שלspec.volumeClaimTemplates.spec.resources.requests.storageיוצרים מחדש את ה-StatefulSet באשכול:
kubectl apply -f sts-backup.yaml