התקנה של מנהל התקן של ממשק אחסון בקונטיינר (CSI) מאפשרת להקצות ולנהל אחסון מתמיד לעומסי עבודה עם שמירת מצב (stateful) באשכולות של Google Distributed Cloud.
אחרי שמתקינים מנהל התקן לפי ההוראות של ספק האחסון, אפשר לאמת את ההתקנה וליצור StorageClass כדי להקצות נפחים באופן דינמי לאפליקציות.
סקירה כללית
Container Storage Interface (CSI) הוא ממשק API פתוח וסטנדרטי שנתמך על ידי הרבה ספקי אחסון גדולים, שמאפשר ל-Kubernetes לחשוף מערכות אחסון שרירותיות לעומסי עבודה בקונטיינרים.
נפחי האחסון של Kubernetes מנוהלים על ידי מנהלי התקנים של אחסון שספציפיים לספק, שבעבר קומפלו לקובצי בינארי של 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
כדי להשתמש במנהל התקן 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, בתור ה-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 במפרט של 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: premium-rwo # This field references the existing StorageClass
המאמרים הבאים
- מידע נוסף על מושגי האחסון בענן ב-Google Distributed Cloud
- הגדרת StorageClass שמוגדר כברירת מחדל לאשכול