בדף הזה מוסבר איך להתקין מנהל התקן לאחסון של ממשק אחסון בקונטיינרים (CSI) באשכולות שנוצרו באמצעות תוכנת Google Distributed Cloud ל-VMware בלבד.
סקירה כללית
CSI הוא API בתקן פתוח שמאפשר ל-Kubernetes לחשוף מערכות אחסון שרירותיות לעומסי עבודה בקונטיינרים. כשפורסים באשכול מנהל התקן אחסון שתואם ל-CSI, האשכול יכול להתחבר ישירות להתקן אחסון תואם בלי לעבור דרך האחסון של vSphere.
נפחי האחסון של Kubernetes מנוהלים על ידי מנהלי התקנים של אחסון ספציפיים לספק, שבעבר קומפלו לקובצי בינארי של Kubernetes. בעבר לא הייתה אפשרות להשתמש במנהל התקן לאחסון שלא נכלל ב-Kubernetes. התקנה של מנהל התקן CSI מוסיפה תמיכה במערכת אחסון שלא נתמכת באופן מקורי על ידי Kubernetes. בנוסף, CSI מאפשר להשתמש בתכונות אחסון מודרניות, כמו תמונות מצב ושינוי גודל.
כדי להשתמש במנהל התקן CSI, צריך ליצור StorageClass של Kubernetes. מגדירים את מנהל התקן ה-CSI בתור ה-provisioner של StorageClass. אחר כך תוכלו להגדיר את StorageClass כברירת המחדל של האשכול, או להגדיר את עומסי העבודה כך שישתמשו ב-StorageClass (דוגמה ל-StatefulSet).
לפני שמתחילים
כברירת מחדל, Google Distributed Cloud משתמש במאגרי נתונים של vSphere באמצעות הדרייבר המובנה vsphereVolume. בנוסף, מנהלי ההתקנים המובנים של NFS ו-iSCSI יכולים לצרף ולטעון אמצעי אחסון קיימים לעומסי העבודה שלכם.
התקנת מנהל התקן CSI של ספק
ספקי האחסון מפתחים מנהלי התקנים משלהם ל-CSI, והם אחראים לספק הוראות התקנה. במקרים פשוטים, ההתקנה עשויה לכלול רק פריסה של מניפסטים באשכולות. רשימת מנהלי ההתקנים של CSI מופיעה במסמכי התיעוד של CSI.
אימות התקנה של מנהל התקן
אחרי שמתקינים מנהל התקן CSI, אפשר לאמת את ההתקנה באמצעות הפקודה הבאה:
kubectl get csidrivers --kubeconfig KUBECONFIG
שימוש במנהל התקן CSI
כדי להשתמש במנהל התקן CSI:
יוצרים StorageClass של Kubernetes שמפנה לדרייבר בשדה
provisioner.כדי להקצות נפח אחסון, אתם יכולים:
- מפנים ל-StorageClass במפרט
volumeClaimTemplatesשל אובייקט StatefulSet. - מגדירים אותו כ-StorageClass שמוגדר כברירת מחדל באשכול.
- מפנים ל-StorageClass במפרט
שיקולים לגבי StorageClasses שמגובים על ידי מנהל התקן CSI
כשיוצרים StorageClass, חשוב לשים לב לדברים הבאים:
- התיעוד של מנהל התקן CSI צריך לכלול את הפרמטרים הספציפיים למנהל ההתקן שאתם מספקים ל-StorageClass, כולל שם ה-provisioner.
- מומלץ לתת ל-StorageClass שם לפי המאפיינים שלו, ולא לפי השם של הדרייבר או המכשיר הספציפיים שמאחוריו. אם תתנו ל-StorageClass שם לפי המאפיינים שלו, תוכלו ליצור StorageClasses עם אותו שם בכמה אשכולות וסביבות, והאפליקציות שלכם יוכלו לקבל אחסון עם אותם מאפיינים באשכולות שונים.
דוגמה: הפניה ל-StorageClass ב-StatefulSet
בדוגמה הבאה מוסבר איך להגדיר מנהל התקן CSI ב-StorageClass, ואז להפנות ל-StorageClass בעומס עבודה של StatefulSet. בדוגמה הזו אנחנו מניחים שהדרייבר כבר הותקן באשכול.
בהמשך מוצג StorageClass פשוט בשם premium-rwo שמשתמש במנהל התקן CSI פיקטיבי, csi.example.com, בתור המקצה שלו:
fast-sc.yaml
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: premium-rwo provisioner: csi.example.com # CSI driver parameters: # You provide vendor-specific parameters to this specification type: example-parameter # Be sure to follow the vendor's instructions datastore: my-datastore reclaimPolicy: Retain allowVolumeExpansion: true
אתם מפנים ל-StorageClass במפרט volumeClaimTemplates של StatefulSet.
כשמפנים ל-StorageClass במפרט של StatefulSet, volumeClaimTemplates Kubernetes מספק אחסון יציב באמצעות PersistentVolumes (PVs).
Kubernetes קורא למקצה שהוגדר ב-StorageClass כדי ליצור נפח אחסון חדש. במקרה הזה, Kubernetes קורא לספק הפיקטיבי csi.example.com, שקורא ל-API של הספק כדי ליצור אמצעי אחסון. אחרי הקצאת אמצעי האחסון, Kubernetes יוצר באופן אוטומטי PV שמייצג את האחסון.
הנה StatefulSet פשוט שמפנה ל-StorageClass:
statefulset.yaml
apiVersion: apps/v1 kind: StatefulSet metadata: name: web spec: replicas: 2 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: registry.k8s.io/nginx-slim:0.8 volumeMounts: - name: www mountPath: /usr/share/nginx/html volumeClaimTemplates: # This is the specification in which you reference the StorageClass - metadata: name: www spec: accessModes: [ "ReadWriteOnce" ] resources: requests: storage: 1Gi storageClassName: fast # This field references the existing StorageClass