Benutzerdefinierte StorageClass für Arbeitslasten verwenden

In GKE on Azure werden automatisch Azure Disk CSI Driver und Azure File CSI Driver bereitgestellt.

Die Azure Disk CSI Driver- und Azure File CSI Driver-Versionen sind an die Kubernetes-Version von GKE on Azure gebunden. Die Treiberversion ist in der Regel die neueste Version, die bei der Veröffentlichung einer GKE-Version verfügbar war. Bei einem Upgrade des Clusters werden die Treiber automatisch aktualisiert.

Benutzerdefinierte StorageClass verwenden

Sie können zusätzliche StorageClasses für Volumes erstellen oder CSI-Treiber (Container Storage Interface) verwenden.

  1. Wählen Sie aus, ob Sie ein Azure-Laufwerk-Volume oder einen anderen CSI-Treiber verwenden.

    Azure Disk-Volume

    Sie können Ihre eigene benutzerdefinierte StorageClass erstellen, die einen Azure Disk-Volume-Typ, einen Dateisystemtyp und andere Parameter angibt. Weitere StorageClass-Parameter finden Sie auf der GitHub-Seite des Azure Disk CSI-Treibers für GKE on Azure.

    Zum Konfigurieren einer benutzerdefinierten StorageClass kopieren Sie das folgende YAML-Manifest in eine Datei mit dem Namen my-custom-class.yaml.

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

    Ersetzen Sie dabei CLASS_NAME durch den Namen Ihrer neuen StorageClass.

    Mit der folgenden YAML-Datei wird beispielsweise eine neue StorageClass erstellt, die Volumes in einem bestimmten Speicherkonto bereitstellt und ein Tag von group=dev auf jedes neue Volume anwendet.

    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-Treiber

    Sie können im Feld provisioner einen anderen CSI-Treiber angeben.

    Zum Erstellen einer StorageClass mit einem anderen CSI-Treiber können Sie das folgende YAML-Beispiel verwenden:

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

    Ersetzen Sie die folgenden Werte:

    • CLASS_NAME ist der Name der StorageClass, z. B. my-custom-class.
    • CSI_DRIVER_NAME ist der Name des CSI-Treibers, z. B. csi.example.com.

    Konfigurieren Sie als Nächstes Unterfelder unter parameters entsprechend der Dokumentation Ihres CSI-Treibers.

  2. Wenden Sie die YAML-Datei auf Ihren Cluster an.

    kubectl apply -f my-custom-class.yaml
    
  3. Erstellen Sie einen PersistentVolumeClaim mit einer benutzerdefinierten StorageClass.

    Nachdem Sie eine benutzerdefinierte StorageClass erstellt haben, können Sie sie in einem PVC angeben. Im folgenden Beispiel wird einen PVC namens my-pvc erstellt, der auf die StorageClass my-custom-class verweist.

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

Standard-StorageClass festlegen

GKE on Azure verwendet die Standard-StorageClass standard-rwo, die standardmäßige Azure-SSD-Laufwerke mit LRS bereitstellt. Sie können diese Standardeinstellung in eine andere StorageClass ändern.

So ändern Sie die Standard-StorageClass:

  1. Aktualisieren Sie die Annotation is-default-class für die StorageClass standard-rwo mit kubectl patch.

    kubectl patch storageclass standard-rwo -p \
      '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
    
  2. Erstellen Sie eine neue StorageClass mit der Annotation storageclass.kubernetes.io/is-default-class: true.

    Die folgende Beispiel-StorageClass nutzt den Treiber disk.csi.azure.com. Weitere Informationen zur Installation eines anderen Speichertreibers finden Sie unter CSI-Treiber installieren.

    Kopieren Sie das folgende YAML-Manifest in eine Datei mit dem Namen 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
    

    Dabei gilt:

    • CLASS_NAME ist der Name Ihrer neuen StorageClass.
    • VOLUME_TYPE: der von der StorageClass erstellte Volume-Typ von Azure Disk.

    Mit der folgenden YAML-Datei wird beispielsweise eine neue Standard-StorageClass erstellt, die Premium SSD-Azure Disk-Volumes bereitstellt.

    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. Wenden Sie die neue benutzerdefinierte Klasse auf Ihren Cluster an.

    kubectl apply -f my-custom-class.yaml
    

Nach der Anwendung dieses Manifests verwendet GKE on Azure die StorageClass my-custom-default-class für neue Speicheranfragen.

Auf StorageClass in einem StatefulSet verweisen

Verweisen Sie auf die StorageClass im volumeClaimTemplates eines StatefulSet, um sie zu verwenden.

Wenn Sie in der Spezifikation volumeClaimTemplates eines StatefulSet auf eine StorageClass verweisen, bietet Kubernetes stabilen Speicher mit PersistentVolumes (PVs). Kubernetes ruft den in der StorageClass definierten Bereitsteller auf, um ein neues Speicher-Volume zu erstellen. Nachdem das Volume bereitgestellt wurde, erstellt Kubernetes automatisch eine Produktversion.

Das folgende StatefulSet verweist auf die StorageClass my-custom-class und stellt ein 1-Gibibyte-Volume bereit:

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

Nächste Schritte