התקנה של מנהל התקן של Container Storage Interface

בדף הזה מוסבר איך להתקין מנהל התקן לאחסון של ממשק אחסון בקונטיינרים (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:

  1. יוצרים StorageClass של Kubernetes שמפנה לדרייבר בשדה provisioner.

  2. כדי להקצות נפח אחסון, אתם יכולים:

שיקולים לגבי 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

המאמרים הבאים