בדף הזה מוסבר איך לגבות ולשחזר את האחסון הבסיסי של Filestore שמשויך לאשכולות GKE באמצעות תמונות מצב של נפח Kubernetes.
יצירה של תמונת מצב של נפח אחסון ב-Kubernetes שקולה ליצירה של גיבוי של Filestore.
מידע נוסף זמין במאמר בנושא תמונות מצב של נפחים ב-Kubernetes.
דרישות
כדי להשתמש בתמונות מצב של נפחים ב-GKE, צריך לעמוד בדרישות הבאות:
- צריך לפרוס את Filestore CSI driver. יש תמיכה רק במסלולי השירות הבאים של Filestore:
| רמת שירות | סוג השיתוף | הגרסה המינימלית של GKE ל-NFSv3 | הגרסה המינימלית של GKE ל-NFSv4.1 |
|---|---|---|---|
| Enterprise | שיתוף יחיד, שיתוף מרובה | 1.25 | 1.33 (מניה אחת בלבד) |
| אזורי (1 TiB – 9.75 TiB) | שיתוף יחיד | 1.27 | 1.33 |
| אזורי (10 TiB - 100 TiB) | שיתוף יחיד | 1.27 | 1.33 |
| אזורי (1 TiB - 100 TiB) | שיתוף יחיד | 1.33.4-gke.1172000 | 1.33.4-gke.1172000 |
| כונן HDD בסיסי (100 GiB – 63.9 TiB)* | שיתוף יחיד | 1.33 | לא נתמך |
| HDD בסיסי | שיתוף יחיד | 1.21 | לא נתמך |
| SSD בסיסי | שיתוף יחיד | 1.21 | לא נתמך |
* בהתאם לגישה לתכונה של מכונות בקיבולת קטנה, טווח הקיבולת הנמוך של מכונות אזוריות ב-Filestore יכול להיות 100 GiB עד 10,239 GiB או 1 TiB עד 9.75 TiB. מידע נוסף זמין במאמר בנושא איך יוצרים אירועים קטנים של Filestore.
- להשתמש בגרסאות של מישור הבקרה 1.17 ואילך.
כדי להשתמש במנהל התקן ה-CSI של Filestore ב-
VolumeSnapshot, צריך להשתמש במספר הגרסה של GKE שרלוונטי לרמת השירות שלכם.
- יש לכם
PersistentVolumeClaimקיים שבו אתם רוצים להשתמש לצילום תמונה. ה-PersistentVolumeשמשמש כמקור לתמונת מצב צריך להיות מנוהל על ידי מנהל התקן CSI. כדי לוודא שאתם משתמשים בדרייבר CSI, בודקים שלמפרטPersistentVolumeיש קטעcsiעםdriver: pd.csi.storage.gke.ioאוfilestore.csi.storage.gke.io. אםPersistentVolumeמוקצה באופן דינמי על ידי מנהל התקן CSI, כפי שמתואר בקטעים הבאים, הוא מנוהל על ידי מנהל התקן CSI.
מגבלות
לנפחי אחסון של תמונת מצב יש את אותן הגבלות גודל כמו לנפחי אחסון רגילים. לדוגמה, גודל התמונות של Filestore צריך להיות 1 TiB או יותר ברמת ה-HDD הבסיסית.
מנהל ההתקן של Filestore CSI לא תומך בהקצאה דינמית או בתהליכי עבודה של גיבויים עבור רמת השירות האזורית של Filestore:
אפשר לגבות רק שיתוף אחד בכל פעם. המשמעות היא שאי אפשר ליצור גיבוי עם כמה שיתופים או לשחזר גיבוי למופע עם כמה שיתופים. עם זאת, בקשות גיבוי משני שיתופים שונים בשני מופעים שונים של Filestore יפעלו בו-זמנית.
אפשר לשחזר גיבוי של מופע בסיסי למופע המקור באותה רמת שירות, למופע שכבר קיים או למופע חדש. אם בוחרים מופע חדש, אפשר לבחור בין מופע HDD בסיסי לבין מופע SSD בסיסי, בלי קשר לרמת המופע של המקור.
אי אפשר לשחזר מופעים אזוריים, מופעים אזוריים ומכונות ארגוניות למקור או למופע קיים, אלא רק למופע חדש. רמת המופע החדש לא חייבת להיות זהה לרמת מופע המקור. לדוגמה, אפשר לשחזר גיבוי של מכונה אזורית למכונה אזורית. הקיבולת שהוקצתה למופע החדש צריכה להיות שווה לקיבולת שהוקצתה למופע המקור או גדולה ממנה.
רשימה מלאה של מגבלות על התכונות זמינה במאמר מגבלות על התכונות של Filestore Backup.
לפני שמתחילים
לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:
- מפעילים את ממשק Google Kubernetes Engine API. הפעלת Google Kubernetes Engine API
- אם רוצים להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה
gcloud components updateכדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
יצירה של snapshot של נפח ושימוש בו
בדוגמאות במאמר הזה מוסבר איך לבצע את המשימות הבאות:
- יצירת
PersistentVolumeClaimוDeployment. - מוסיפים קובץ ל-
PersistentVolumeשבו משתמשDeployment. - יוצרים
VolumeSnapshotClassכדי להגדיר את ה-snapshot. - יצירת קובץ snapshot של עוצמת הקול של
PersistentVolume. - מוחקים את קובץ הבדיקה.
- משחזרים את
PersistentVolumeלקובץ ה-snapshot שיצרתם. - איך מוודאים שהשחזור פעל
כדי להשתמש בתמונת מצב של נפח, צריך לבצע את השלבים הבאים:
- יוצרים אובייקט
VolumeSnapshotClassכדי לציין את מנהל ההתקן של CSI ואת מדיניות המחיקה של התמונה. - יוצרים אובייקט
VolumeSnapshotכדי לבקש תמונת מצב שלPersistentVolumeClaimקיים. - אפשר להפנות אל
VolumeSnapshotבPersistentVolumeClaimכדי לשחזר נפח לאותו snapshot או ליצור נפח חדש באמצעות ה-snapshot.
יצירת PersistentVolumeClaim וDeployment
כדי ליצור את האובייקט
PersistentVolumeClaim, שומרים את המניפסט הבא בתורmy-pvc.yaml:Filestore
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: storageClassName: enterprise-rwx accessModes: - ReadWriteMany resources: requests: storage: 1Tiבדוגמה הזו נוצר PVC של Filestore ברמת Enterprise. מידע נוסף זמין במאמר בנושא גישה למופעי Filestore באמצעות מנהל התקנים של Filestore CSI.
במאפיין
spec.storageClassName, אפשר לציין כל סוג אחסון שמשתמש במנהל התקן CSI נתמך.החלת המניפסט:
kubectl apply -f my-pvc.yamlכדי ליצור
Deployment, שומרים את קובץ המניפסט הבא בשםmy-deployment.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: hello-app spec: selector: matchLabels: app: hello-app template: metadata: labels: app: hello-app spec: containers: - name: hello-app image: google/cloud-sdk:slim args: [ "sleep", "3600" ] volumeMounts: - name: sdk-volume mountPath: /usr/share/hello/ volumes: - name: sdk-volume persistentVolumeClaim: claimName: my-pvcהחלת המניפסט:
kubectl apply -f my-deployment.yamlבודקים את הסטטוס של
Deployment:kubectl get deployment hello-appיכול להיות שיעבור קצת זמן עד ש
Deploymentיהיה מוכן. אפשר להריץ את הפקודה הקודמת עד שיוצג פלט שדומה לזה:NAME READY UP-TO-DATE AVAILABLE AGE hello-app 1/1 1 1 2m55s
הוספת קובץ בדיקה לנפח האחסון
תכין רשימה של
PodsבDeployment:kubectl get pods -l app=hello-appהפלט אמור להיראות כך:
NAME READY STATUS RESTARTS AGE hello-app-6d7b457c7d-vl4jr 1/1 Running 0 2m56sיוצרים קובץ בדיקה ב-
Pod:kubectl exec POD_NAME \ -- sh -c 'echo "Hello World!" > /usr/share/hello/hello.txt'מחליפים את
POD_NAMEבשם שלPod.מוודאים שהקובץ קיים:
kubectl exec POD_NAME \ -- sh -c 'cat /usr/share/hello/hello.txt'הפלט אמור להיראות כך:
Hello World!
יצירת אובייקט VolumeSnapshotClass
יוצרים אובייקט VolumeSnapshotClass כדי לציין את מנהל ההתקן של CSI ואת deletionPolicy עבור קובץ ה-snapshot של עוצמת הקול. אפשר להפנות לאובייקטים של VolumeSnapshotClass כשיוצרים אובייקטים של VolumeSnapshot.
שומרים את קובץ המניפסט הבא בשם
volumesnapshotclass.yaml.Filestore
apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: my-snapshotclass driver: filestore.csi.storage.gke.io parameters: type: backup deletionPolicy: Deleteבדוגמה הזו:
- השדה
driverמשמש את מנהל ההתקן של CSI להקצאת תמונת המצב. בדוגמה הזו,filestore.csi.storage.gke.ioמשתמש במנהל התקן ה-CSI של Filestore. - השדה
deletionPolicyאומר ל-GKE מה לעשות עם האובייקטVolumeSnapshotContentועם התמונה הבסיסית של מצב המערכת כשמוחקים את האובייקטVolumeSnapshotשמשויך אליו. מצייניםDeleteכדי למחוק את האובייקטVolumeSnapshotContentואת התמונה המיידית הבסיסית. מצייניםRetainאם רוצים לשמור אתVolumeSnapshotContentואת הצילום מהמצלמה שמתחתיו.
- השדה
החלת המניפסט:
kubectl apply -f volumesnapshotclass.yaml
יצירת VolumeSnapshot
אובייקט VolumeSnapshot הוא בקשה לצילום מצב של אובייקט PersistentVolumeClaim קיים. כשיוצרים אובייקט VolumeSnapshot, GKE יוצר אותו באופן אוטומטי ומקשר אותו לאובייקט VolumeSnapshotContent, שהוא משאב באשכול כמו אובייקט PersistentVolume.
שומרים את קובץ המניפסט הבא בשם
volumesnapshot.yaml.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: my-snapshot spec: volumeSnapshotClassName: my-snapshotclass source: persistentVolumeClaimName: my-pvcהחלת המניפסט:
kubectl apply -f volumesnapshot.yamlאחרי שיוצרים
Volumeתמונת מצב, GKE יוצר אובייקטVolumeSnapshotContentתואם באשכול. האובייקט הזה מאחסן את התמונה ואת הקישורים של אובייקטים מסוגVolumeSnapshot. אין אינטראקציה ישירה עם אובייקטים שלVolumeSnapshotContents.בודקים ש-GKE יצר את האובייקט
VolumeSnapshotContents:kubectl get volumesnapshotcontentsהפלט אמור להיראות כך:
NAME AGE snapcontent-cee5fb1f-5427-11ea-a53c-42010a1000da 55s
אחרי שנוצר תוכן התמונה של Volume, מנהל ההתקן של CSI שצוין ב-VolumeSnapshotClass יוצר תמונה במערכת האחסון המתאימה. אחרי ש-GKE יוצר תמונת מצב במערכת האחסון ומקשר אותה לאובייקט VolumeSnapshot באשכול, תמונת המצב מוכנה לשימוש. כדי לבדוק את הסטטוס, מריצים את הפקודה הבאה:
kubectl get volumesnapshot \
-o custom-columns='NAME:.metadata.name,READY:.status.readyToUse'
אם תמונת המצב מוכנה לשימוש, הפלט ייראה כך:
NAME READY
my-snapshot true
מחיקת קובץ הבדיקה
מוחקים את קובץ הבדיקה שיצרתם:
kubectl exec POD_NAME \ -- sh -c 'rm /usr/share/hello/hello.txt'מוודאים שהקובץ כבר לא קיים:
kubectl exec POD_NAME \ -- sh -c 'cat /usr/share/hello/hello.txt'הפלט אמור להיראות כך:
cat: /usr/share/hello/hello.txt: No such file or directory
שחזור תמונת המצב של עוצמת הקול
שומרים את קובץ המניפסט הבא בשם
pvc-restore.yaml:Filestore
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-restore spec: dataSource: name: my-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io storageClassName: enterprise-rwx accessModes: - ReadWriteMany resources: requests: storage: 1Tiהחלת המניפסט:
kubectl apply -f pvc-restore.yamlמעדכנים את הקובץ
my-deployment.yamlכדי להשתמש בPersistentVolumeClaimהחדש:... volumes: - name: my-volume persistentVolumeClaim: claimName: pvc-restoreהחלת המניפסט המעודכן:
kubectl apply -f my-deployment.yaml
בודקים שהתמונה שוחזרה בהצלחה
מקבלים את השם של
Podהחדש שנוצר על ידי GKE עבורDeploymentהמעודכן:kubectl get pods -l app=hello-app
מוודאים שקובץ הבדיקה קיים:
kubectl exec NEW_POD_NAME \
-- sh -c 'cat /usr/share/hello/hello.txt'
מחליפים את NEW_POD_NAME בשם של Pod
החדש שנוצר על ידי GKE.
הפלט אמור להיראות כך:
Hello World!
ייבוא תמונת מצב קיימת
אפשר להשתמש בתמונת מצב של נפח אחסון שנוצרה מחוץ לאשכול הנוכחי כדי להקצות באופן ידני את אובייקט VolumeSnapshotContents. לדוגמה, אתם יכולים לאכלס נפח אחסון ב-GKE עם תמונת מצב שלGoogle Cloud משאב אחר שנוצר באשכול אחר.
מאתרים את השם של התמונה.
מסוף Google Cloud
Google Cloud CLI
מריצים את הפקודה הבאה:
gcloud compute snapshots listהפלט אמור להיראות כך:
NAME DISK_SIZE_GB SRC_DISK STATUS snapshot-5e6af474-cbcc-49ed-b53f-32262959a0a0 1 us-central1-b/disks/pvc-69f80fca-bb06-4519-9e7d-b26f45c1f4aa READYשומרים את קובץ המניפסט
VolumeSnapshotהבא בשםrestored-snapshot.yaml.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: restored-snapshot spec: volumeSnapshotClassName: my-snapshotclass source: volumeSnapshotContentName: restored-snapshot-contentהחלת המניפסט:
kubectl apply -f restored-snapshot.yamlשומרים את קובץ המניפסט
VolumeSnapshotContentבשםrestored-snapshot-content.yaml. מחליפים את השדהsnapshotHandleבמזהה הפרויקט ובשם התמונה. כדי שהקישור הדו-כיווני יהיה תקף, גםvolumeSnapshotRef.nameוגםvolumeSnapshotRef.namespaceצריכים להצביע עלVolumeSnapshotשנוצר קודם.apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotContent metadata: name: restored-snapshot-content spec: deletionPolicy: Retain driver: filestore.csi.storage.gke.io source: snapshotHandle: projects/PROJECT_ID/global/snapshots/SNAPSHOT_NAME volumeSnapshotRef: kind: VolumeSnapshot name: restored-snapshot namespace: defaultהחלת המניפסט:
kubectl apply -f restored-snapshot-content.yamlשומרים את קובץ המניפסט
PersistentVolumeClaimהבא בשםrestored-pvc.yaml. בקר האחסון של Kubernetes יחפשVolumeSnapshotבשםrestored-snapshotואז ינסה למצוא או ליצור באופן דינמיPersistentVolumeכמקור הנתונים. אחר כך תוכלו להשתמש ב-PVC הזה ב-Pod כדי לגשת לנתונים המשוחזרים.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: restored-pvc spec: dataSource: name: restored-snapshot kind: VolumeSnapshot apiGroup: snapshot.storage.k8s.io storageClassName: enterprise-rwx accessModes: - ReadWriteOnce resources: requests: storage: 1Giהחלת המניפסט:
kubectl apply -f restored-pvc.yamlשומרים את קובץ המניפסט הבא
Podבתורrestored-pod.yamlבהתאם לPersistentVolumeClaim. מנהל ההתקן של CSI יקצהPersistentVolumeויאכלס אותו מתוך תמונת המצב.apiVersion: v1 kind: Pod metadata: name: restored-pod spec: containers: - name: busybox image: busybox args: - sleep - "3600" volumeMounts: - name: source-data mountPath: /demo/data volumes: - name: source-data persistentVolumeClaim: claimName: restored-pvc readOnly: falseהחלת המניפסט:
kubectl apply -f restored-pod.yamlמוודאים שהקובץ שוחזר:
kubectl exec restored-pod -- sh -c 'cat /demo/data/hello.txt'
הסרת המשאבים
כדי לא לצבור חיובים בחשבון Google Cloud על המשאבים שבהם השתמשתם בדף הזה:
מחיקת
VolumeSnapshot:kubectl delete volumesnapshot my-snapshotמחיקת
VolumeSnapshotClass:kubectl delete volumesnapshotclass my-snapshotclassמחיקת
Deployment:kubectl delete deployments hello-appמוחקים את האובייקטים
PersistentVolumeClaim:kubectl delete pvc my-pvc pvc-restore
המאמרים הבאים
- קוראים את התיעוד בנושא Kubernetes Volume Snapshot.
- מידע נוסף על הרחבת נפח
- איך מתקינים ידנית דרייבר CSI
- מידע על Filestore כאפשרות לאחסון קבצים ב-GKE.