יצירת שיבוטים של נפחי אחסון מתמיד

במאמר הזה מוסבר איך להשתמש בשיבוט נפחי אחסון ב-Kubernetes כדי לשבט נפחי אחסון קבועים באשכולות Google Kubernetes Engine‏ (GKE).

סקירה כללית

שיבוט הוא יצירה של נפח אחסון חדש ועצמאי שהוא העתק של נפח אחסון קיים ב-Kubernetes. שיבוט דומה לתמונת מצב של נפח בכך שהוא עותק של נפח בנקודת זמן מסוימת. עם זאת, במקום ליצור אובייקט של תמונת מצב מהווליום המקורי, בתהליך השכפול של הווליום, הווליום המשוכפל מקבל את כל הנתונים מהווליום המקורי.

דרישות

כדי להשתמש בשכפול נפח אחסון ב-GKE, צריך לעמוד בדרישות הבאות:

כדי לוודא את הגרסה של מנהל התקן CSI של Persistent Disk ב-Compute Engine, מריצים את הפקודה הבאה ב-CLI של gcloud:

kubectl describe daemonsets pdcsi-node --namespace=kube-system | grep "gke.gcr.io/gcp-compute-persistent-disk-csi-driver"

אם הפלט מציג גרסה שקודמת ל-1.4.0, שדרגו ידנית את מישור הבקרה כדי לקבל את הגרסה העדכנית.

מגבלות

  • בשני אמצעי האחסון צריך להשתמש באותו מצב אמצעי אחסון. כברירת מחדל, GKE מגדיר את VolumeMode ל-ext4.
  • כל ההגבלות על יצירת שיבוט של דיסק מדיסק קיים ב-Compute Engine חלות גם על GKE.
  • אפשר ליצור שיבוט של דיסק אזורי מדיסק אזורי, אבל חשוב להכיר את המגבלות של הגישה הזו.
  • צריך לבצע את השכפול באזור תואם. משתמשים ב-allowedTopologies כדי להגביל את הטופולוגיה של אמצעי האחסון שהוקצו לאזורים ספציפיים. לחלופין, אפשר להשתמש ב-nodeSelectors או ב-Affinity and anti-affinity כדי להגביל את הפעלה של ה-Pod רק בצומת מסוים שפועל באזור תואם.
    • בשכפול בין אזורים, אזור השכפול חייב להיות זהה לאזור של דיסק המקור.
    • בשיבוט אזורי לאזורי, אחד מתחומי הרפליקה של העותק המשובט צריך להיות זהה לתחום (zone) של דיסק המקור.

שימוש בשיבוט של עוצמת הקול

כדי להקצות שיבוט של נפח, מוסיפים הפניה ל-PersistentVolumeClaim קיים באותו מרחב שמות לשדה dataSource של PersistentVolumeClaim חדש. בתרגיל הבא נראה איך להקצות נפח אחסון של מקור עם נתונים, ליצור שיבוט של נפח האחסון ולהשתמש בשיבוט.

יצירת עוצמת קול של מקור

כדי ליצור נפח מקור, פועלים לפי ההוראות במאמר שימוש ב-CSI Driver של Persistent Disk ב-Compute Engine עבור אשכולות Linux כדי ליצור StorageClass,‏ PersistentVolumeClaim ו-Pod לצריכת הנפח החדש. תשתמשו ב-PersistentVolumeClaim שתיצרו כמקור לשכפול הנפח.

הוספה של קובץ בדיקה לנפח המקור

מוסיפים קובץ בדיקה לנפח המקור. אפשר לחפש את קובץ הבדיקה הזה בשיבוט של אמצעי האחסון כדי לוודא שהשיבוט בוצע בהצלחה.

  1. יוצרים קובץ בדיקה ב-Pod:

    kubectl exec POD_NAME \
        -- sh -c 'echo "Hello World!" > /var/lib/www/html/hello.txt'
    

    מחליפים את POD_NAME בשם של Pod שמשתמש בנפח המקור. לדוגמה, אם פעלתם לפי ההוראות במאמר שימוש במנהל התקן ה-CSI של Persistent Disk ב-Compute Engine לאשכולות Linux, צריך להחליף את POD_NAME ב-web-server.

  2. מוודאים שהקובץ קיים:

    kubectl exec POD_NAME \
        -- sh -c 'cat /var/lib/www/html/hello.txt'
    

    הפלט אמור להיראות כך:

    Hello World!
    

משכפלים את אמצעי האחסון של המקור

  1. שומרים את קובץ המניפסט הבא בשם podpvc-clone.yaml:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc-clone
    spec:
      dataSource:
        name: PVC_NAME
        kind: PersistentVolumeClaim
      accessModes:
      - ReadWriteOnce
      storageClassName: STORAGE_CLASS_NAME
      resources:
        requests:
          storage: STORAGE
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫PVC_NAME: השם של מקור PersistentVolumeClaim שיצרתם בקטע יצירת נפח מקור.
    • ‫STORAGE_CLASS_NAME: השם של StorageClass לשימוש, שחייב להיות זהה ל-StorageClass של PersistentVolumeClaim במקור.
    • ‫STORAGE: כמות האחסון שרוצים לבקש, שצריכה להיות לפחות בגודל של PersistentVolumeClaim של המקור.
  2. החלת המניפסט:

    kubectl apply -f podpvc-clone.yaml
    

יצירת Pod שמשתמש בנפח המשוכפל

בדוגמה הבאה נוצר Pod שמשתמש בשיבוט הנפח שיצרתם.

  1. שומרים את קובץ המניפסט הבא בשם web-server-clone.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: web-server-clone
    spec:
      containers:
       - name: web-server-clone
         image: nginx
         volumeMounts:
           - mountPath: /var/lib/www/html
             name: mypvc
      volumes:
       - name: mypvc
         persistentVolumeClaim:
           claimName: podpvc-clone
           readOnly: false
    
  2. החלת המניפסט:

    kubectl apply -f web-server-clone.yaml
    
  3. מוודאים שקובץ הבדיקה קיים:

    kubectl exec web-server-clone \
        -- sh -c 'cat /var/lib/www/html/hello.txt'
    

    הפלט אמור להיראות כך:

    Hello World!
    

הסרת המשאבים

כדי לא לצבור חיובים לחשבון Google Cloud על המשאבים שבהם השתמשתם בדף הזה, פועלים לפי השלבים הבאים.

  1. מחיקת האובייקטים Pod:

    kubectl delete pod POD_NAME web-server-clone
    
  2. מחיקת האובייקטים PersistentVolumeClaim:

    kubectl delete pvc podpvc podpvc-clone