יצירת תמונת מצב של PersistentVolume

אתם יכולים להשתמש בתכונת הצילום של נפחי Kubernetes עבור נפחים מתמידים והקצאה דינמית באשכולות GKE.

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

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

דרישות

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

  • נפח אחסון שמשתמש במנהל התקן של Container Storage Interface ‏ (CSI) שתומך בצילומי מצב. ‫GKE ב-Azure משתמש כברירת מחדל במנהלי ההתקנים Azure Disk ו-Azure File שתומכים בתמונות מצב.

    רשימה של כל מנהלי ההתקנים של CSI שתומכים בתמונות מצב מופיעה בעמודה 'תכונות אחרות' במאמר בנושא מנהלי התקנים במסמכי Kubernetes.

  • יש לכם PersistentVolumeClaim קיים שבו אתם רוצים להשתמש לצילום תמונה. התקן PersistentVolume שמשמש כמקור לתמונת מצב צריך להיות מנוהל על ידי מנהל התקן CSI. כדי לוודא שאתם משתמשים ב-CSI driver, בודקים שלמפרט PersistentVolume יש קטע csi עם driver: disk.csi.azure.com או file.csi.azure.com. אם האשכול שלכם מקצה באופן דינמי PersistentVolumes באמצעות מנהל התקן CSI, כפי שמתואר בקטעים הבאים, הוא מנוהל על ידי מנהל התקן CSI.

לפני שמתחילים

יצירה של תמונת מצב של נפח אחסון ושימוש בה

בדוגמאות במאמר הזה מוסבר איך לבצע את המשימות הבאות:

  1. צור דוגמה לPersistentVolumeClaim וPod.
  2. יוצרים VolumeSnapshot.
  3. משחזרים את תמונת המצב של אמצעי האחסון.
  4. איך מוודאים שהשחזור פעל

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

  1. יוצרים אובייקט VolumeSnapshot כדי לבקש צילום snapshot של PersistentVolumeClaim קיים.
  2. אפשר להפנות אל VolumeSnapshot בPersistentVolumeClaim כדי לשחזר נפח לאותו snapshot או ליצור נפח חדש באמצעות ה-snapshot.

יצירת דוגמה לPersistentVolumeClaim וPod

  1. כדי ליצור את האובייקט PersistentVolumeClaim, שומרים את המניפסט הבא בתור example-pvc.yaml:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: example-pvc
    spec:
      storageClassName: standard-rwo
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 1Gi
    

    במאפיין spec.storageClassName, אפשר לציין כל סוג אחסון שמשתמש במנהל התקן CSI נתמך. בדוגמה הזו נשתמש בסוג האחסון standard-rwo שמוגדר כברירת מחדל.

  2. החלת המניפסט:

    kubectl apply -f example-pvc.yaml
    
  3. יוצרים Pod שכותב את התאריך והשעה הנוכחיים לנפח. כדי ליצור Pod, שומרים את המניפסט הבא בתור snapshot-shell.yaml:

    apiVersion: v1
    kind: Pod
    metadata:
      name: snapshot-shell
    spec:
      terminationGracePeriodSeconds: 10
      containers:
      - name: linux
        image: ubuntu:bionic
        command: ["/bin/sh"]
        args: ["-c", "echo $(date -u) >> /data/out.txt"]
        volumeMounts:
        - name: snapshot-volume
          mountPath: /data
      restartPolicy: Never
      volumes:
      - name: snapshot-volume
        persistentVolumeClaim:
          claimName: example-pvc
    
  4. החלת המניפסט:

    kubectl apply -f snapshot-shell.yaml
    
  5. בודקים את הסטטוס של ה-Pod:

    kubectl get pod snapshot-shell
    

    יכול להיות שיעבור קצת זמן עד שה-Pod יפעל ויסיים את הפעולה. אפשר להריץ את הפקודה הקודמת עד שיוצג פלט שדומה לזה:

    NAME             READY   STATUS      RESTARTS   AGE
    snapshot-shell   0/1     Completed   0          24s
    

יצירת VolumeSnapshot

אובייקט VolumeSnapshot הוא בקשה לצילום מצב של אובייקט PersistentVolumeClaim קיים. כשיוצרים אובייקט VolumeSnapshot, האובייקט הזה נוצר ומקושר אוטומטית לאובייקט VolumeSnapshotContent, שהוא משאב באשכול כמו אובייקט PersistentVolume.

  1. שומרים את קובץ המניפסט הבא בשם volumesnapshot.yaml.

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: example-snapshot
    spec:
      source:
        persistentVolumeClaimName: example-pvc
    
  2. החלת המניפסט:

    kubectl apply -f volumesnapshot.yaml
    

    אחרי שיוצרים תמונת מצב של נפח אחסון, האשכול יוצר אובייקט VolumeSnapshotContent תואם. האובייקט הזה מאחסן את התמונה ואת הקישורים של אובייקטים מסוג VolumeSnapshot. אתם לא מקיימים אינטראקציה ישירה עם אובייקטים של VolumeSnapshotContents.

  3. בודקים שהאובייקט VolumeSnapshotContents נוצר באשכול:

    kubectl get volumesnapshotcontents
    

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

    NAME                                               AGE
    snapcontent-cee5fb1f-5427-11ea-a53c-42010a1000da   55s
    

אישור שה-snapshot של עוצמת הקול מוכן

אחרי שנוצר תוכן התמונה של אמצעי האחסון, מנהל ההתקן של CSI שצוין ב-VolumeSnapshotClass יוצר תמונה במערכת האחסון המתאימה. אחרי שהאשכול יוצר תמונת מצב במערכת האחסון ומקשר אותה לאובייקט VolumeSnapshot, תמונת המצב מוכנה לשימוש. כדי לבדוק את הסטטוס, מריצים את הפקודה הבאה:

kubectl get volumesnapshot \
  -o custom-columns='NAME:.metadata.name,READY:.status.readyToUse'

אם תמונת המצב מוכנה לשימוש, הפלט אמור להיראות כך:

NAME                    READY
example-snapshot        true

שחזור תמונת המצב של עוצמת הקול

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

כדי להפנות אל VolumeSnapshot בתוך PersistentVolumeClaim, מוסיפים את השדה dataSource אל PersistentVolumeClaim.

בדוגמה הזו, אתם יוצרים הפניה אל VolumeSnapshot שיצרתם ב-PersistentVolumeClaim חדש ויוצרים Pod שמטמיע את PersistentVolumeClaim.

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

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
     name: pvc-restore
    spec:
     dataSource:
       name: example-snapshot
       kind: VolumeSnapshot
       apiGroup: snapshot.storage.k8s.io
     storageClassName: standard-rwo
     accessModes:
       - ReadWriteOnce
     resources:
       requests:
         storage: 1Gi
    
  2. החלת המניפסט:

    kubectl apply -f pvc-restore.yaml
    
  3. מפעילים Pod זמני שמטמיע את ה-PVC ב-Pod ומדפיס את התוכן של out.txt ביומנים.

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

    apiVersion: v1
    kind: Pod
    metadata:
      name: restore-verify
    spec:
      volumes:
        - name: restore-data
          persistentVolumeClaim:
            claimName: pvc-restore
      containers:
        - name: shell-container
          image: ubuntu:bionic
          volumeMounts:
            - mountPath: "/data"
              name: restore-data
          command: [ "/bin/sh" ]
          args: ["-c", "cat /data/out.txt", "exit", "1"]
      restartPolicy: Never
    
  4. החלת המניפסט:

    kubectl apply -f restore-log.yaml
    

בודקים שהתמונה שוחזרה בהצלחה

ה-Pod שיצרתם בשלב הקודם קורא את הנתונים מתמונת המצב. כדי להציג את הנתונים מהתמונה, משתמשים בפקודה kubectl logs.

kubectl logs restore-verify

הפלט צריך לכלול חותמת זמן מהתמונה.

הסרת המשאבים

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

  1. מחיקת VolumeSnapshot:

    kubectl delete volumesnapshot example-snapshot
    

  2. מחיקת ה-Pod הזמני:

    kubectl delete -f restore-log.yaml
    
  3. מוחקים את ה-Pod:

    kubectl delete -f snapshot-shell.yaml
    
  4. מוחקים את האובייקטים PersistentVolumeClaim:

    kubectl delete pvc example-pvc pvc-restore
    

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