ב-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 שמשתמשים בנפח האחסון וליצור אותם מחדש.
- כדי לוודא שתוסף נפח האחסון שלכם בתוך העץ תומך בהרחבת נפח (כמו התוסף של Persistent Disk ב-Compute Engine), כדאי לעיין במסמכים של ספק האחסון.
- אי אפשר להשתמש בהרחבת נפח כשמשתמשים במצב גישה
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 גיביבייט (GiB) לדיסק של 40 גיביבייט (GiB).
לפני העריכה:
# 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
אם אתם צריכים להגדיל את הגודל של נפחי אחסון שמשמשים קבוצות Pod ב-StatefulSet ב-Kubernetes, אתם צריכים לשנות את השדה spec.resources.requests.storage של PersistentVolumeClaims (תביעות PVC) שמשויכות לקבוצות ה-Pod. ניסיון לשנות את השדה volumeClaimTemplates ישירות באובייקט StatefulSet יגרום לשגיאה.
בנוסף, אם תגדילו את מספר הרפליקות של StatefulSet, עדיין ייווצרו PVC בגודל המקורי. כדי לשנות באופן קבוע את הגודל של אמצעי האחסון שהוקצו ל-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