שימוש בהרחבת נפח

ב-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.11 ואילך. בגרסאות 1.11 עד 1.14 של אשכול GKE יש תמיכה בהרחבת נפחי אחסון שמנוהלים על ידי תוספים בתוך העץ, אבל כדי להשלים את הרחבת נפח האחסון צריך להפסיק את כל ה-Pods שמשתמשים בנפח האחסון וליצור אותם מחדש.
    • כדאי לעיין במסמכים של ספק האחסון כדי לוודא שהתוסף של נפח האחסון בתוך העץ תומך בהרחבת נפח האחסון (התוסף של נפח האחסון בתוך העץ של Compute Engine Persistent Disk תומך בכך).
  • אי אפשר להרחיב את הנפח כשמשתמשים במצב גישה ReadOnlyMany.

שימוש בהרחבת נפח

כדי להשתמש בהרחבת נפח, מבצעים את המשימות הבאות:

  1. מוסיפים את allowVolumeExpansion: true ל-StorageClass, אם השדה עדיין לא קיים ב-StorageClass. לדוגמה:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: standard
    provisioner: my.driver
    ...
    allowVolumeExpansion: true
    
  2. כדי לבקש שינוי בקיבולת הנפח, עורכים את השדה 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
    
  3. כדי לאמת את השינוי, צופים ב-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 כדי להקצות רפליקות עתידיות עם גודל הווליום החדש, אפשר לבצע את השלבים הבאים.

  1. שומרים את ה-StatefulSet הקיים בקובץ:

    kubectl get StatefulSet statefulset-name -o yaml > sts-backup.yaml
    
  2. לכל PersistentVolumeClaim ב-StatefulSet, פותחים את האובייקט PersistentVolumeClaim בכלי לעריכת טקסט:

    kubectl edit pvc PVC_NAME
    
  3. מעדכנים את השדה spec.resources.requests.storage לגודל הנפח החדש, כמו בדוגמה הבאה:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    # lines omitted for clarity
    spec:
      resources:
        requests:
          storage: 14Gi
    # lines omitted for clarity
    

    פרטים נוספים מופיעים במאמר בנושא הרחבת טענות של נפחים מתמשכים.

  4. שומרים את השינויים וסוגרים את הכלי לעריכת טקסט. מחכים ש-Kubernetes יעדכן את ה-PersistentVolumeClaim עם השינויים.

  5. הסרת אובייקט StatefulSet מהאשכול תוך שמירה על הפעלת ה-Pods כ-Pods עצמאיים:

    kubectl delete sts statefulset-name --cascade=orphan
    
  6. עורכים את גודל האחסון של הווליום החדש בקובץ sts-backup.yaml שנשמר באופן מקומי, במיוחד את הערך של spec.volumeClaimTemplates.spec.resources.requests.storage

  7. יוצרים מחדש את ה-StatefulSet באשכול:

    kubectl apply -f sts-backup.yaml
    

המאמרים הבאים