במאמר הזה מוסבר איך להשתמש בשיבוט של נפחי אחסון ב-Kubernetes כדי לשבט נפחי אחסון קבועים באשכולות Google Kubernetes Engine (GKE).
סקירה כללית
שיבוט הוא יצירה של נפח אחסון חדש ועצמאי שהוא העתק של נפח אחסון קיים ב-Kubernetes. שיבוט דומה לתמונת מצב של נפח אחסון בכך שהוא עותק של נפח אחסון בנקודת זמן מסוימת. עם זאת, במקום ליצור אובייקט של תמונת מצב מנפח המקור, שיבוט נפח מספק את השיבוט עם כל הנתונים מנפח המקור.
דרישות
כדי להשתמש בשכפול נפח אחסון ב-GKE, צריך לעמוד בדרישות הבאות:
- ה-PersistentVolumeClaim של המקור צריך להיות באותו מרחב שמות כמו ה-PersistentVolumeClaim של היעד.
- משתמשים במנהל התקן CSI שתומך בשכפול נפח אחסון. מנהל ההתקן של דיסק אחסון מתמיד (persistent disk) בתוך העץ לא תומך בשכפול נפח.
- ה-CSI Driver של דיסק אחסון מתמיד (persistent disk) ב-Compute Engine בגרסה 1.4.0 ואילך תומך בשיבוט נפחים, והוא מותקן כברירת מחדל באשכולות Linux חדשים שמריצים GKE בגרסה 1.22 ואילך. אפשר גם להפעיל את מנהל התקן ה-CSI של דיסק לאחסון מתמיד ב-Compute Engine באשכול קיים.
כדי לוודא את הגרסה של מנהל התקן 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 כך שהוא יפעל רק בצומת מסוים שפועל באזור תואם.
- בשכפול בין אזורים, אזור השכפול חייב להיות זהה לאזור של דיסק המקור.
- כשמשכפלים מאזור מסוים לאזור אחר, אחד מאזורי ההעתקה של השיבוט צריך להיות זהה לאזור של דיסק המקור.
שימוש בשיבוט נפח
כדי להקצות נפח של שיבוט, מוסיפים הפניה ל-PersistentVolumeClaim קיים באותו מרחב שמות לשדה dataSource של PersistentVolumeClaim חדש. בתרגיל הבא נראה איך להקצות נפח אחסון של מקור עם נתונים, ליצור שיבוט של נפח האחסון ולהשתמש בשיבוט.
יצירת נפח אחסון של מקור
כדי ליצור נפח מקור, פועלים לפי ההוראות במאמר שימוש ב-CSI Driver של דיסק אחסון מתמיד (persistent disk) ב-Compute Engine לאשכולות Linux כדי ליצור StorageClass, PersistentVolumeClaim ו-Pod לצריכת הנפח החדש. תשתמשו ב-PersistentVolumeClaim שתיצרו כמקור לשכפול הנפח.
הוספה של קובץ בדיקה לנפח המקור
מוסיפים קובץ בדיקה לנפח המקור. אפשר לחפש את קובץ הבדיקה הזה בשיבוט של אמצעי האחסון כדי לוודא שהשיבוט הצליח.
יוצרים קובץ בדיקה ב-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.מוודאים שהקובץ קיים:
kubectl exec POD_NAME \ -- sh -c 'cat /var/lib/www/html/hello.txt'הפלט אמור להיראות כך:
Hello World!
שיבוט של נפח האחסון של המקור
שומרים את קובץ המניפסט הבא בשם
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 של המקור.
-
החלת המניפסט:
kubectl apply -f podpvc-clone.yaml
יצירת Pod שמשתמש בנפח האחסון המשוכפל
בדוגמה הבאה נוצר Pod שמשתמש בשיבוט הנפח שיצרתם.
שומרים את קובץ המניפסט הבא בשם
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החלת המניפסט:
kubectl apply -f web-server-clone.yamlמוודאים שקובץ הבדיקה קיים:
kubectl exec web-server-clone \ -- sh -c 'cat /var/lib/www/html/hello.txt'הפלט אמור להיראות כך:
Hello World!
הסרת המשאבים
כדי לא לצבור חיובים לחשבון Cloud de Confiance by S3NS על המשאבים שבהם השתמשתם בדף הזה, פועלים לפי השלבים הבאים.
מוחקים את האובייקטים
Pod:kubectl delete pod POD_NAME web-server-cloneמוחקים את האובייקטים
PersistentVolumeClaim:kubectl delete pvc podpvc podpvc-clone