שימוש ב-StorageClass מותאם אישית עם עומסי העבודה

‫GKE ב-Azure פורס באופן אוטומטי את Azure Disk CSI Driver ואת Azure File CSI Driver.

הגרסאות של מנהל התקן ה-CSI של Azure Disk ומנהל התקן ה-CSI של Azure File קשורות לגרסה של GKE ב-Azure Kubernetes. גרסת הדרייבר היא בדרך כלל הגרסה העדכנית ביותר שזמינה כשגרסת GKE יוצאת. כשמשדרגים את האשכול, מנהלי ההתקנים מתעדכנים אוטומטית.

שימוש ב-StorageClass מותאם אישית

אפשר ליצור עוד StorageClasses לנפחי אחסון או להשתמש במנהלי התקנים של Container Storage Interface ‏ (CSI).

  1. בוחרים אם משתמשים בנפח דיסק של Azure או במנהל התקן אחר של CSI.

    נפח אחסון דיסקים ב-Azure

    אתם יכולים ליצור StorageClass משלכם בהתאמה אישית, שמציין סוג של נפח Azure Disk, סוג של מערכת קבצים ופרמטרים אחרים. פרמטרים נוספים של StorageClass זמינים בדף GitHub של מנהל ה-CSI של דיסק Azure ב-GKE ב-Azure.

    כדי להגדיר StorageClass בהתאמה אישית, מעתיקים את מניפסט ה-YAML הבא לקובץ בשם my-custom-class.yaml.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: CLASS_NAME
    provisioner: disk.csi.azure.com
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    

    מחליפים את CLASS_NAME בשם של StorageClass חדש.

    לדוגמה, קובץ ה-YAML הבא יוצר StorageClass חדש שמקצה נפחי אחסון בחשבון אחסון ספציפי ומחיל תג של group=dev על כל נפח אחסון חדש.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: my-custom-class
    provisioner: disk.csi.azure.com
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      storageAccount: my-storage-account
      tags: group=dev
    

    CSI Driver

    אפשר לציין מנהל התקן אחר של CSI בשדה provisioner.

    כדי ליצור StorageClass עם מנהל התקן אחר של CSI, אפשר להשתמש בדוגמה הבאה של YAML.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: CLASS_NAME
    provisioner: CSI_DRIVER_NAME
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      ...
    

    מחליפים את הערכים הבאים:

    • CLASS_NAME: השם של StorageClass (לדוגמה, my-custom-class).
    • CSI_DRIVER_NAME: השם של מנהל התקן CSI (לדוגמה, csi.example.com).

    לאחר מכן, מגדירים שדות משנה בקטע parameters בהתאם לתיעוד של מנהל ההתקן של CSI.

  2. מחילים את ה-YAML על האשכול.

    kubectl apply -f my-custom-class.yaml
    
  3. יצירת PersistentVolumeClaim עם StorageClass בהתאמה אישית.

    אחרי שיוצרים StorageClass בהתאמה אישית, אפשר לציין אותו ב-PVC. בדוגמה הבאה נוצר PVC בשם my-pvc שמפנה אל StorageClass בשם my-custom-class.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: my-pvc
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 30Gi
      storageclassName: my-custom-class
    

הגדרת StorageClass כברירת מחדל

‫GKE on Azure משתמש ב-StorageClass שמוגדר כברירת מחדל בשם standard-rwo, שמקצה דיסקים סטנדרטיים של SSD Azure עם LRS. אפשר לשנות את ברירת המחדל ל-StorageClass אחר.

כדי לשנות את ברירת המחדל של StorageClass:

  1. מעדכנים את ההערה is-default-class של standard-rwo StorageClass עם kubectl patch.

    kubectl patch storageclass standard-rwo -p \
      '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
    
  2. יוצרים StorageClass חדש עם ההערה storageclass.kubernetes.io/is-default-class: true.

    בדוגמה הבאה של StorageClass נעשה שימוש בדרייבר disk.csi.azure.com. כדי להתקין עוד מנהל התקן לאחסון, אפשר לעיין במאמר בנושא התקנה של מנהל התקן CSI.

    מעתיקים את קוד ה-YAML הבא לקובץ בשם my-custom-class.yaml.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: CLASS_NAME
      annotations:
        storageclass.kubernetes.io/is-default-class: true
    provisioner: disk.csi.azure.com
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      skuName: VOLUME_TYPE
    

    מחליפים את מה שכתוב בשדות הבאים:

    • CLASS_NAME: השם של StorageClass החדש.
    • VOLUME_TYPE: סוג הנפח של Azure Disk שנוצר על ידי StorageClass.

    לדוגמה, קובץ ה-YAML הבא יוצר StorageClass חדש שמוגדר כברירת מחדל ומקצה נפחי דיסק של Azure מסוג Premium SSD.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: my-custom-default-class
      annotations:
        storageclass.kubernetes.io/is-default-class: "true"
    provisioner: disk.csi.azure.com
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      skuName: Premium_LRS
    
  3. מחילים את הכיתה החדשה בהתאמה אישית על האשכול.

    kubectl apply -f my-custom-class.yaml
    

אחרי שמחילים את המניפסט הזה, GKE on Azure משתמש ב-StorageClass‏ my-custom-default-class לבקשות אחסון חדשות.

הפניה ל-StorageClass ב-StatefulSet

כדי להשתמש ב-StorageClass החדש, אפשר להפנות אליו ב-volumeClaimTemplates של StatefulSet.

כשמפנים אל StorageClass במפרט volumeClaimTemplates של StatefulSet, ‏ Kubernetes מספק אחסון יציב באמצעות PersistentVolumes (PVs). ‫Kubernetes קורא לספק השירות שמוגדר ב-StorageClass כדי ליצור נפח אחסון חדש. אחרי שהנפח מוקצה, Kubernetes יוצר באופן אוטומטי PV.

ההפניה הבאה ל-StatefulSet מתייחסת ל-StorageClass my-custom-class ומקצה נפח אחסון של 1 גיביבייט:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  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: my-custom-class # This field references the existing StorageClass

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