Verwenden des CSI-Treibers (Container Storage Interface) für Azure Blob Storage

Der CSI-Treiber (Container Storage Interface) für Azure Blob Storage ist ein mit der CSI-Spezifikation konformer Treiber, mit dem Azure Kubernetes Service (AKS) den Lebenszyklus von Azure Blob Storage verwaltet. CSI ist ein Standard für die Bereitstellung beliebiger Block- und Dateispeichersysteme für containerisierte Workloads in Kubernetes.

Durch die Einführung und Verwendung von CSI kann AKS nun Plug-Ins schreiben, bereitstellen und durchlaufen, um neue Speichersysteme in Kubernetes verfügbar zu machen oder vorhandene Speichersysteme in Kubernetes zu verbessern. Bei Verwendung von CSI-Treibern in AKS muss weder der Kerncode von Kubernetes geändert noch auf dessen Releasezyklen gewartet werden.

Wenn Sie Azure-Blobspeicher als Dateisystem in einen Container oder Pod einbinden, können Sie Blobspeicher mit einer Reihe von Anwendungen verwenden, die sehr große Mengen unstrukturierter Daten verarbeiten. Beispiel:

  • Protokolldateidaten
  • Bilder, Dokumente und Streaming von Video oder Audio
  • Notfallwiederherstellungsdaten

Auf die Daten im Objektspeicher können Anwendungen mithilfe des BlobFuse- oder NFS 3.0-Protokolls (Network File System) zugreifen. Vor Einführung des CSI-Treibers für Azure Blob Storage bestand die einzige Möglichkeit darin, einen nicht unterstützten Treiber manuell zu installieren, um in Ihrer in AKS ausgeführten Anwendung auf Blob Storage zugreifen zu können. Wenn der CSI-Treiber für Azure Blob Storage für AKS aktiviert ist, gibt es zwei integrierte Speicherklassen: azureblob-fuse-premium und azureblob-nfs-premium.

Informationen zum Erstellen eines AKS-Clusters mit CSI-Treiberunterstützung finden Sie unter CSI-Treiber in AKS. Weitere Informationen zu den Unterschieden beim Zugriff auf die einzelnen Azure-Speichertypen mithilfe des NFS-Protokolls finden Sie unter Vergleich des Zugriffs auf Azure Files, Azure Blob Storage und Azure NetApp Files mit NFS.

Features des CSI-Treibers für Azure Blob Storage

Der CSI-Treiber für Azure Blob Storage unterstützt die folgenden Features:

  • BlobFuse- und NFS-Protokoll (Network File System), Version 3.0

Voraussetzungen

  • Stellen Sie sicher, dass Version 2.42 oder höher der Azure CLI installiert und konfiguriert ist. Führen Sie az --version aus, um die Version zu ermitteln. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure CLI. Wenn Sie die Azure CLI-Erweiterung aks-preview installiert haben, achten Sie darauf, die Erweiterung durch Aufrufen von az extension update --name aks-preview auf die neueste Version zu aktualisieren.

  • Führen Sie die in diesem Link genannten Schritte aus, wenn Sie zuvor den Open-Source-CSI-Treiber für Blobspeicher für den Zugriff auf Azure-Blobspeicher von Ihrem Cluster aus installiert haben.

Hinweis

Wenn der Blobfuse-Proxy bei der Installation des Open-Source-Treibers nicht aktiviert ist, werden bei der Deinstallation des Open-Source-Treibers bestehende Blobfuse-Einhängungen unterbrochen. NFS-Einbindungen bleiben davon jedoch unberührt.

Aktivieren des CSI-Treibers auf einem neuen oder bestehenden AKS-Cluster

Mithilfe der Azure CLI können Sie den CSI-Treiber für Blob Storage für einen neuen oder bestehenden AKS-Cluster aktivieren, bevor Sie ein persistentes Volume zur Verwendung durch Pods im Cluster konfigurieren.

Um den Treiber auf einem neuen Cluster zu aktivieren, beziehen Sie den Parameter --enable-blob-driver mit dem Befehl az aks create ein, wie im folgenden Beispiel gezeigt:

az aks create \
    --enable-blob-driver \
    --name myAKSCluster \
    --resource-group myResourceGroup \
    --generate-ssh-keys

Um den Treiber auf einem vorhandenen Cluster zu aktivieren, beziehen Sie den Parameter --enable-blob-driver mit dem Befehl az aks update ein, wie im folgenden Beispiel gezeigt:

az aks update --enable-blob-driver --name myAKSCluster --resource-group myResourceGroup

Sie werden aufgefordert, zu bestätigen, dass kein Open-Source-CSI-Treiber für Blobspeicher installiert ist. Nach Ihrer Bestätigung kann es einige Minuten dauern, bis diese Aktion abgeschlossen ist. Sobald der Vorgang abgeschlossen ist, sollten Sie in der Ausgabe den Status der Aktivierung des Treibers auf Ihrem Cluster sehen. Das folgende Beispiel ähnelt dem Abschnitt, der die Ergebnisse des vorherigen Befehls anzeigt:

"storageProfile": {
    "blobCsiDriver": {
      "enabled": true
    },

Deaktivieren des CSI-Treibers auf einem vorhandenen AKS-Cluster

Mithilfe der Azure CLI können Sie den CSI-Treiber für Blobspeicher auf einem vorhandenen AKS-Cluster deaktivieren, nachdem Sie das persistente Volume aus dem Cluster entfernt haben.

Um den Treiber auf einem vorhandenen Cluster zu deaktivieren, beziehen Sie den Parameter --disable-blob-driver mit dem Befehl az aks update ein, wie im folgenden Beispiel gezeigt:

az aks update --disable-blob-driver --name myAKSCluster --resource-group myResourceGroup

Verwenden eines persistenten Volumes mit Azure-Blobspeicher

Ein persistentes Volume (PV) stellt ein Speicherelement dar, das für die Verwendung mit Kubernetes-Pods bereitgestellt wurde. Ein persistentes Volume kann von einem oder mehreren Pods verwendet und dynamisch oder statisch bereitgestellt werden. Wenn mehrere Pods gleichzeitigen Zugriff auf dasselbe Speichervolume benötigen, können Sie Azure-Blobspeicher verwenden, um die Verbindung mithilfe des Network File System (NFS) oder blobfuse herzustellen. In diesem Artikel wird gezeigt, wie Sie dynamisch einen Azure-Blobspeichercontainer erstellen, der von mehreren Pods in einem AKS-Cluster verwendet werden kann.

Weitere Informationen zu Kubernetes-Volumes finden Sie unter Speicheroptionen für Anwendungen in AKS.

Dynamisches Erstellen von Azure-Blobspeicher-PVs mithilfe der integrierten Speicherklassen

Eine Speicherklasse wird verwendet, um zu definieren, wie ein Azure-Blobspeichercontainer erstellt wird. In der Knotenressourcengruppe wird automatisch ein Speicherkonto erstellt, das mit der Speicherklasse verwendet wird, um den Azure-Blobspeichercontainer aufzunehmen. Wählen Sie für skuName eine der folgenden Azure-Speicherredundanz-SKUs aus:

  • Standard_LRS: Standard – lokal redundanter Speicher
  • Premium_LRS: Premium – lokal redundanter Speicher
  • Standard_ZRS: zonenredundanter Standardspeicher
  • Premium_ZRS: zonenredundanter Premiumspeicher
  • Standard_GRS: Standard – georedundanter Speicher
  • Standard_RAGRS: Standard – georedundanter Speicher mit Lesezugriff

Wenn Sie CSI-Treiber für Speicher in AKS verwenden, gibt es zwei zusätzliche integrierte Speicherklassen, die den CSI-Treiber für Azure Blob Storage verwenden.

Die Freigaberichtlinie für beide Speicherklassen stellt sicher, dass beim Löschen eines persistenten Volumes auch der zugrunde liegende Azure-Blobspeicher gelöscht wird. Die Speicherklassen konfigurieren den Container auch so, dass er standardmäßig erweiterbar ist, da der Parameter set allowVolumeExpansion auf true festgelegt ist.

Hinweis

Das Verkleinern persistenter Volumes wird nicht unterstützt.

Mit dem Befehl kubectl get sc können Sie die Speicherklassen anzeigen. Im folgenden Beispiel werden die in einem AKS-Cluster verfügbaren Speicherklassen azureblob-fuse-premium und azureblob-nfs-premium angezeigt:

NAME                                  PROVISIONER       RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION     AGE
azureblob-fuse-premium               blob.csi.azure.com   Delete          Immediate              true                   23h
azureblob-nfs-premium                blob.csi.azure.com   Delete          Immediate              true                   23h

Um diese Speicherklassen zu verwenden, erstellen Sie einen PVC und den entsprechenden Pod, der auf diesen verweist und ihn verwendet. Ein Anspruch auf ein persistentes Volume wird verwendet, um basierend auf einer Speicherklasse automatisch Speicher bereitzustellen. Ein PVC kann eine der vordefinierten Speicherklassen oder eine benutzerdefinierte Speicherklasse verwenden, um einen Azure-Blobspeichercontainer für die gewünschte SKU, Größe und das Protokoll zur Kommunikation mit ihm zu erstellen. Wenn Sie eine Poddefinition erstellen, wird der Anspruch auf ein persistentes Volume angegeben, um den gewünschten Speicher anzufordern.

Verwenden von StatefulSet

Sie können ein StatefulSet verwenden, um ein Speichervolumen für Ihre Workload beizubehalten. Dies erleichtert die Zuordnung vorhandener Volumes zu neuen Pods, die fehlerhafte Volumes ersetzen. Die folgenden Beispiele zeigen, wie Sie ein StatefulSet für Blobspeicher mithilfe von Blobfuse oder dem NFS-Protokoll festlegen.

Voraussetzungen

  • Ihre Identität auf Steuerungsebene für den AKS-Cluster (also Ihr AKS-Clustername) wird der Rolle Mitwirkender für VNet und die Netzwerksicherheitsgruppe hinzugefügt.
  1. Erstellen Sie eine Datei namens „azure-blob-nfs-ss.yaml“, und fügen Sie den folgenden YAML-Code ein.

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: statefulset-blob-nfs
      labels:
        app: nginx
    spec:
      serviceName: statefulset-blob-nfs
      replicas: 1
      template:
        metadata:
          labels:
            app: nginx
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
            - name: statefulset-blob-nfs
              image: mcr.microsoft.com/oss/nginx/nginx:1.22
              volumeMounts:
                - name: persistent-storage
                  mountPath: /mnt/blob
      updateStrategy:
        type: RollingUpdate
      selector:
        matchLabels:
          app: nginx
      volumeClaimTemplates:
        - metadata:
            name: persistent-storage
          spec:
            storageClassName: azureblob-nfs-premium
            accessModes: ["ReadWriteMany"]
            resources:
              requests:
                storage: 100Gi
    
  2. Erstellen Sie das StatefulSet mit dem Befehl „kubectl create“:

    kubectl create -f azure-blob-nfs-ss.yaml
    

Nächste Schritte