כלי ההעברה של StatefulSet CSI מאפשר להעביר קבוצות StatefulSet מהפלאגין של נפח האחסון של vSphere בעץ אל מנהל ההתקן של vSphere CSI ב-Google Distributed Cloud. הכלי מעביר את ה-PersistentVolumes בלי זמן השבתה של האפליקציה או אובדן נתונים, כך שעומסי העבודה יכולים להשתמש בכל התכונות של CSI, כמו Volume Expansion ו-Volume Snapshot.
הכלי נתמך רק בגרסאות של Google Distributed Cloud שנתמכות באופן מלא.
סקירה כללית
Google Distributed Cloud משתלב עם מערכות חיצוניות לאחסון בלוקים או קבצים באמצעות אחסון ב-VMware vSphere, פלאגינים של נפחי אחסון בתוך העץ של Kubernetes (או "מנהלי התקנים") ומנהלי התקנים של Container Storage Interface (CSI).
כשמפעילים את התכונה "העברת Kubernetes CSI" כברירת מחדל בגרסה 1.15, PersistentVolume שמגובה על ידי הפלאגין של נפח vSphere בעץ ממשיך לפעול בסביבה של CSI בלבד. תכונת ההעברה ל-CSI מפנה קריאות לפעולות של פלאגינים בעץ אל מנהל ההתקן של CSI. מכיוון שהמפרט של PersistentVolume לא ניתן לשינוי, הוא עדיין מגובה על ידי הפלאגין בעץ. קבוצת התכונות הזמינות זהה לזו של הפלאגין של אמצעי האחסון בעץ.
הקבוצה המלאה של תכונות CSI, כמו Volume Expansion ו-Volume Snapshot, לא זמינה לנפחים כאלה. כדי לנצל את התכונות האלה, צריך להעביר את עומסי העבודה עם שמירת המצב (stateful) ל-CSI על ידי יצירה מחדש של PersistentVolumes שמגובים על ידי מנהל ההתקן של vSphere CSI. אתם יכולים להשתמש בכלי ההעברה של CSI כדי להעביר עומסי עבודה עם שמירת מצב (stateful) ל-CSI, ולהשתמש בכל התכונות של CSI.
הכלי הזה מאפשר להעביר בהדרגה את PersistentVolume ו-PersistentVolumeClaim של StatefulSet ל-CSI, בלי להשבית את האפליקציה. הכלי הזה מגבה את המשאבים של Kubernetes בספרייה מקומית ומגדיר את ReclaimPolicy ל-Retain לפני ההעברה. לכן לא יהיה אובדן נתונים.
מגבלה
הכלי האוטומטי נתמך רק בגרסאות של Google Distributed Cloud שנתמכות באופן מלא.
היא פועלת רק עם StatefulSets. אתם יכולים להריץ בדיקות מקדימות באמצעות הכלי כדי להריץ כמה בדיקות בטיחות לפני השימוש בכלים.
./statefulset-csi-migration-tool preflight \
--kubeconfig ADMIN_KUBECONFIG \
--cluster-name USER_CLUSTER_NAME \
--sts-name STS_NAME \
--sts-namespace STS_NAMESPACE \
--intree-storageclass INTREE_STORAGECLASS \
--csi-storageclass CSI_STORAGECLASS
מחליפים את מה שכתוב בשדות הבאים:
ADMIN_KUBECONFIG: הנתיב לקובץ kubeconfig של אשכול האדמין.
USER_CLUSTER_NAME: אם ה-StatefulSet פועל באשכול המשתמש, צריך לציין את שם אשכול המשתמש. אם עומס העבודה פועל באשכול האדמין, דלגו על הדגל הזה.
STS_NAME: השם של ה-StatefulSet.
STS_NAMESPACE: מרחב השמות של ה-StatefulSet.
INTREE_STORAGECLASS: השם של StorageClass בעץ שמגבה את PersistentVolume של StatefulSet.
CSI_STORAGECLASS: השם של CSI StorageClass שמגבה את PersistentVolume של StatefulSet אחרי ההעברה.
הורדה
מורידים את הכלי בכתובת gs://gke-on-prem-release/statefulset-csi-migration-tool/v1.0/statefulset-csi-migration-tool.
הערה: הכלי הזה נמצא בגרסת טרום-השקה (Preview).
התהליך
בקטע הזה מוסבר איך להעביר את StatefulSet ממנהל ההקצאות הפנימי של vCP בעץ של vSphere (kubernetes.io/vsphere-volume) למנהל ההקצאות של CSI ב-vSphere (csi.vsphere.vmware.com).
./statefulset-csi-migration-tool rolling-migration all \
--kubeconfig ADMIN_KUBECONFIG \
--cluster-name USER_CLUSTER_NAME \
--sts-name STS_NAME \
--sts-namespace STS_NAMESPACE \
--intree-storageclass INTREE_STORAGECLASS \
--csi-storageclass CSI_STORAGECLASS \
--working-directory WORKING_DIRECTORY
מחליפים את מה שכתוב בשדות הבאים:
ADMIN_KUBECONFIG: הנתיב לקובץ kubeconfig של אשכול האדמין.
USER_CLUSTER_NAME: אם ה-StatefulSet פועל באשכול המשתמש, צריך לציין את שם אשכול המשתמש. אם עומס העבודה פועל באשכול האדמין, אפשר לדלג על הדגל הזה.
STS_NAME: השם של ה-StatefulSet.
STS_NAMESPACE: מרחב השמות של ה-StatefulSet.
INTREE_STORAGECLASS: השם של StorageClass בעץ שמגבה את PersistentVolume של StatefulSet.
CSI_STORAGECLASS: השם של CSI StorageClass שמגבה את PersistentVolume של StatefulSet אחרי ההעברה.
WORKING_DIRECTORY: הספרייה המקומית לשמירת מפרט המשאבים ב-Kubernetes של StatefulSet ושל ה-Pod, ה-PersistentVolumeClaim וה-PersistentVolume שלו. שם הספרייה חייב להיות ייחודי לכל StatefulSet. הספרייה הזו צריכה להיות ריקה או לא קיימת. עדיף לא ליצור את הספרייה הזו, כדי שהכלים יוכלו ליצור אותה בשבילכם.
הפקודה הזו מבצעת את המשימות הבאות:
מגבה את StatefulSet ואת יחסי התלות שלו, כמו PersistentVolume, PersistentVolumeClaim ומפרטי רפליקה של Pod בספריית העבודה המקומית.
מחיקת ה-StatefulSet עם מדיניות מחיקה של אובייקטים מיותמים. השלב הזה מוחק רק את ה-StatefulSet, אבל לא מוחק את יחסי התלות שלו, כמו הרפליקות של Pod, PersistentVolume ו-PersistentVolumeClaim.
מעבירה כל Pod למנהלי התקנים של CSI (בדומה לאפשרות 1), ומבצעת את הפעולות הבאות:
א. הגדרת השדה ReclaimPolicy של PersistentVolume כ-Retain.
ב. מוחק את Pod, PersistentVolume ו-PersistentVolumeClaim.
ג. ממירים את ה-VMDK הקיים ל-FCD.
ד. יוצרים מחדש את PersistentVolume, PersistentVolumeClaim ו-Pod.
יוצר מחדש את ה-StatefulSet, אבל השדה PVCTemplate במפרט שלו מצביע על CSI StorageClass. הבקר של StatefulSet אמור למפות שוב את הרפליקות היתומות.