בדף הזה מוסבר איך להתקין דרייבר של אחסון Container Storage Interface (CSI) באשכולות של Google Distributed Cloud.
סקירה כללית
Container Storage Interface (CSI) הוא ממשק API בתקן פתוח שנתמך על ידי ספקי אחסון גדולים רבים. הוא מאפשר ל-Kubernetes לחשוף מערכות אחסון שרירותיות לעומסי עבודה מבוססי-קונטיינרים.
נפחי אחסון ב-Kubernetes מנוהלים על ידי מנהלי התקנים (drivers) של אחסון ספציפיים לספק, שבעבר היו קומפילציה של קבצים בינאריים של Kubernetes. בעבר, לא הייתה אפשרות להשתמש בדרייבר אחסון שלא נכלל ב-Kubernetes. התקנה של מנהל התקן CSI מוסיפה תמיכה במערכת אחסון שלא נתמכת באופן מובנה על ידי Kubernetes. בנוסף, CSI מאפשר שימוש בתכונות אחסון מודרניות, כמו תמונות מצב ושינוי גודל.
כדי להשתמש במנהל התקן CSI, צריך ליצור StorageClass של Kubernetes. מגדירים את מנהל התקן ה-CSI כמנהל הקצאות (provisioner) עבור ה-StorageClass. אחר כך אפשר להגדיר את StorageClass כברירת המחדל של האשכול או להגדיר את עומסי העבודה כך שישתמשו ב-StorageClass (דוגמה ל-StatefulSet).
התקנה של מנהל התקן CSI של ספק
ספקי אחסון מפתחים מנהלי התקנים משלהם של CSI, והם אחראים לספק הוראות התקנה. במקרים פשוטים, יכול להיות שההתקנה תכלול רק פריסה של מניפסטים לאשכולות. אפשר לעיין ברשימה של מנהלי התקנים של CSI במסמכי התיעוד של CSI.
לאחסון בייצור, מומלץ להתקין דרייבר CSI משותף אחסון מוכן ל-GDC.
אימות התקנת דרייבר
אחרי שמתקינים מנהל התקן CSI, אפשר לאמת את ההתקנה על ידי הרצת הפקודה:
kubectl get csinodes -o jsonpath='{range .items[*]} \
{.metadata.name}{": "} {range .spec.drivers[*]} {.name}{"\n"} {end}{end}'
שימוש ב-CSI driver
כדי להשתמש בדרייבר CSI:
יוצרים StorageClass של Kubernetes שמפנה אל מנהל ההתקן בשדה
provisionerשלו.כדי להקצות נפח אחסון, אפשר:
- מפנים אל StorageClass במפרט
volumeClaimTemplatesשל אובייקט StatefulSet. - הגדרת סוג האחסון כברירת המחדל של האשכול.
- מפנים אל StorageClass במפרט
שיקולים לגבי StorageClasses שמגובים על ידי מנהל התקן CSI
כשיוצרים StorageClass, כדאי לקחת בחשבון את הנקודות הבאות:
- התיעוד של מנהל ההתקן של CSI צריך לכלול את הפרמטרים הספציפיים למנהל ההתקן שאתם מספקים ל-StorageClass, כולל שם מנהל ההקצאות (provisioner).
- מומלץ לתת ל-StorageClass שם לפי המאפיינים שלו, ולא לפי השם של מנהל ההתקן או המכשיר הספציפיים שמאחוריו. אם נותנים ל-StorageClass שם שמתאר את המאפיינים שלו, אפשר ליצור StorageClass עם אותו שם בכמה אשכולות וסביבות, והאפליקציות יכולות לקבל אחסון עם אותם מאפיינים באשכולות שונים.
דוגמה: הפניה ל-StorageClass ב-StatefulSet
בדוגמה הבאה מוסבר איך להגדיר דרייבר CSI ב-StorageClass, ואז להפנות אל StorageClass בעומס עבודה של StatefulSet. בדוגמה הזו מניחים שהדרייבר כבר הותקן באשכול.
ב-StorageClass הפשוט הבא, premium-rwo, נעשה שימוש בדרייבר CSI פיקטיבי, csi.example.com, כמנהל הקצאות (provisioner):
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 במפרט volumeClaimTemplates של StatefulSet, 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: premium-rwo # This field references the existing StorageClass
המאמרים הבאים
- מידע נוסף על מושגי האחסון בענן ב-Google Distributed Cloud
- הגדרת StorageClass כברירת מחדל עבור האשכול