יצירת תמונת מצב של 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.
לפני שמתחילים
יצירה של תמונת מצב של נפח אחסון ושימוש בה
בדוגמאות במאמר הזה מוסבר איך לבצע את המשימות הבאות:
- צור דוגמה ל
PersistentVolumeClaimוPod. - יוצרים VolumeSnapshot.
- משחזרים את תמונת המצב של אמצעי האחסון.
- איך מוודאים שהשחזור פעל
כדי להשתמש בתמונת מצב של נפח, צריך לבצע את השלבים הבאים:
- יוצרים אובייקט
VolumeSnapshotכדי לבקש צילום snapshot של PersistentVolumeClaim קיים. - אפשר להפנות אל
VolumeSnapshotבPersistentVolumeClaimכדי לשחזר נפח לאותו snapshot או ליצור נפח חדש באמצעות ה-snapshot.
יצירת דוגמה לPersistentVolumeClaim וPod
כדי ליצור את האובייקט
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שמוגדר כברירת מחדל.החלת המניפסט:
kubectl apply -f example-pvc.yamlיוצרים 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החלת המניפסט:
kubectl apply -f snapshot-shell.yamlבודקים את הסטטוס של ה-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.
שומרים את קובץ המניפסט הבא בשם
volumesnapshot.yaml.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: example-snapshot spec: source: persistentVolumeClaimName: example-pvcהחלת המניפסט:
kubectl apply -f volumesnapshot.yamlאחרי שיוצרים תמונת מצב של נפח אחסון, האשכול יוצר אובייקט
VolumeSnapshotContentתואם. האובייקט הזה מאחסן את התמונה ואת הקישורים של אובייקטים מסוגVolumeSnapshot. אתם לא מקיימים אינטראקציה ישירה עם אובייקטים שלVolumeSnapshotContents.בודקים שהאובייקט
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.
שומרים את קובץ המניפסט הבא בשם
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החלת המניפסט:
kubectl apply -f pvc-restore.yamlמפעילים 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החלת המניפסט:
kubectl apply -f restore-log.yaml
בודקים שהתמונה שוחזרה בהצלחה
ה-Pod שיצרתם בשלב הקודם קורא את הנתונים מתמונת המצב. כדי להציג את הנתונים מהתמונה, משתמשים בפקודה kubectl logs.
kubectl logs restore-verify
הפלט צריך לכלול חותמת זמן מהתמונה.
הסרת המשאבים
כדי לא לצבור חיובים על המשאבים שבהם השתמשתם בדף הזה, פועלים לפי השלבים הבאים.
מחיקת
VolumeSnapshot:kubectl delete volumesnapshot example-snapshotמחיקת ה-Pod הזמני:
kubectl delete -f restore-log.yamlמוחקים את ה-Pod:
kubectl delete -f snapshot-shell.yamlמוחקים את האובייקטים
PersistentVolumeClaim:kubectl delete pvc example-pvc pvc-restore
המאמרים הבאים
- קוראים את מסמכי התיעוד של Kubernetes בנושא Volume Snapshot.
- התקנה של מנהלי התקנים נוספים של CSI.