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

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

אם אתם צריכים להגדיל את הגודל של נפחי אחסון שמשמשים קבוצות Pod ב-StatefulSet ב-Kubernetes, אתם צריכים לשנות את השדה spec.resources.requests.storage של PersistentVolumeClaims (תביעות PVC) שמשויכות לקבוצות ה-Pod. ניסיון לשנות את השדה volumeClaimTemplates ישירות באובייקט StatefulSet יגרום לשגיאה.

בנוסף, אם תגדילו את מספר הרפליקות של StatefulSet, עדיין ייווצרו PVC בגודל המקורי. כדי לשנות באופן קבוע את הגודל של אמצעי האחסון שהוקצו ל-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
    

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