בדף הזה מוסבר איך להוסיף דיסק מתמשך לאשכול באמצעות מצב הגישה ReadOnlyMany. במצב הזה, כמה Pods בצמתים שונים יכולים לטעון את הדיסק לקריאה.
מידע נוסף על המצב הזה זמין במאמר בנושא מצבי גישה של נפחים קבועים.
דרישות
- האשכול צריך להריץ GKE בגרסה 1.22 ואילך.
- האשכול צריך להשתמש במנהל התקן CSI של דיסק מתמשך ב-Compute Engine.
עיצוב ואכלוס של דיסק מקור של אחסון מתמיד
כדי להשתמש בדיסק לאחסון מתמיד במצב קריאה בלבד, צריך לאכלס דיסק לאחסון מתמיד של מקור בנתונים, ואז לשכפל את אמצעי האחסון או להשתמש בתמונת מצב של אמצעי האחסון כדי להעביר את הנתונים ל-PersistentVolume חדש מסוג ReadOnlyMany.
יוצרים PersistentVolume באמצעות דיסק אחסון מתמיד קיים או באמצעות הקצאת משאבים דינמית.
מעצבים את הדיסק ומאכלסים אותו בנתונים. כדי לפרמט את הדיסק, צריך להפנות לדיסק כאל ReadWriteOnce PersistentVolume ב-Pod. GKE מעצב אוטומטית את הדיסק הבסיסי ומאפשר ל-Pod לכתוב נתונים בדיסק. כשמפעילים את ה-Pod, מוודאים שהוא כותב את הנתונים הרצויים לדיסק.
יצירת ReadOnlyMany PersistentVolume
אפשר ליצור ReadOnlyMany PersistentVolume באחת מהשיטות הבאות:
- תמונת מצב של נפח אחסון מתמיד (PersistentVolume) של מקור נתונים, שמאכלסים אותו בנתונים.
- שיבוט נפח של PersistentVolume במקור שאותו מאכלסים בנתונים.
אחסון מתמיד (persistent disk) קיים שכבר אוכלס בנתונים.
תמונת מצב של עוצמת הקול
שומרים את המניפסט של PersistentVolumeClaim הבא בשם
snapshot-pvc.yaml:kind: PersistentVolumeClaim apiVersion: v1 metadata: namespace: PVC_NAMESPACE name: PVC_NAME spec: dataSource: apiGroup: snapshot.storage.k8s.io kind: VolumeSnapshot name: SNAPSHOT_NAME accessModes: - ReadOnlyMany storageClassName: premium-rwo resources: requests: storage: STORAGE_SIZEמחליפים את מה שכתוב בשדות הבאים:
-
PVC_NAMESPACE: מרחב השמות של ה-PersistentVolumeClaim החדש. -
PVC_NAME: השם של ה-PersistentVolumeClaim החדש. -
SNAPSHOT_NAME:השם של אובייקטVolumeSnapshot. -
STORAGE_SIZE: כמות האחסון שרוצים לבקש. הערך הזה צריך להיות זהה לערך שצוין בבקשה ל-PersistentVolumeClaim של המקור.
-
מחילים את המניפסט על האשכול:
kubectl apply -f snapshot-pvc.yaml
פעולה זו יוצרת ב-Cluster טענת PersistentVolume חדשה בשם PVC_NAME, ש-GKE משתמש בה כדי להקצות באופן דינמי PersistentVolume חדש שמכיל את הנתונים מהתמונה של דיסק מקור קבוע.
שיבוט בכמות גדולה
לפני שמשתמשים בשיבוט נפח, חשוב להכיר את המגבלות של הגישה הזו.
שומרים את קובץ המניפסט הבא בשם
cloning-pvc.yaml:kind: PersistentVolumeClaim apiVersion: v1 metadata: namespace: PVC_NAMESPACE name: PVC_NAME spec: dataSource: name: SOURCE_PVC kind: PersistentVolumeClaim accessModes: - ReadOnlyMany storageClassName: STORAGE_CLASS_NAME resources: requests: storage: STORAGE_SIZEמחליפים את מה שכתוב בשדות הבאים:
-
PVC_NAMESPACE: מרחב השמות של ה-PersistentVolumeClaim החדש. -
PVC_NAME: השם של ה-PersistentVolumeClaim החדש. -
SOURCE_PVC: השם של PersistentVolumeClaim של המקור שאוכלס בנתונים. -
STORAGE_CLASS_NAME: סוג האחסון (storage class) של ה-PersistentVolumeClaim החדש. הערך הזה חייב להיות זהה לערך של סוג האחסון (storage class) של PersistentVolumeClaim המקורית. -
STORAGE_SIZE: כמות האחסון של PersistentVolumeClaim החדש. הכמות הזו צריכה להיות זהה לכמות שצוינה בבקשה של מקור PersistentVolumeClaim.
-
מחילים את המניפסט על האשכול:
kubectl apply -f cloning-pvc.yaml
הפעולה הזו יוצרת PersistentVolumeClaim בשם PVC_NAME ש-GKE משתמש בו כדי ליצור PersistentVolume חדש במצב ReadOnlyMany עם הנתונים ב-PersistentVolume של המקור.
מידע מפורט יותר על שיבוט נפחים זמין במאמר בנושא יצירת שיבוטים של נפחים מתמשכים.
דיסק אחסון מתמיד (persistent disk) קיים
שומרים את קובץ המניפסט הבא בשם
preexisting-disk-pv-pvc.yaml:apiVersion: v1 kind: PersistentVolume metadata: name: PV_NAME spec: storageClassName: "STORAGE_CLASS_NAME" capacity: storage: DISK_SIZE accessModes: - ReadOnlyMany claimRef: namespace: PVC_NAMESPACE name: PVC_NAME csi: driver: pd.csi.storage.gke.io volumeHandle: DISK_ID fsType: FS_TYPE readOnly: true --- apiVersion: v1 kind: PersistentVolumeClaim metadata: namespace: PVC_NAMESPACE name: PVC_NAME spec: storageClassName: "STORAGE_CLASS_NAME" volumeName: PV_NAME accessModes: - ReadOnlyMany resources: requests: storage: DISK_SIZEמחליפים את מה שכתוב בשדות הבאים:
-
PV_NAME: השם של PersistentVolume החדש. -
STORAGE_CLASS_NAME: השם של StorageClass החדש. -
DISK_SIZE: הגודל של דיסק האחסון המתמיד הקיים. לדוגמה,500G. -
PVC_NAMESPACE: מרחב השמות של ה-PersistentVolumeClaim החדש. -
PVC_NAME: השם של ה-PersistentVolumeClaim החדש. -
DISK_ID: המזהה של הדיסק הקשיח הקיים. הפורמט הואprojects/{project_id}/zones/{zone_name}/disks/{disk_name}עבור דיסקים לאחסון מתמיד של תחום מוגדר, אוprojects/{project_id}/regions/{region_name}/disks/{disk_name}עבור דיסקים לאחסון מתמיד אזורי. -
FS_TYPE: סוג מערכת הקבצים. אפשר להשאיר את ברירת המחדל (ext4) או להשתמש ב-xfs. אם באשכולות שלכם נעשה שימוש במאגר צמתים של Windows Server, אתם צריכים לשנות את זה ל-NTFS.
-
מחילים את המניפסט על האשכול:
kubectl apply -f preexisting-disk-pv-pvc.yaml
הפעולה הזו יוצרת PersistentVolumeClaim בשם PVC_NAME ו-PersistentVolume בשם PV_NAME במצב ReadOnlyMany.
מידע מפורט יותר על שימוש בדיסק לאחסון מתמיד שכבר קיים זמין במאמר בנושא דיסק לאחסון מתמיד שכבר קיים.
שימוש ב-PersistentVolumeClaim ב-Pod
עכשיו אפשר להפנות ל-PersistentVolumeClaim החדש במצב קריאה בלבד בכמה פודים בכמה צמתים בו-זמנית. אי אפשר לצרף דיסקים קשיחים מתמשכים במצב ReadWriteOnce לכמה צמתים בו-זמנית. מידע נוסף זמין במאמר בנושא פריסות לעומת StatefulSets.
במפרט של ה-Pod, צריך לציין את readOnly: true בקטע volumeMounts ובקטע volumes, כמו בדוגמה הבאה:
apiVersion: apps/v1
kind: Deployment
metadata:
name: multi-read
labels:
app: web-server
spec:
replicas: 3
selector:
matchLabels:
app: web-server
template:
metadata:
labels:
app: web-server
spec:
containers:
- name: web-server
image: nginx
volumeMounts:
- mountPath: /test-mnt
name: my-volume
readOnly: true
volumes:
- name: my-volume
persistentVolumeClaim:
claimName: PVC_NAME
readOnly: true
המאמרים הבאים
- מידע נוסף על הקצאה של נפחים מתמשכים ב-GKE
- איך משתמשים ב-CSI Driver של דיסק מתמשך ב-Compute Engine
- איך משתמשים בדיסקים קיימים של אחסון מתמיד (persistent disks) כ-PersistentVolumes
- איך משתמשים בתמונות מצב של נפח אחסון
- איך יוצרים שיבוטים של נפחים מתמשכים