בדף הזה מוסברים מושגי האחסון של תוכנת Google Distributed Cloud ל-VMware בלבד.
סיכום
Google Distributed Cloud משתלב עם מערכות חיצוניות לאחסון בלוקים או קבצים באמצעות:
- מנהל ההתקן של ממשק אחסון הקונטיינרים (CSI) של vSphere
- מנהלי התקנים של CSI של צד שלישי
- יישומי פלאגין של Kubernetes לנפחי אחסון בעץ
מאגרי נתונים של vSphere
כשיוצרים אשכול אדמין, מציינים מאגר נתונים קיים ב-vSphere לנתוני ה-etcd של האשכול.
כשיוצרים אשכול משתמש, אפשר להשתמש באותו מאגר נתונים כמו של אשכול הניהול, או לציין מאגר נתונים אחר. אפשר גם לציין מאגרי נתונים למאגרי צמתים ספציפיים.
מאגרי הנתונים של vSphere שמשמשים את אשכולות האדמין והמשתמשים יכולים להיות מגובים על ידי NFS, vSAN או VMFS במכשיר לאחסון ולאחזור בלוקים, כמו מערך אחסון חיצוני. בסביבה עם כמה מארחים, כל התקן בלוקים צריך להיות מחובר לכל המארחים בסביבה, וצריך להגדיר את מאגר הנתונים בכל מארח באמצעות האפשרות Mount Datastore on Additional Hosts.
StorageClasses
כשיוצרים PersistentVolumeClaim, אפשר לציין StorageClass שמספק מידע על אופן הקצאת האחסון. אם לא מציינים StorageClass, המערכת משתמשת ב-StorageClass שמוגדר כברירת מחדל.
StorageClass של אשכול אדמין
באשכולות אדמין יש StorageClass בשם standard, והוא מוגדר כברירת המחדל של StorageClass. ב-StorageClass standard, הפלאגין של vSphere in-tree volume מופיע בתור ה-provisioner.
כדי להציג את StorageClass של standard:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get storageclass \
standard --output yaml
בפלט אפשר לראות ש-standard הוא ה-StorageClass שמוגדר כברירת מחדל, ושהמנהל הוא הפלאגין של vSphere לנפח בעץ, kubernetes.io/vsphere-volume. אפשר גם לראות את השם של מאגר נתונים ב-vSphere.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
annotations:
storageclass.kubernetes.io/is-default-class: "true"
...
labels:
bundle.gke.io/component-name: admin-storage-class
name: standard
...
parameters:
datastore: vsanDatastore
provisioner: kubernetes.io/vsphere-volume
...
StorageClasses באשכולות של משתמשים
באשכולות של משתמשים, יש StorageClass בשם standard ו-StorageClass נוסף בשם standard-rwo.
StorageClass standard-rwo מוגדר כברירת המחדל של StorageClass, ומנהל ההתקן של vSphere CSI מופיע בו כ-provisioner.
כדי להציג את StorageClass של standard-rwo:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get storageclass \
standard-rwo --output yaml
בפלט אפשר לראות ש-standard-rwo הוא ה-StorageClass שמוגדר כברירת מחדל, ושהמנהל הוא מנהל ההתקן של vSphere CSI, csi.vsphere.vmware.com. אפשר גם לראות את כתובת ה-URL של מאגר נתונים ב-vSphere:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
annotations:
storageclass.kubernetes.io/is-default-class: "true"
...
labels:
bundle.gke.io/component-name: user-vsphere-csi-driver-addon
...
name: standard-rwo
...
parameters:
datastoreURL: ds:///vmfs/volumes/vsan:52fb6ca22be2454e-e67f620175964a9f/
provisioner: csi.vsphere.vmware.com
...
יישומי פלאגין של Kubernetes לנפחי אחסון בעץ
Kubernetes כולל מספר פלאגינים של אמצעי אחסון בעץ. עם זאת, רוב הפלאגינים האלה של אמצעי אחסון בעץ הוצאו משימוש (כולל הפלאגין של אמצעי אחסון בעץ של vSphere). מידע נוסף זמין בפרויקט העברת CSI.
העברת CSI למנהל ההתקן של האחסון ב-vSphere
בעבר, הפלאגין של ווליום vSphere בעץ היה המקצה של StorageClass שמוגדר כברירת מחדל באשכולות של משתמשים. אבל עכשיו הפלאגין של vSphere volume בעץ הוצא משימוש, ומנהל ההתקן של vSphere CSI הוא המקצה של StorageClass שמוגדר כברירת מחדל באשכולות המשתמשים. מומלץ להשתמש במנהל ההתקן של vSphere CSI במקום בפלאגין של אמצעי האחסון בעץ.
החל מגרסה 1.15 של Google Distributed Cloud, התכונה של העברת Kubernetes CSI מופעלת כברירת מחדל לפלאגין של נפח vSphere בעץ. כלומר, אם עומס עבודה משתמש בנפח vSphere בעץ, כל הקריאות לפעולות האחסון הפנימיות מופנות אוטומטית למנהל ההתקן של vSphere CSI.
לדוגמה, נניח שב-PersistentVolumeClaim מצוין standard StorageClass, שמפרט את הפלאגין של vSphere in-tree volume, kubernetes.io/vsphere-volume, בתור ה-provisioner. לאחר מכן, כל עומס עבודה שמשתמש ב-PersistentVolumeClaim הזה יפנה את הקריאות לפעולות האחסון שלו למנהל ההתקן של vSphere CSI, csi.vsphere.vmware.com.
בדיקות קדם הפעלה
כשיוצרים אשכול חדש או משדרגים אשכול, מתבצעות בדיקות מקדימות כדי לוודא שהסביבה מתאימה להעברה ל-CSI.
לדוגמה, בדיקות קדם ההפעלה:
- מוודאים שגרסאות vCenter ו-ESXI מתאימות.
- אם יש PersistentVolumes של vSphere בעץ, מוודאים שמנהל ההתקן של vSphere CSI מופעל.
- מוודאים שב-vSphere StorageClasses אין פרמטרים מסוימים שמתעלמים מהם אחרי ההעברה ל-CSI.
- אימות הערות ב-PersistentVolumes וב-PersistentVolumeClaims שנוצרו באופן סטטי בתוך העץ, שנדרשים להעברת CSI.
- מוודאים שהאשכול יכול להריץ בהצלחה עומס עבודה באמצעות נפח CSI שהוקצה על ידי מנהל ההתקן של vSphere CSI.
מידע נוסף זמין במאמר הרצת בדיקות טרום-טיסה.
בעיות מוכרות
יש כמה בעיות ידועות שקשורות למנהל ההתקן של vSphere CSI. למידע נוסף ולפתרונות עקיפים, קראו את הקטע Known Issues בנתוני הגרסה של VMWare vSphere CSI Driver 3.0.
השלמת המעבר ל-CSI
כשתכונת ההעברה של Kubernetes CSI מופעלת כברירת מחדל בגרסה 1.15, ה-PersistentVolume שמגובה על ידי הפלאגין של vSphere volume בתוך העץ ממשיך לפעול בסביבה של CSI בלבד, ורק מפנה קריאות לפעולות של הפלאגין בתוך העץ לפלאגין של CSI. מכיוון שהמפרט של PersistentVolume לא ניתן לשינוי, המפרט יהיה זהה לזה של הפלאגין של אמצעי האחסון בעץ.
לכן, קבוצת התכונות המלאה של CSI, כמו Volume Expansion ו-Volume Snapshot, לא זמינה לנפחים כאלה. כדי לנצל את התכונות האלה, צריך להעביר את עומס העבודה עם שמירת המצב (stateful) באופן מלא ל-CSI על ידי יצירה מחדש של מפרט המשאבים ב-Kubernetes עם שדות CSI. פיתחנו כלי אוטומטי שיעזור לכם להעביר עומסי עבודה עם שמירת מצב ל-CSI בלי זמן השבתה של האפליקציה, כדי שתוכלו להשתמש בכל התכונות של CSI.
שימוש בנהגים של צד שלישי
אם אתם רוצים להקצות נפחי אחסון שהם לא מאגרי נתונים של vSphere, אתם יכולים ליצור StorageClass חדש באשכול שמשתמש במנהל התקן אחסון אחר. אחר כך תוכלו להגדיר את StorageClass כברירת המחדל של האשכול, או להגדיר את עומסי העבודה כך שישתמשו ב-StorageClass (דוגמה ל-StatefulSet).
שותפי אחסון
אנחנו משתפים פעולה עם ספקי אחסון רבים כדי להתאים את מערכות האחסון שלהם ל-Google Distributed Cloud. לרשימה המלאה של שותפי האחסון המורשים
הרחבת הנפח
אפשר להגדיל את הנפח של PersistentVolume אחרי שהוא הוקצה, על ידי עריכת בקשת הקיבולת ב-PersistentVolumeClaim. אפשר להרחיב את הנפח אונליין כשהוא בשימוש על ידי Pod, או אופליין כשהוא לא בשימוש.
במנהל ההתקן של vSphere CSI, הרחבה אופליין זמינה בגרסאות vSphere >= 7.0, והרחבה אונליין זמינה בגרסאות vSphere >= 7.0 Update 2.
כברירת מחדל, standard-rwo StorageClass מגדיר את allowVolumeExpansion כ-true באשכולות חדשים שנוצרו ופועלים ב->= vSphere 7.0. אפשר להשתמש בהרחבה אונליין ואופליין של אמצעי אחסון באמצעות StorageClass הזה. באשכול משודרג, מכיוון ש-StorageClasses לא משתנים בשדרוגי אשכולות, כשמשדרגים אשכול מ-1.7 ל-1.8, ההגדרה allowVolumeExpansion ב-standard-rwo נשארת לא מוגדרת, כלומר לא ניתן להרחיב את הנפח.
למידע נוסף על הרחבת נפח האחסון, ראו שימוש בהרחבת נפח האחסון.
תמונות מצב של CSI Volume
אתם יכולים ליצור קובצי snapshot של אחסון מתמיד באמצעות המשאבים VolumeSnapshot ו-VolumeSnapshotClass. כדי להשתמש בתכונה הזו בנפח CSI, מנהל ההתקן של ה-CSI צריך לתמוך בתמונות מצב של נפחים, והקונטיינר המשני (sidecar) external-snapshotter צריך להיכלל בפריסה של מנהל ההתקן של ה-CSI.
למידע נוסף על קובצי snapshot של אמצעי אחסון, ראו שימוש בקובצי snapshot של אמצעי אחסון.
הבקרים של תמונות המצב של CSI נפרסים באופן אוטומטי כשיוצרים אשכול.
ניקוי עוצמת הקול
כשמוחקים אשכול משתמש, אמצעי האחסון שהוקצו על ידי מנהל ההתקן של vSphere CSI לא נמחקים. לפני שמוחקים את האשכול, צריך למחוק את כל אמצעי האחסון, ה-PersistentVolumeClaims וה-StatefulSets.