Freigeben über


Azure Storage CSI-Treiber und Volumebereitstellung

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 Blob Storage als Dateisystem in einem Container oder Pod bereitstellen, können Sie BLOB-Speicher mit vielen Anwendungen verwenden, die massive Mengen unstrukturierter Daten verwenden. Beispiel:

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

Anwendungen greifen auf Daten zu, die in Azure Blob Storage gespeichert sind, indem sie entweder BlobFuse oder das Network File System (NFS) 3.0-Protokoll verwenden. 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 Azure Blob Storage CSI-Treiber auf AKS aktiviert ist, gibt es zwei integrierte Speicherklassen:

  • azureblob-fuse-premium
  • 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.

Der Azure Disks Container Storage Interface (CSI)-Treiber ist ein CSI-spezifikationskonformer Treiber, der von Azure Kubernetes Service (AKS) zum Verwalten des Lebenszyklus von Azure Disk verwendet wird.

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. Informationen zum Erstellen eines AKS-Clusters mit CSI-Treiberunterstützung finden Sie unter Aktivieren des CSI-Treibers auf AKS.

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

Hinweis

In-Tree-Treiber beziehen sich auf die aktuellen Speichertreiber, die Teil des Kubernetes-Kerncodes sind, im Vergleich zu den neuen CSI-Treibern, die Plug-Ins sind.

Der CSI-Treiber (Azure Files Container Storage Interface) ist ein CSI-spezifikationskonformer Treiber, der von Azure Kubernetes Service (AKS) zum Verwalten des Lebenszyklus von Azure-Dateifreigaben verwendet wird. 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.

Informationen zum Erstellen eines AKS-Clusters mit CSI-Treiberunterstützung finden Sie unter Aktivieren von CSI-Treibern (Container Storage Interface) für Azure-Datenträger und Azure Files in Azure Kubernetes Service (AKS).

Hinweis

In-Tree-Treiber beziehen sich auf die aktuellen Speichertreiber, die Teil des Kubernetes-Kerncodes sind, im Vergleich zu den neuen CSI-Treibern, die Plug-Ins sind.

Azure CSI-Treiberfunktionen

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

  • BlobFuse
  • NFS 3.0-Protokoll

Zusätzlich zu den In-Tree-Treiberfunktionen unterstützt der Azure Disk CSI-Treiber die folgenden Funktionen:

  • Leistungsverbesserungen während der gleichzeitigen Datenträgeranfügung und -trennung

    • In-Tree-Treiber fügen Datenträger seriell an, während CSI-Treiber Datenträger in Batches anfügen oder trennen. Es gibt eine erhebliche Verbesserung, wenn eine Vielzahl von Datenträgern mit einem Knoten verbunden sind.
  • Premium SSD v1 und v2 werden unterstützt.

    • PremiumV2_LRS unterstützt None nur den Cachemodus.
  • Unterstützung für zonenredundanten Speicher (ZRS)

    • Premium_ZRS, StandardSSD_ZRS Datenträgertypen werden unterstützt. ZRS-Datenträger können auf dem Zonen- oder Nicht-Zonenknoten zugewiesen werden, ohne die Einschränkung, dass das Datenträgervolume in derselben Zone wie ein bestimmter Knoten zusammengefasst werden muss. Weitere Informationen, einschließlich der unterstützten Regionen, finden Sie unter Zonenredundanter Speicher für verwaltete Datenträger.
  • Volumemomentaufnahme

  • Volume-Klon

  • Ändern der Größe des persistenten Datenträgervolumes ohne Ausfallzeit

Hinweis

Je nach verwendeter VM-SKU verfügt der Azure Disk CSI-Treiber möglicherweise über ein Volumenlimit pro Knoten. Bei einigen leistungsfähigen VMs (z. B. 16 Kernen) beträgt der Grenzwert 64 Volumes pro Knoten. Um das Limit pro VM-SKU zu ermitteln, überprüfen Sie die Spalte Max. Datenträger für jede angebotene VM-SKU. Eine Liste der angebotenen VM-SKUs mit den entsprechenden detaillierten Kapazitätslimits finden Sie unter Universelle VM-Größen.

Voraussetzungen

  • Sie müssen die Azure CLI-Version 2.42 oder höher installiert und konfiguriert haben. Führen Sie az --version aus, um die Version zu finden. Wenn Sie eine Installation oder ein Upgrade durchführen müssen, finden Sie weitere Informationen unter Azure CLI installieren. Wenn Sie die Azure CLI-Erweiterung aks-preview installiert haben, stellen Sie sicher, dass Sie die Erweiterung durch Aufrufen az extension update --name aks-previewauf die neueste Version aktualisieren.

  • Führen Sie die folgenden Schritte aus, um den Open Source-Treiber zu bereinigen , wenn Sie zuvor den Open-Source-Treiber für CSI Blob Storage installiert haben, um von Ihrem Cluster aus auf Azure Blob Storage zuzugreifen.

  • Ihre AKS-Clustersteuerungsebenenidentität (Ihr AKS-Clustername) wird der Rolle "Mitwirkender " in der VNet- und Netzwerksicherheitsgruppe hinzugefügt.

  • Führen Sie die folgenden Aktionen aus, um ein [Azure Data Lake Storage Gen2-Konto][azure-datalake-storage-account] (ADLS) bei Verwendung des BlobFuse-Mounts zu unterstützen:

    • Geben Sie isHnsEnabled: "true" in den Parametern der Speicherklasse an, um mit dem Treiber in der dynamischen Bereitstellung ein ADLS-Konto zu erstellen.
    • Um BlobFuse-Zugriff auf ein ADLS-Konto in der statischen Bereitstellung zu aktivieren, geben Sie die Mount-Option --use-adls=true im persistenten Volume an.
    • Wenn Sie ein Speicherkonto mit hierarchischem Namespace aktivieren möchten, sollten vorhandene persistente Volumes (PVs) mit --use-adls=true der Bereitstellungsoption erneut bereitgestellt werden.
  • Standardmäßig befindet sich der BlobFuse-Cache im /mnt Verzeichnis. Wenn die SKU des virtuellen Computers (VM) einen temporären Datenträger bereitstellt, wird das /mnt Verzeichnis auf dem temporären Datenträger bereitgestellt. Jedoch, wenn die VM-SKU keinen temporären Datenträger bietet, wird das /mnt Verzeichnis auf dem Betriebssystemdatenträger eingebunden. Sie können die Bereitstellungsoption --tmp-path= festlegen, um ein anderes Cache-Verzeichnis anzugeben.

Hinweis

Wenn der Blobfuse-Proxy während der Installation des Open Source-Treibers nicht aktiviert ist, stört die Deinstallation des Open Source-Treibers vorhandene Blobfuse-Bereitstellungen. NFS-Mounts bleiben jedoch unberührt.

  • Sie benötigen einen AKS-Cluster mit aktiviertem Azure Disk CSI-Treiber. Der CSI-Treiber ist standardmäßig auf AKS-Clustern mit Kubernetes Version 1.21 oder höher aktiviert.

  • Azure CLI Version 2.37.0 oder höher wird installiert und konfiguriert. Führen Sie az --version aus, um die Version zu ermitteln. Wenn Sie eine Installation oder ein Upgrade durchführen müssen, finden Sie weitere Informationen unter Azure CLI installieren.

  • Das kubectl Befehlszeilentool ist installiert und für die Verbindung mit Ihrem AKS-Cluster konfiguriert.

  • Eine Speicherklasse, die für die Verwendung des Azure Disk CSI-Treibers (disk.csi.azure.com) konfiguriert ist.

  • Der Azure Disk-CSI-Treiber weist ein Volumenlimit pro Knoten auf. Die Volumeanzahl ändert sich basierend auf der Größe des Knotens/Knotenpools. Führen Sie den Befehl kubectl get aus, um die Anzahl der Volumes zu ermitteln, die pro Knoten zugeordnet werden können:

    kubectl get CSINode <nodename> -o yaml
    

    Wenn das Volumenlimit pro Knoten ein Problem für Ihre Workload darstellt, sollten Sie anstelle von CSI-Treibern Azure Container Storage für persistente Volumes verwenden.

Allgemeine Anforderungen:

  • Sie benötigen einen AKS-Cluster mit aktiviertem Azure Files CSI-Treiber. Der CSI-Treiber von Azure Files ist standardmäßig auf AKS-Clustern mit Kubernetes Version 1.21 oder höher aktiviert.

  • Azure CLI Version 2.37.0 oder höher wird installiert und konfiguriert. Führen Sie zum Überprüfen der Version az --version aus. Wenn Sie eine Installation oder ein Upgrade durchführen müssen, finden Sie weitere Informationen unter Azure CLI installieren.

  • Das kubectl Befehlszeilentool ist installiert und für die Verbindung mit Ihrem AKS-Cluster konfiguriert.

  • Eine Speicherklasse, die für die Verwendung des Azure Files CSI-Treibers (file.csi.azure.com) konfiguriert ist.

  • Bei der Wahl zwischen Standard- und Premium-Dateifreigaben ist es wichtig, das Bereitstellungsmodell und die Anforderungen des erwarteten Nutzungsmusters zu verstehen, das Sie in Azure Files ausführen möchten. Weitere Informationen finden Sie unter Auswählen einer Azure Files-Leistungsstufe basierend auf Nutzungsmustern.

Anforderungen für die Netzwerkdateifreigabe (NETWORK File Share, NFS):

  • Die Identität der AKS-Clustersteuerungsebene (Ihr AKS-Clustername) wird der Rolle Mitwirkender im VNet und in der Netzwerksicherheitsgruppe hinzugefügt.

  • Der Dienstprinzipal oder die verwaltete Dienstidentität (MSI) Ihres AKS-Clusters muss der Rolle "Mitwirkender" im Speicherkonto hinzugefügt werden.

Anforderungen für verwaltete Identitäten:

  • Stellen Sie sicher, dass die vom Benutzer zugewiesene Kubelet-Identität die Storage File Data SMB MI Admin Rolle für das Speicherkonto erhält. Wenn Sie Ihr eigenes Speicherkonto verwenden, müssen Sie der vom Benutzer zugewiesenen Kubelet-Identität auf diesem Speicherkonto die Rolle Storage File Data SMB MI Admin zuweisen.

  • Wenn der CSI-Treiber das Speicherkonto erstellt, erteilen Sie der Ressourcengruppe, in der sich das Speicherkonto befindet, die Storage File Data SMB MI Admin Rolle.

  • Wenn Sie die standardmäßige, vom Benutzer zugewiesene Kubelet-Identität verwenden, verfügt sie bereits über die erforderliche Storage File Data SMB MI Admin Rolle in der Ressourcengruppe für verwaltete Knoten.

Hinweis

Der Azure File CSI-Treiber erlaubt nur die Bereitstellung von SMB-Dateifreigaben mit schlüsselbasierter Authentifizierung (NTLM v2) und unterstützt daher nicht das maximale Sicherheitsprofil der Einstellungen für Azure-Dateifreigaben. Andererseits erfordert das Einbinden von NFS-Dateifreigaben keine schlüsselbasierte Authentifizierung.

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.

  1. 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
    
  2. 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 der Bestätigung kann es mehrere 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.

  1. 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 für den Speicher

Kubernetes weist einem oder mehreren Pods ein persistentes Volume (PV) als Speicherressource zu. Sie können PVs dynamisch über Kubernetes oder statisch als Administrator bereitstellen.

Wenn mehrere Pods gleichzeitigen Zugriff auf dasselbe Speichervolume benötigen, können Sie Azure Blob Storage verwenden, um mithilfe von NFS oder BlobFuse eine Verbindung 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.

In diesem Artikel wird erläutert, wie Sie dynamisch ein PV mit Azure-Datenträger für die Verwendung durch einen einzelnen Pod in einem AKS-Cluster erstellen.

Wenn mehrere Pods gleichzeitigen Zugriff auf dasselbe Speichervolume benötigen, können Sie Azure Files verwenden, um eine Verbindung mit dem Server Message Block (SMB) oder Network File System (NFS) herzustellen. In diesem Artikel wird gezeigt, wie Sie dynamisch eine Azure Files-Freigabe erstellen, die von mehreren Pods in einem AKS-Cluster verwendet wird.

Dynamisch bereitgestelltes Volume: Verwenden Sie diesen Ansatz, wenn Kubernetes Speicherressourcen automatisch erstellen und verwalten soll. Es eignet sich ideal für Szenarien, in denen Sie eine Bedarfsskalierung benötigen, Infrastruktur-as-Code bevorzugen und manuelle Konfigurationsschritte minimieren möchten.

Statisch bereitgestelltes Volume: Wählen Sie diese Methode aus, wenn Sie bereits über ein Azure Blob Storage-Konto oder einen Container verfügen, das Sie verwenden möchten. Sie bietet mehr Kontrolle über die Speichereinrichtung, den Zugriff und den Lebenszyklus und ist geeignet, wenn Sie eine Verbindung mit vorhandenen Ressourcen herstellen oder Speicher über mehrere Cluster oder Workloads hinweg wiederverwenden müssen.

Dieser Abschnitt enthält Anleitungen für Clusteradministratoren, die ein oder mehrere persistente Volumes bereitstellen möchten, die Details des Blob-Speichers für die Verwendung durch eine Workload enthalten. Ein persistenter Volumeanspruch (PVC) verwendet das Speicherklassenobjekt, um einen Azure Blob Storage-Container dynamisch bereitzustellen.

Führen Sie die folgenden Schritte aus, um ein persistentes Volume mit Azure Blob Storage mit der bereitgestellten Speicherklasse bereitzustellen:

  1. Erstellen Sie das StorageClass Manifest, indem Sie das folgende YAML in einer Datei namens blob-fuse-sc.yamlspeichern:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: blob-fuse
    provisioner: blob.csi.azure.com
    parameters:
      skuName: Premium_LRS  # available values: Standard_LRS, Premium_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRS, Premium_ZRS
      protocol: fuse2
      networkEndpointType: privateEndpoint
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    allowVolumeExpansion: true
    mountOptions:
      - -o allow_other
      - --file-cache-timeout-in-seconds=120
      - --use-attr-cache=true
      - --cancel-list-on-mount-seconds=10  # prevent billing charges on mounting
      - -o attr_timeout=120
      - -o entry_timeout=120
      - -o negative_timeout=120
      - --log-level=LOG_WARNING  # LOG_WARNING, LOG_INFO, LOG_DEBUG
      - --cache-size-mb=1000  # Default will be 80% of available memory, eviction will happen beyond specified value.
    
  2. Um die Speicherklasse in Ihrem Cluster zu erstellen, wenden Sie den StorageClass folgenden Befehl an:

    kubectl apply -f blob-fuse-sc.yaml
    

Erstellen Sie ein PVC mit integrierter Speicherklasse

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: Lokal redundanter Standardspeicher
  • Premium_LRS: Lokal redundanter Premium-Speicher
  • Standard_ZRS: zonenredundanter Standardspeicher
  • Premium_ZRS: zonenredundanter Premiumspeicher
  • Standard_GRS: Standardmäßiger georedundanter Speicher
  • Standard_RAGRS: Standardmäßiger georedundanter Lesezugriffsspeicher

Wenn Sie Speicher-CSI-Treiber StorageClasses auf AKS verwenden, gibt es zwei andere integrierte Treiber, die den Azure Blob CSI-Speichertreiber 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 PVC wird verwendet, um die Lagerung basierend auf einer Speicherklasse automatisch zuzuordnen. Sie können ein PVC entweder mit einer der integrierten Speicherklassen oder mit einer benutzerdefinierten Speicherklasse erstellen. Dieser PVC erstellt einen Azure Blob-Speichercontainer mit der von Ihnen angegebenen SKU, Größe und Protokoll. Wenn Sie eine Poddefinition erstellen, wird der Anspruch auf ein persistentes Volume angegeben, um den gewünschten Speicher anzufordern.

Ein PVC verwendet das Speicherklassenobjekt, um einen Azure Blob Storage-Container dynamisch bereitzustellen. Mit der integrierten Speicherklasse können Sie ein 5 GB PVC mit ReadWriteMany-Zugriff erstellen. Weitere Informationen zu Zugriffsmodi finden Sie in der Dokumentation zum persistenten Kubernetes-Volume .

  1. Erstellen Sie eine Datei namens blob-nfs-pvc.yaml und kopieren Sie die folgende YAML:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: azure-blob-storage
    spec:
      accessModes:
      - ReadWriteMany
      storageClassName: azureblob-nfs-premium
      resources:
        requests:
          storage: 5Gi
    
  2. Erstellen Sie das PVC mit dem Kubectl Create-Befehl :

    kubectl create -f blob-nfs-pvc.yaml
    

Nach Abschluss des Vorgangs wird der Blob-Speichercontainer erstellt. Sie können den Befehl kubectl get verwenden, um den Status des PVC anzuzeigen:

kubectl get pvc azure-blob-storage

Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

NAME                 STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                AGE
azure-blob-storage   Bound    pvc-b88e36c5-c518-4d38-a5ee-337a7dda0a68   5Gi        RWX            azureblob-nfs-premium       92m

Montage des PVC

Im folgenden YAML wird ein Pod erstellt, das den PVC-Azure-Blob-Speicher verwendet, um den Azure Blob Storage auf dem /mnt/blob Pfad zu mounten.

  1. Erstellen Sie eine Datei mit dem Namen blob-nfs-pv, und kopieren Sie die folgende YAML. Stellen Sie sicher, dass der ClaimName mit dem im vorherigen Schritt erstellten PVC übereinstimmt.

    kind: Pod
    apiVersion: v1
    metadata:
      name: mypod
    spec:
      containers:
      - name: mypod
        image: mcr.microsoft.com/oss/nginx/nginx:1.17.3-alpine
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        volumeMounts:
        - mountPath: "/mnt/blob"
          name: volume
          readOnly: false
      volumes:
        - name: volume
          persistentVolumeClaim:
            claimName: azure-blob-storage
    
  2. Erstellen Sie den Pod mit dem Befehl "kubectl apply":

    kubectl apply -f blob-nfs-pv.yaml
    
  3. Nachdem sich der Pod im Ausgeführten Zustand befindet, führen Sie den folgenden Befehl aus, um eine neue Datei namens test.txtzu erstellen.

    kubectl exec mypod -- touch /mnt/blob/test.txt
    
  4. Um zu überprüfen, ob der Datenträger ordnungsgemäß bereitgestellt ist, führen Sie den folgenden Befehl aus, und überprüfen Sie, ob die test.txt Datei in der Ausgabe angezeigt wird:

    kubectl exec mypod -- ls /mnt/blob
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    test.txt
    

Erstellen einer benutzerdefinierten Azure Blob-Speicherklasse

Die Standardspeicherklassen eignen sich für die gängigsten Szenarien, aber nicht für alle. In einigen Fällen sollten Sie ihre eigene Speicherklasse mit Ihren eigenen Parametern anpassen lassen. In diesem Abschnitt stellen wir zwei Beispiele mit dem ersten mit dem NFS-Protokoll und dem zweiten mit BlobFuse bereit.

In diesem Beispiel konfiguriert das folgende Manifest das Einbinden eines BLOB-Speichercontainers mithilfe des NFS-Protokolls. Verwenden Sie ihn, um den tags Parameter hinzuzufügen.

  1. Erstellen Sie eine Datei mit dem Namen blob-nfs-sc.yaml, und fügen Sie das folgende Beispielmanifest ein:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: azureblob-nfs-premium
    provisioner: blob.csi.azure.com
    parameters:
      protocol: nfs
      tags: environment=Development
    volumeBindingMode: Immediate
    allowVolumeExpansion: true
    mountOptions:
      - nconnect=4
    
  2. Erstellen Sie die Speicherklasse mit dem Befehl "kubectl apply ":

    kubectl apply -f blob-nfs-sc.yaml
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    storageclass.storage.k8s.io/blob-nfs-premium created
    

Mount ein NFS und/oder BlobFuse PV

In diesem Abschnitt stellen Sie das PV mithilfe des NFS-Protokolls oder BlobFuse ein.

Das Einbinden von Blob-Speicher mithilfe des NFS v3-Protokolls nutzt keinen Kontoschlüssel zur Authentifizierung. Ihr AKS-Cluster muss sich im selben oder einem vernetzten virtuellen Netzwerk wie der Agentknoten befinden. Die einzige Möglichkeit zum Sichern der Daten in Ihrem Speicherkonto besteht darin, ein virtuelles Netzwerk und andere Netzwerksicherheitseinstellungen zu verwenden. Weitere Informationen zum Einrichten des NFS-Zugriffs auf Ihr Speicherkonto finden Sie unter Mount Blob Storage mithilfe des Network File System (NFS) 3.0-Protokolls.

Im folgenden Beispiel wird veranschaulicht, wie sie einen BLOB-Speichercontainer mithilfe des NFS-Protokolls als persistentes Volume bereitstellen.

  1. Erstellen Sie eine Datei namens „pv-blob-nfs.yaml“, und fügen Sie den folgenden YAML-Code ein. Unter storageClass, aktualisieren Sie resourceGroup, storageAccountund containerName.

    Hinweis

    Der volumeHandle Wert in Ihrem YAML sollte eine eindeutige VolumeID für jeden identischen Speicher-BLOB-Container im Cluster sein.

    Die Zeichen # und / sind für die interne Verwendung reserviert und können nicht verwendet werden.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      annotations:
        pv.kubernetes.io/provisioned-by: blob.csi.azure.com
      name: pv-blob
    spec:
      capacity:
        storage: 1Pi
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain  # If set as "Delete" container would be removed after pvc deletion
      storageClassName: azureblob-nfs-premium
      mountOptions:
        - nconnect=4
      csi:
        driver: blob.csi.azure.com
        # make sure volumeid is unique for every identical storage blob container in the cluster
        # character `#` and `/` are reserved for internal use and cannot be used in volumehandle
        volumeHandle: account-name_container-name
        volumeAttributes:
          resourceGroup: resourceGroupName
          storageAccount: storageAccountName
          containerName: containerName
          protocol: nfs
    

    Hinweis

    Obwohl das Kubernetes-API-Kapazitätsattribut obligatorisch ist, wird dieser Wert nicht vom Azure Blob Storage CSI-Treiber verwendet, da Sie Daten flexibel schreiben können, bis Sie die Kapazitätsgrenze Ihres Speicherkontos erreichen. Der Wert des capacity Attributs wird nur für größenvergleiche zwischen PVs und PVCs verwendet. Wir empfehlen die Verwendung eines fiktiven hohen Werts. Der Pod sieht ein eingebundenes Laufwerk mit einer fiktiven Größe von 5 Petabytes.

  2. Führen Sie den folgenden Befehl aus, um das persistente Volume mithilfe des kubectl create-Befehls zu erstellen, der auf die zuvor erstellte YAML-Datei verweist:

    kubectl create -f pv-blob-nfs.yaml
    
  3. Erstellen Sie eine pvc-blob-nfs.yaml Datei mit einem PersistentVolumeClaim. Beispiel:

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc-blob
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 10Gi
      volumeName: pv-blob
      storageClassName: azureblob-nfs-premium
    
  4. Führen Sie den folgenden Befehl aus, um den persistenten Volumeanspruch mithilfe des kubectl create-Befehls zu erstellen, der auf die zuvor erstellte YAML-Datei verweist:

    kubectl create -f pvc-blob-nfs.yaml
    

Pod erstellen

Mit dem folgenden YAML wird ein Pod erstellt, der das ZUVOR erstellte PV- oder PVC-Blob verwendet, um den Azure Blob Storage auf dem /mnt/blob Pfad zu installieren.

  1. Erstellen Sie eine Datei mit dem Namen nginx-pod-blob.yaml, und fügen Sie den folgenden YAML-Code ein. Stellen Sie sicher, dass der ClaimName mit dem im vorherigen Schritt erstellten PVC übereinstimmt, wenn ein PV für NFS oder BlobFuse erstellt wird.

    kind: Pod
    apiVersion: v1
    metadata:
      name: nginx-blob
    spec:
      nodeSelector:
        "kubernetes.io/os": linux
      containers:
        - image: mcr.microsoft.com/oss/nginx/nginx:1.17.3-alpine
          name: nginx-blob
          volumeMounts:
            - name: blob01
              mountPath: "/mnt/blob"
              readOnly: false
      volumes:
        - name: blob01
          persistentVolumeClaim:
            claimName: pvc-blob
    
  2. Führen Sie den folgenden Befehl aus, um den Pod zu erstellen und das PVC mithilfe des Kubectl-Erstellungsbefehls zu montieren:

    kubectl create -f nginx-pod-blob.yaml
    
  3. Führen Sie den folgenden Befehl aus, um eine interaktive Shellsitzung mit dem Pod zu erstellen, um zu überprüfen, ob der Blob-Speicher bereitgestellt wird:

    kubectl exec -it nginx-blob -- df -h
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    Filesystem      Size  Used Avail Use% Mounted on
    ...
    blobfuse         14G   41M   13G   1% /mnt/blob
    ...
    

Erstellen Sie ein StatefulSet

Um sicherzustellen, dass Ihr Workload sein Speichervolumen bei Pod-Neustarts oder -Ersetzungen beibehält, verwenden Sie ein StatefulSet. StatefulSets vereinfachen das Zuordnen des beständigen Speichers zu Pods, sodass neue Pods, die zum Ersetzen von fehlerhaften Pods erstellt wurden, automatisch auf dieselben Speichervolumes zugreifen können. Die folgenden Beispiele veranschaulichen, wie Sie ein StatefulSet für Blob Storage mit BlobFuse oder dem NFS-Protokoll einrichten.

  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/azurelinux/base/nginx:1.25
              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 "StatefulSet" mit dem kubectl create Befehl:

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

Dynamische PVC-Speicherklassenparameter

Die folgende Tabelle enthält Parameter, mit deren Hilfe Sie eine benutzerdefinierte Speicherklasse für Ihr dynamisches PVC definieren können.

Name Description Example Obligatorisch. Standardwert
skuName Geben Sie einen Azure-Speicherkontotyp an (Alias: storageAccountType). Standard_LRS Premium_LRS Standard_GRS Standard_RAGRS Nein Standard_LRS
location Geben Sie einen Azure-Speicherort an. eastus Nein Wenn er leer ist, verwendet der Treiber denselben Speicherortnamen wie der aktuelle Cluster.
resourceGroup Geben Sie einen Azure-Ressourcengruppennamen an. myResourceGroup Nein Wenn leer, verwendet der Treiber denselben Ressourcengruppennamen wie der aktuelle Cluster.
storageAccount Geben Sie einen Azure-Speicherkontonamen an. storageAccountName Nein Wenn kein bestimmter Speicherkontoname angegeben wird, sucht der Treiber nach einem geeigneten Speicherkonto, das den Kontoeinstellungen innerhalb derselben Ressourcengruppe entspricht. Wenn ein übereinstimmende Speicherkonto nicht gefunden werden kann, wird ein neues Konto erstellt. Falls jedoch ein Speicherkontoname angegeben wird, muss das Speicherkonto bereits vorhanden sein.
networkEndpointType 1 Geben Sie den Netzwerkendpunkttyp für das vom Treiber erstellte Speicherkonto an. Wenn "privateEndpoint" angegeben ist, wird ein privater Endpunkt für das Speicherkonto erstellt. Für andere Fälle wird ein Dienstendpunkt für das NFS-Protokoll erstellt. privateEndpoint Nein Fügen Sie für einen AKS-Cluster den Namen des AKS-Clusters der Rolle "Mitwirkender" in der Ressourcengruppe hinzu, welche das VNet hostet.
protocol Geben Sie blobFuse-Mount oder NFSv3-Mount an. fuse, nfs Nein fuse
containerName Geben Sie den Namen des vorhandenen Containers (Verzeichnisses) an. container Nein Wenn leer, erstellt der Treiber einen neuen Containernamen, beginnend mit pvc-fuse BlobFuse oder pvc-nfs für NFS v3.
containerNamePrefix Geben Sie das Vom Treiber erstellte Azure-Speicherverzeichnispräfix an. mein Nein Darf nur Kleinbuchstaben, Zahlen, Bindestriche enthalten und eine Länge von weniger als 21 Zeichen haben.
server Geben Sie den Domänennamen des Azure-Speicherkontos an. Vorhandener DNS-Domänenname des Speicherkontos, z. B <storage-account>.blob.core.windows.net. . Nein Wenn leer, verwendet der Treiber standardmäßige <storage-account>.blob.core.windows.net oder andere souveräne Cloudspeicherkonto-DNS-Domänennamen.
allowBlobPublicAccess Erlauben oder verweigern Sie den öffentlichen Zugriff auf alle Blobs oder Container für das vom Treiber erstellte Speicherkonto. true,false Nein false
storageEndpointSuffix Geben Sie das Suffix für den Azure-Speicherendpunkt an. core.windows.net Nein Wenn er leer ist, verwendet der Treiber standardmäßiges Speicherendpunktsuffix gemäß Cloudumgebung.
tags [Tags][az-tags] würde in einem neuen Speicherkonto erstellt werden. Tagformat: „foo=aaa,bar=bbb“ Nein ""
matchTags Tags abgleichen, wenn der Treiber versucht, ein geeignetes Speicherkonto zu finden. true,false Nein false

1 Wenn das Speicherkonto vom Treiber erstellt wird, müssen Sie nur den Parameter in der Speicherklasse angeben networkEndpointType: privateEndpoint . Der CSI-Treiber erstellt zusammen mit dem Konto den privaten Endpunkt und die private DNS-Zone (benannt privatelink.blob.core.windows.net). Wenn Sie Ihr eigenes Speicherkonto verwenden, müssen Sie den privaten Endpunkt für das Speicherkonto erstellen. Wenn Sie Azure Blob Storage in einem isolierten Cluster verwenden, müssen Sie eine benutzerdefinierte Speicherklasse mit networkEndpointType: privateEndpoint erstellen.

Statische PV-Bereitstellungsparameter

Die folgende Tabelle enthält Parameter, die Sie zum Definieren Ihrer statischen PV verwenden können.

Name Description Example Obligatorisch. Standardwert
volumeHandle Geben Sie einen Wert an, den der Treiber verwenden kann, um den Speicher-BLOB-Container im Cluster eindeutig zu identifizieren. Eine empfohlene Möglichkeit zum Erstellen eines eindeutigen Werts besteht darin, den Namen und den Containernamen des global eindeutigem Speicherkontos zu kombinieren: {account-name}_{container-name}.

Die Zeichen # und / sind für die interne Verwendung reserviert und können nicht in einem Volumengriff verwendet werden.
Yes
volumeAttributes.resourceGroup Geben Sie den Namen der Azure-Ressourcengruppe an. myResourceGroup Nein Ohne Angabe verwendet der Treiber den gleichen Ressourcengruppennamen wie der aktuelle Cluster.
volumeAttributes.storageAccount Geben Sie den Namen eines vorhandenen Azure-Speicherkontos an. storageAccountName Yes
volumeAttributes.containerName Geben Sie den vorhandenen Containernamen an. container Yes
volumeAttributes.protocol Geben Sie BlobFuse-Mount oder NFS v3-Mount an. fuse, nfs Nein fuse

Erstellen von Azure Disk-PVs mit integrierten Speicherklassen

Eine Speicherklasse wird verwendet, um zu definieren, wie eine Speichereinheit dynamisch mit einer PV erstellt wird. Weitere Informationen zu Kubernetes-Speicherklassen finden Sie unter Kubernetes-Speicherklassen.

Wenn Sie den Azure Disk CSI-Treiber StorageClasses auf AKS verwenden, gibt es zwei weitere integrierte Treiber, die den Azure Disk CSI-Speichertreiber verwenden. Die anderen CSI-Speicherklassen werden zusammen mit dem Cluster und zusätzlich zu den Standardspeicherklassen in der Struktur erstellt.

  • managed-csi: Erstellt verwaltete Datenträger mit Azure Standard SSD mit lokal redundantem Speicher (LRS). Mit Kubernetes Version 1.29 für AKS-Cluster, die in mehreren Verfügbarkeitszonen bereitgestellt werden, verwendet diese Speicherklasse Azure Standard SSD-zonenredundanten Speicher (ZRS), um verwaltete Datenträger bereitzustellen.

  • managed-csi-premium: Stellt verwaltete Datenträger mithilfe von Azure Premium LRS bereit. Ab Kubernetes, Version 1.29, für AKS-Cluster, die mehrere Verfügbarkeitszonen umfassen, verwendet diese Speicherklasse automatisch Azure Premium ZRS, um verwaltete Datenträger zu erstellen.

Ab Kubernetes-Version 1.29 verwendet AKS bei der Bereitstellung von Azure Kubernetes Service-Clustern (AKS) über mehrere Verfügbarkeitszonen hinweg jetzt zonenredundanten Speicher (ZRS), um verwaltete Datenträger innerhalb integrierter Speicherklassen zu erstellen.

  • ZRS stellt die synchrone Replikation Ihrer von Azure verwalteten Datenträger in mehreren Azure-Verfügbarkeitszonen in Ihrer ausgewählten Region sicher. Diese Redundanzstrategie verbessert die Resilienz Ihrer Anwendungen und schützt Ihre Daten vor Rechenzentrumsfehlern.

  • Es ist jedoch wichtig zu beachten, dass zonenredundanter Speicher (ZRS) im Vergleich zu lokal redundantem Speicher (LRS) höhere Kosten verursacht. Wenn die Kostenoptimierung Priorität hat, können Sie eine neue Speicherklasse mit dem LRS-SKU-Namensparameter erstellen und in Ihrem Anspruch auf ein persistentes Volume (Persistent Volume Claim, PVC) verwenden.

Die Verringerung der Größe eines PVC wird aufgrund des Risikos von Datenverlusten nicht unterstützt. Sie können eine vorhandene Speicherklasse mit dem Befehl kubectl edit sc bearbeiten, oder Sie können eine eigene benutzerdefinierte Speicherklasse erstellen. Wenn Sie beispielsweise einen Datenträger mit der Größe 4 TiB verwenden möchten, müssen Sie eine Speicherklasse erstellen, die cachingmode: None definiert, da die Zwischenspeicherung für Datenträger ab 4 TiB nicht unterstützt wird[disk-host-cache-setting]. Weitere Informationen zu Speicherklassen und der Erstellung eigener Speicherklassen finden Sie unter Speicheroptionen für Anwendungen in AKS.

Die Zurückforderungsrichtlinie in beiden Speicherklassen stellt sicher, dass die zugrunde liegenden Azure-Datenträger gelöscht werden, wenn die jeweilige PV gelöscht wird. Die Speicherklassen konfigurieren auch die PVs, um erweiterbar zu sein. Sie brauchen nur das PVC mit der neuen Größe zu bearbeiten.

Um diese Speicherklassen zu verwenden, erstellen Sie ein PVC und einen entsprechenden Pod, der auf sie verweist und verwendet. Ein PVC wird verwendet, um die Lagerung basierend auf einer Speicherklasse automatisch bereitzustellen. Ein PVC kann eine der vordefinierten Speicherklassen oder eine benutzerdefinierte Speicherklasse verwenden, um einen azureverwalteten Datenträger für die gewünschte SKU und Größe zu erstellen. Wenn Sie eine Poddefinition erstellen, wird der Anspruch auf ein persistentes Volume angegeben, um den gewünschten Speicher anzufordern.

Hinweis

Persistent Volume-Anforderungen werden in GiB angegeben, aber Azure Managed Disks werden basierend auf dem SKU für eine bestimmte Größe abgerechnet. Diese SKUs reichen von 32 GiB für S4- oder P4-Datenträger bis 32 TiB für S80- oder P80-Datenträger (in der Vorschau). Der Durchsatz und die IOPS-Leistung eines verwalteten Premium-Datenträgers hängen sowohl von der SKU als auch von der Instanzgröße der Knoten im AKS-Cluster ab. Weitere Informationen finden Sie unter Verwaltete Datenträger – Preise und Leistung.

Sie können die vordefinierten Speicherklassen mithilfe des Befehls kubectl get sc anzeigen. Im folgenden Beispiel werden die in einem AKS-Cluster verfügbaren vorab erstellten Speicherklassen gezeigt:

kubectl get sc

Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

NAME                PROVISIONER                AGE
default (default)   disk.csi.azure.com         1h
managed-csi         disk.csi.azure.com         1h

Ein PVC stellt die Lagerung basierend auf einer Lagerklasse automatisch fest. In diesem Fall kann ein PVC eine der zuvor erstellten Speicherklassen verwenden, um einen verwalteten Azure Standard- oder Premium-Datenträger zu erstellen.

  1. Erstellen Sie eine Datei namens azure-pvc.yaml, und fügen Sie das folgende Manifest ein. Der Anspruch fordert einen Datenträger mit dem Namen azure-managed-disk und der Größe 5 GB mit ReadWriteOnce Zugriff an. Als Speicherklasse ist managed-csi angegeben.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
        name: azure-managed-disk
    spec:
      accessModes:
      - ReadWriteOnce
      storageClassName: managed-csi
      resources:
        requests:
          storage: 5Gi
    

    Tipp

    Verwenden Sie zum Erstellen eines Datenträgers, der den Premium-Speicher verwendet, storageClassName: managed-csi-premium statt managed-csi.

  2. Erstellen Sie mit dem Befehl kubectl apply einen Anspruch auf ein persistentes Volume, und geben Sie die Datei azure-pvc.yaml an.

    kubectl apply -f azure-pvc.yaml
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    persistentvolumeclaim/azure-managed-disk created
    

Anwenden eines PVC auf eine Kapsel

Nachdem Sie den Anspruch für ein persistentes Volume erstellt haben, müssen Sie überprüfen, ob es den Status Pending hat. Der Status Pending gibt an, dass es bereit ist, von einem Pod verwendet zu werden.

  1. Überprüfen Sie mit dem Befehl kubectl describe pvc den Status des PVC.

    kubectl describe pvc azure-managed-disk
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden verknappten Beispiel aus:

    Name:            azure-managed-disk
    Namespace:       default
    StorageClass:    managed-csi
    Status:          Pending
    [...]
    
  2. Erstellen Sie eine Datei namens azure-pvc-disk.yaml, und fügen Sie das folgende Manifest ein. Dieses Manifest erstellt einen einfachen NGINX-Pod, der den persistenten Volume Claim mit dem Namen azure-managed-disk verwendet, um den Azure-Datenträger am Pfad /mnt/azure bereitzustellen. Geben Sie für Windows Server-Container eine mountPath Verwendung der Windows-Pfadkonvention an, z. B. "D:".

    kind: Pod
    apiVersion: v1
    metadata:
      name: mypod
    spec:
      containers:
        - name: mypod
          image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 250m
              memory: 256Mi
          volumeMounts:
            - mountPath: "/mnt/azure"
              name: volume
              readOnly: false
      volumes:
        - name: volume
          persistentVolumeClaim:
            claimName: azure-managed-disk
    
  3. Erstellen Sie den Pod mit dem Befehl kubectl apply.

    kubectl apply -f azure-pvc-disk.yaml
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    pod/mypod created
    
  4. Sie verfügen nun über einen ausgeführten Pod mit Ihrem Azure-Datenträger, der im Verzeichnis /mnt/azure eingebunden wurde. Überprüfen Sie die Pod-Konfiguration mit dem Befehl kubectl describe.

    kubectl describe pod mypod
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    [...]
    Volumes:
      volume:
        Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
        ClaimName:  azure-managed-disk
        ReadOnly:   false
       default-token-smm2n:
        Type:        Secret (a volume populated by a Secret)
        SecretName:  default-token-smm2n
        Optional:    false
    [...]
     Events:
      Type    Reason                 Age   From                               Message
      ----    ------                 ----  ----                               -------
      Normal  Scheduled              2m    default-scheduler                  Successfully assigned mypod to aks-nodepool1-79590246-0
      Normal  SuccessfulMountVolume  2m    kubelet, aks-nodepool1-79590246-0  MountVolume.SetUp succeeded for volume "default-token-smm2n"
      Normal  SuccessfulMountVolume  1m    kubelet, aks-nodepool1-79590246-0  MountVolume.SetUp succeeded for volume "pvc-faf0f176-8b8d-11e8-923b-deb28c58d242"
    [...]
    

Dynamische Speicherklassenparameter für PVCs

Die folgende Tabelle enthält Parameter, die Sie zum Definieren einer benutzerdefinierten Speicherklasse für Ihre PVCs verwenden können.

Name Bedeutung Verfügbarer Wert Obligatorisch. Standardwert
skuName Speicherkontotyp für Azure-Datenträger (Alias: storageAccountType) Standard_LRS, , Premium_LRSStandardSSD_LRS, PremiumV2_LRS, UltraSSD_LRS, , Premium_ZRSStandardSSD_ZRS Nein StandardSSD_LRS
fsType Dateisystemtyp ext4, ext3, ext2, xfs, btrfs für Linux, ntfs für Windows Nein ext4 für Linux, ntfs für Windows
cachingMode [Azure Data Disk Host Cache Setting][disk-host-cache-setting](PremiumV2_LRS und UltraSSD_LRS unterstützen None nur den Cachemodus) None, ReadOnlyReadWrite Nein ReadOnly
resourceGroup Angeben der Ressourcengruppe für die Azure Disks Vorhandener Ressourcengruppenname Nein Ohne Angabe verwendet der Treiber den gleichen Ressourcengruppennamen wie der aktuelle AKS-Cluster.
DiskIOPSReadWrite [UltraSSD-Datenträger][Ultra-SSD-Datenträger] oder [Premium SSD v2][premiumv2_lrs_disks] IOPS-Kapazität (Minimum: 2 IOPS/GiB) 100~160.000 Nein 500
DiskMBpsReadWrite [UltraSSD-Datenträger] [ultra-ssd-disks] oder [Premium SSD v2] [premiumv2_lrs_disks] Durchsatzkapazität (mindestens: 0.032/GiB) 1~2.000 Nein 100
LogicalSectorSize Logische Sektorgröße in Bytes für Disk Ultra. Unterstützte Werte: 512 und 4.096. 4.096 ist der Standardwert. 512, 4096 Nein 4096
tags Azure Disk [tags][azure-tags] Tagformat: key1=val1,key2=val2 Nein ""
diskEncryptionSetID ResourceId des Datenträgerverschlüsselungssatzes, der für [Aktivieren der Verschlüsselung im Ruhezustand][Datenträgerverschlüsselung] verwendet werden soll Format: /subscriptions/{subs-id}/resourceGroups/{rg-name}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSet-name} Nein ""
diskEncryptionType Verschlüsselungstyp des Datenträgerverschlüsselungssatzes. EncryptionAtRestWithCustomerKey (standardmäßig) EncryptionAtRestWithPlatformAndCustomerKeys Nein ""
writeAcceleratorEnabled [Write Accelerator auf Azure-Datenträgern][azure-disk-write-accelerator] true, false Nein ""
networkAccessPolicy Eigenschaft „networkAccessPolicy“ zur Vermeidung der Generierung des SAS-URI für einen Datenträger oder für eine Momentaufnahme AllowAll, DenyAllAllowPrivate Nein AllowAll
diskAccessID Azure-Ressourcen-ID der Ressource „DiskAccess“ zur Verwendung privater Endpunkte auf Datenträgern Nein ``
enableBursting [On-Demand-Bursting aktivieren][On-Demand-Bursting] über das bereitgestellte Leistungsziel des Datenträgers hinaus. Bedarfsgesteuertes Bursting sollte nur für Premium-Datenträger und bei einer Datenträgergröße > 512 GB verwendet werden. Ultra-Datenträger und freigegebene Datenträger werden nicht unterstützt. Bursting ist standardmäßig deaktiviert. true, false Nein false
userAgent Der User Agent wird für [Customer Usage Attribution][customer-usage-attribution] verwendet. Nein Der generierte Benutzer-Agent ist formatiert als driverName/driverVersion compiler/version (OS-ARCH)
subscriptionID Angeben der Azure-Abonnement-ID, unter der die Azure-Datenträger erstellt werden. Azure-Abonnement-ID Nein Ist dieser Wert nicht leer, muss resourceGroup angegeben werden.

Statische Bereitstellungsparameter für eine Photovoltaikanlage

Die folgende Tabelle enthält Parameter, die Sie zum Definieren einer PV verwenden können.

Name Bedeutung Verfügbarer Wert Obligatorisch. Standardwert
volumeHandle Azure-Datenträger-URI /subscriptions/{sub-id}/resourcegroups/{group-name}/providers/microsoft.compute/disks/{disk-id} Yes N/A
volumeAttributes.fsType Dateisystemtyp ext4, ext3, ext2, xfs, btrfs für Linux, ntfs für Windows Nein ext4 für Linux, ntfs für Windows
volumeAttributes.partition Partitionsnummer des vorhandenen Datenträgers (nur unter Linux unterstützt) 1, 23 Nein Leer (keine Partition)
- Stellen Sie sicher, dass das folgende Partitionsformat verwendet wird: -part1.
volumeAttributes.cachingMode [Einstellung des Datenträgerhostcaches][disk-host-cache-setting] None, ReadOnlyReadWrite Nein ReadOnly

Erstellen einer benutzerdefinierten Azure Disk-Speicherklasse

Die Standardspeicherklassen eignen sich für die meisten gängigen Szenarien. In einigen Fällen möchten Sie möglicherweise Ihre eigene Speicherklasse mit eigenen Parametern anpassen. Sie können beispielsweise die volumeBindingMode Klasse ändern.

Sie können eine volumeBindingMode: Immediate Klasse verwenden, die garantiert, dass sie sofort auftritt, sobald der persistente Volumenanspruch (PVC) erstellt wird. Wenn Ihre Knotenpools topologiebedingt sind, z. B. bei Verwendung von Verfügbarkeitszonen, würden PVs gebunden oder bereitgestellt, ohne Kenntnis der Planungsanforderungen des Pods.

Um dieses Szenario zu beheben, können Sie verwenden volumeBindingMode: WaitForFirstConsumer, was die Bindung und Bereitstellung einer PV verzögert, bis ein Pod erstellt wird, das das PVC verwendet. Dieser Ansatz stellt sicher, dass das persistente Volume (PV) in derselben Verfügbarkeitszone oder Topologie wie erforderlich gemäß den Planungseinschränkungen des Pods bereitgestellt wird. Die Standardspeicherklassen verwenden volumeBindingMode: WaitForFirstConsumer Klasse.

  1. Erstellen Sie eine Datei mit dem Namen sc-azuredisk-csi-waitforfirstconsumer.yaml, und fügen Sie dann das folgende Manifest ein. Die Speicherklasse ist identisch mit unserer managed-csi Speicherklasse, aber mit einer anderen volumeBindingMode Klasse. Beispiel:

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: azuredisk-csi-waitforfirstconsumer
    provisioner: disk.csi.azure.com
    parameters:
      skuname: StandardSSD_LRS
    allowVolumeExpansion: true
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
    
  2. Erstellen Sie die Speicherklasse, indem Sie den Befehl "kubectl apply" ausführen, und geben Sie Die sc-azuredisk-csi-waitforfirstconsumer.yaml Datei an:

    kubectl apply -f sc-azuredisk-csi-waitforfirstconsumer.yaml
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    storageclass.storage.k8s.io/azuredisk-csi-waitforfirstconsumer created
    

Informationen zu Volumenschnappschüssen

Der Azure Disk CSI-Treiber unterstützt Volumemomentaufnahmen, sodass Sie den Status persistenter Volumes zu bestimmten Zeitpunkten für Sicherungs- und Wiederherstellungsvorgänge erfassen können. Mithilfe von Volumesnapshots können Sie zeitpunktbezogene Kopien Ihrer persistenten Daten erstellen, ohne laufende Anwendungen zu unterbrechen. Sie können diese Momentaufnahmen verwenden, um neue Volumen zu erstellen oder vorhandene in einen vorherigen Zustand zu versetzen.

Sie können zwei Arten von Momentaufnahmen erstellen:

  • Vollständige Momentaufnahmen: Erfassen Sie den vollständigen Zustand des Datenträgers.

  • Inkrementelle Momentaufnahmen: Erfassen Sie nur die Änderungen seit der letzten Momentaufnahme, was eine bessere Speichereffizienz und Kosteneinsparungen bietet. Inkrementelle Momentaufnahmen sind das Standardverhalten, wenn der incremental Parameter in Ihrer VolumeSnapshotClass festgelegt true ist.

Die folgende Tabelle enthält Details zu diesen Parametern.

Name Bedeutung Verfügbarer Wert Obligatorisch. Standardwert
resourceGroup Ressourcengruppe zum Speichern von Momentaufnahmen VORHANDENE RESSOURCENGRUPPE Nein Wenn nicht angegeben, werden Momentaufnahmen in derselben Ressourcengruppe wie Azure-Quelldatenträger gespeichert.
inkremental Erstellen einer vollständigen oder inkrementellen Momentaufnahme true, false Nein true
tags Azure Disks Tags Tagformat: 'key1=val1,key2=val2' Nein ""
userAgent Benutzer-Agent für die Zuordnung der Nutzung durch Kunden Nein Generierter Benutzer-Agent im Format driverName/driverVersion compiler/version (OS-ARCH)
subscriptionID Angeben der Azure-Abonnement-ID, in der Azure-Datenträger erstellt werden Azure-Abonnement-ID Nein Wenn nicht leer, muss resourceGroup angegeben werden und incremental muss als false gesetzt werden.

Volumesnapshots unterstützen die folgenden Szenarien:

  • Sicherung und Wiederherstellung: Erstellen Von Point-in-Time-Sicherungen zustandsbehafteter Anwendungsdaten und Wiederherstellung bei Bedarf.
  • Datenklonen: Klonen Sie vorhandene Volumes, um neue persistente Volumes mit denselben Daten zu erstellen.
  • Notfallwiederherstellung: Schnelle Wiederherstellung bei Datenverlust oder Beschädigung.

Erstellen einer Volumemomentaufnahme

Hinweis

Stellen Sie vor dem Fortfahren sicher, dass die Anwendung keine Daten auf den Quelldatenträger schreibt.

  1. Erstellen Sie als Beispiel für diese Fähigkeit eine Volumemomentaufnahmeklasse mit dem Befehl kubectl apply:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/storageclass-azuredisk-snapshot.yaml
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    volumesnapshotclass.snapshot.storage.k8s.io/csi-azuredisk-vsc created
    
  2. Erstellen Sie eine Volumenmomentaufnahme aus dem PVC, das zuvor in diesem Artikel erstellt wurde.

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/azuredisk-volume-snapshot.yaml
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    volumesnapshot.snapshot.storage.k8s.io/azuredisk-volume-snapshot created
    
  3. Führen Sie den folgenden Befehl aus, um zu überprüfen, ob die Momentaufnahme ordnungsgemäß erstellt wurde:

    kubectl describe volumesnapshot azuredisk-volume-snapshot
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    Name:         azuredisk-volume-snapshot
    Namespace:    default
    Labels:       <none>
    Annotations:  API Version:  snapshot.storage.k8s.io/v1
    Kind:         VolumeSnapshot
    Metadata:
      Creation Timestamp:  2020-08-27T05:27:58Z
      Finalizers:
        snapshot.storage.kubernetes.io/volumesnapshot-as-source-protection
        snapshot.storage.kubernetes.io/volumesnapshot-bound-protection
      Generation:        1
      Resource Version:  714582
      Self Link:         /apis/snapshot.storage.k8s.io/v1/namespaces/default/volumesnapshots/azuredisk-volume-snapshot
      UID:               dd953ab5-6c24-42d4-ad4a-f33180e0ef87
    Spec:
      Source:
        Persistent Volume Claim Name:  pvc-azuredisk
      Volume Snapshot Class Name:      csi-azuredisk-vsc
    Status:
      Bound Volume Snapshot Content Name:  snapcontent-dd953ab5-6c24-42d4-ad4a-f33180e0ef87
      Creation Time:                       2020-08-31T05:27:59Z
      Ready To Use:                        true
      Restore Size:                        10Gi
    Events:                                <none>
    

Erstellen eines neuen PVC basierend auf einer Volumenmomentaufnahme

Sie können ein neues PVC basierend auf einem Volumensnapshot erstellen.

  1. Verwenden Sie die im vorherigen Schritt erstellte Momentaufnahme, und erstellen Sie ein neues PVC und einen neuen Pod , um ihn zu verbrauchen:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/pvc-azuredisk-snapshot-restored.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/snapshot/nginx-pod-restored-snapshot.yaml
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    persistentvolumeclaim/pvc-azuredisk-snapshot-restored created
    pod/nginx-restored created
    
  2. Um sicherzustellen, dass es sich um denselben PVC handelt, der zuvor erzeugt wurde, überprüfen Sie den Inhalt, indem Sie den folgenden Befehl ausführen:

    kubectl exec nginx-restored -- ls /mnt/azuredisk
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    lost+found
    outfile
    test.txt
    

Wir können unsere zuvor erstellte test.txt Datei weiterhin erwartungsgemäß sehen.

Klonen von Volumes

Ein geklontes Volume wird als Duplikat eines vorhandenen Kubernetes-Volumes definiert. Weitere Informationen zum Klonen von Volumes in Kubernetes finden Sie unter Volume Cloning.

  1. Erstellen Sie ein geklontes Volume des zuvor erstelltenazuredisk-pvc und einen neuen Pod, um es zu verwenden.

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/cloning/pvc-azuredisk-cloning.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/cloning/nginx-pod-restored-cloning.yaml
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    persistentvolumeclaim/pvc-azuredisk-cloning created
    pod/nginx-restored-cloning created
    
  2. Sie können den Inhalt des geklonten Volumes überprüfen, indem Sie den folgenden Befehl ausführen und bestätigen, dass die Datei test.txt erstellt wird:

    kubectl exec nginx-restored-cloning -- ls /mnt/azuredisk
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    lost+found
    outfile
    test.txt
    

Ändern der Größe einer Azure Disk PV ohne Ausfallzeiten

Sie können ein größeres Volume für einen Anspruch auf ein persistentes Volume anfordern. Bearbeiten Sie das PVC-Objekt, und geben Sie eine höhere Größe an. Diese Änderung löst die Erweiterung des zugrunde liegenden Volumes für den Anspruch auf ein persistentes Volume aus.

Hinweis

Für den Anspruch wird nie ein neues persistentes Volume erstellt. Stattdessen wird die Größe eines vorhandenen Volumes geändert.

In AKS unterstützt die integrierte managed-csi Speicherklasse bereits die Erweiterung, daher verwenden Sie die zuvor erstellte. Das PVC verlangte ein 10-Gi Persistent Volume. Sie können bestätigen, indem Sie den folgenden Befehl ausführen:

kubectl exec -it nginx-azuredisk -- df -h /mnt/azuredisk

Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

Filesystem      Size  Used Avail Use% Mounted on
/dev/sdc        9.8G   42M  9.8G   1% /mnt/azuredisk
  1. Erweitern Sie das PVC, indem Sie das spec.resources.requests.storage Feld erhöhen, das den folgenden Befehl ausführt:

    kubectl patch pvc pvc-azuredisk --type merge --patch '{"spec": {"resources": {"requests": {"storage": "15Gi"}}}}'
    

    Hinweis

    Das Verkleinern von PVs wird derzeit nicht unterstützt. Wenn Sie versuchen, ein vorhandenes PVC mit einer kleineren Größe als dem aktuellen zu patchen, führt zu der folgenden Fehlermeldung:

    The persistentVolumeClaim "pvc-azuredisk" is invalid: spec.resources.requests.storage: Forbidden: field can not be less than previous value.

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    persistentvolumeclaim/pvc-azuredisk patched
    
  2. Führen Sie den folgenden Befehl aus, um zu bestätigen, dass die Volumengröße erhöht wurde:

    kubectl get pv
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    NAME                                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                     STORAGECLASS   REASON   AGE
    pvc-391ea1a6-0191-4022-b915-c8dc4216174a   15Gi       RWO            Delete           Bound    default/pvc-azuredisk     managed-csi             2d2h
    (...)
    
  3. Führen Sie nach ein paar Minuten die folgenden Befehle aus, um die Größe des PVC zu bestätigen:

    kubectl get pvc pvc-azuredisk
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    NAME            STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    pvc-azuredisk   Bound    pvc-391ea1a6-0191-4022-b915-c8dc4216174a   15Gi       RWO            managed-csi    2d2h
    
  4. Führen Sie den folgenden Befehl aus, um die Größe des Datenträgers innerhalb des Pods zu bestätigen:

    kubectl exec -it nginx-azuredisk -- df -h /mnt/azuredisk
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sdc         15G   46M   15G   1% /mnt/azuredisk
    

Wenn Ihr Pod über mehrere Container verfügt, können Sie mithilfe des folgenden Befehls angeben, welcher Container gemeint ist.

kubectl exec -it nginx-azuredisk -c <ContainerName> -- df -h /mnt/azuredisk

Windows-Container

Der Azure Disk CSI-Treiber unterstützt Windows-Knoten und -Container. Wenn Sie Windows-Container verwenden möchten, folgen Sie den Windows-Containern schnellstart , um einen Windows-Knotenpool hinzuzufügen.

  1. Nachdem Sie über einen Windows-Knotenpool verfügen, können Sie jetzt die integrierten Speicherklassen wie managed-csi, z. B. verwenden. Sie können ein Windows-basiertes StatefulSet-Beispiel bereitstellen, das Zeitstempel in der Datei data.txt speichert, indem Sie den folgenden kubectl apply-Befehl ausführen:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azuredisk-csi-driver/master/deploy/example/windows/statefulset.yaml
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    statefulset.apps/busybox-azuredisk created
    
  2. Führen Sie den folgenden Befehl aus, um den Inhalt des Volumes zu überprüfen:

    kubectl exec -it statefulset-azuredisk-win-0 -- powershell -c "type c:/mnt/azuredisk/data.txt"
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    2020-08-27 08:13:41Z
    2020-08-27 08:13:42Z
    2020-08-27 08:13:44Z
    (...)
    

On-Demand-Platzung

Beim bedarfsgesteuerten Festplatten-Ausbruchsmodell können Festplatten-Ausbrüche immer dann ausgeführt werden, wenn die Anforderungen der Festplatte ihre aktuelle Kapazität überschreiten. Dieses Modell generiert jederzeit zusätzliche Gebühren, wenn die Festplatte burstet. On-Demand-Bursting ist nur für Premium-SSDs verfügbar, die größer als 512 GiB sind. Weitere Informationen zu Premium-SSDs, die IOPS und Durchsatz pro Datenträger bereitgestellt haben, finden Sie unter Premium SSD-Größe. Alternativ ist kreditbasiertes Bursting der Ort, an dem der Datenträger nur dann platzt, wenn es Guthaben in seinem Kredit-Bucket angesammelt hat. Kreditbasiertes Bursting generiert keine zusätzlichen Gebühren, wenn der Datenträger platzt. Credit-based Bursting ist nur für Premium-SSDs 512 GiB und kleiner und Standard-SSDs 1,024 GiB und kleiner verfügbar. Weitere Informationen zum On-Demand-Bursting finden Sie unter "On-Demand-Bursting".

Von Bedeutung

Die Standardspeicherklasse managed-csi-premium hat "On-Demand-Bursting" deaktiviert und verwendet kreditbasiertes Bursting. Jede Premium-SSD, die dynamisch durch einen persistenten Volume-Claim basierend auf der Standard-Speicherklasse managed-csi-premium erstellt wird, hat auch das On-Demand-Bursting deaktiviert.

Um ein Premium SSD-persistentes Volume mit aktiviertem On-Demand-Bursting zu erstellen, können Sie eine neue Speicherklasse erstellen, wobei der Parameter enableBursting in der folgenden YAML-Vorlage auf true festgelegt ist. Weitere Informationen zum Aktivieren von On-Demand-Bursting finden Sie unter "On-Demand-Bursting". Weitere Informationen zum Erstellen Ihrer eigenen Speicherklasse mit aktiviertem On-Demand-Bursting finden Sie unter Create a Burstable Managed CSI Premium Storage Class.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: burstable-managed-csi-premium
provisioner: disk.csi.azure.com
parameters:
  skuname: Premium_LRS
  enableBursting: "true"
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

Bereinigen von Ressourcen

Wenn Sie mit den in diesem Artikel erstellten Ressourcen fertig sind, können Sie sie mithilfe des Befehls kubectl delete entfernen.

# Remove the pod
kubectl delete -f azure-pvc-disk.yaml

# Remove the persistent volume claim
kubectl delete -f azure-pvc.yaml

Bereitstellen von Azure Files-PVs

Azure Files unterstützt Azure Premium-Dateifreigaben. Die kleinstmögliche Kapazität für Dateifreigaben beträgt 100 GiB. Wir empfehlen, Azure Premium-Dateifreigaben anstelle von Standarddateifreigaben zu verwenden, da Premium-Dateifreigaben höhere Leistung und niedriglatenzige Festplattenunterstützung für E/A-intensive Workloads bieten. Bei Azure Files-Freigaben gibt es keine Beschränkung, wie viele auf einem Knoten bereitgestellt werden können. Weitere Informationen zu Kubernetes-Volumes finden Sie unter Speicheroptionen für Anwendungen in AKS.

Wenn Sie CSI-Speichertreiber in AKS verwenden, gibt es zwei zusätzliche integrierte Speicherklassen (StorageClasses), die die Azure Files-CSI-Speichertreiber verwenden. Die anderen CSI-Speicherklassen werden zusammen mit dem Cluster und zusätzlich zu den Standardspeicherklassen in der Struktur erstellt.

  • azurefile-csi: Verwendet Azure Storage Standard zum Erstellen einer Azure-Dateifreigabe.

  • azurefile-csi-premium: Verwendet Azure Storage Premium zum Erstellen einer Azure-Dateifreigabe.

Die Freigaberichtlinie für beide Speicherklassen stellt sicher, dass beim Löschen eines persistenten Volumes auch die zugrunde liegende Azure Files Freigabe gelöscht wird. Da die Speicherklassen auch die Dateifreigaben so konfigurieren, dass sie erweiterbar sind, müssen Sie nur das PVC mit der neuen Größe bearbeiten.

Hinweis

Um die beste Erfahrung mit Azure Files zu erhalten, befolgen Sie diese bewährten Methoden. Der Speicherort zum Konfigurieren der Bereitstellungsoptionen (mountOptions) hängt davon ab, ob Sie dynamische oder statische persistente Volumes bereitstellen.

  • Wenn Sie ein Volume dynamisch mit einer Speicherklasse bereitstellen, geben Sie die Bereitstellungsoptionen für das Speicherklassenobjekt an (Art: StorageClass).
  • Wenn Sie ein Volume statisch bereitstellen, geben Sie die Bereitstellungsoptionen für das PersistentVolume-Objekt an (Art: PersistentVolume).
  • Wenn Sie die Dateifreigabe als Inline-Volume bereitstellen, geben Sie die Mount-Optionen für das Pod-Objekt an (Typ: Pod).

Wir empfehlen FIO bei der Durchführung von Benchmarking-Tests. Weitere Informationen finden Sie unter Benchmarking-Tools und -Tests.

Mit einer Speicherklasse wird festgelegt, wie eine Azure-Dateifreigabe erstellt wird. Es wird automatisch ein Speicherkonto in der Knotenressourcengruppe für die Verwendung mit der Speicherklasse erstellt, in dem die Azure-Dateifreigabe gespeichert wird. Wählen Sie für skuName eine der folgenden Azure-Speicherredundanz-SKUs aus:

  • Standard_LRS: Lokal redundanter Standardspeicher
  • Standard_GRS: Standardmäßiger georedundanter Speicher
  • Standard_ZRS: Standardzonenredundanter Speicher
  • Standard_RAGRS: Standardmäßiger georedundanter Lesezugriffsspeicher
  • Standard_RAGZRS: Standardmäßiger geozonenredundanter Lesezugriffsspeicher
  • Premium_LRS: Lokal redundanter Premium-Speicher
  • Premium_ZRS: Premium-zonenredundanter Speicher

Weitere Informationen zu Kubernetes-Speicherklassen für Azure Files finden Sie unter Kubernetes-Speicherklassen.

  1. Erstellen Sie eine Datei mit dem Namen azure-file-sc.yaml, und fügen Sie das folgende Beispielmanifest ein. Weitere Informationen mountOptionsfinden Sie im Abschnitt " Mount options ".

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: my-azurefile
    provisioner: file.csi.azure.com # replace with "kubernetes.io/azure-file" if aks version is less than 1.21
    allowVolumeExpansion: true
    mountOptions:
     - dir_mode=0777
     - file_mode=0777
     - uid=0
     - gid=0
     - mfsymlinks
     - cache=strict
     - actimeo=30
     - nobrl  # disable sending byte range lock requests to the server and for applications which have challenges with posix locks
    parameters:
      skuName: Premium_LRS
    
  2. Erstellen Sie die Speicherklasse mit dem Befehl kubectl apply.

    kubectl apply -f azure-file-sc.yaml
    

Erstellen Sie ein PVC

Ein PVC verwendet das Speicherklassenobjekt, um eine Azure-Dateifreigabe dynamisch bereitzustellen. Mit dem folgenden YAML können Sie ein PVC mit 100 GB Größe mit ReadWriteMany-Zugriff erstellen. Weitere Informationen zu Zugriffsmodi finden Sie unter Persistentes Kubernetes-Volume.

  1. Erstellen Sie eine Datei namens „azure-file-pvc.yaml“, und fügen Sie den folgenden YAML-Code ein. Stellen Sie sicher, dass storageClassName der Speicherklasse, die Sie im vorherigen Schritt erstellt haben, entspricht.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: my-azurefile
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: my-azurefile
      resources:
        requests:
          storage: 100Gi
    

    Hinweis

    Wenn Sie die Premium_LRS-SKU für die Speicherklasse verwenden, muss der Wert für storage mindestens 100Gi betragen.

  2. Erstellen Sie das PVC mit dem kubectl apply Befehl.

    kubectl apply -f azure-file-pvc.yaml
    

    Nach Abschluss des Vorgangs wird die Dateifreigabe erstellt. Außerdem wird ein Kubernetes-Geheimnis erstellt, das die Verbindungs- und Anmeldeinformationen enthält. Mit dem Befehl kubectl get können Sie den Status des PVC anzeigen:

    kubectl get pvc my-azurefile
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    NAME           STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS      AGE
    my-azurefile   Bound     pvc-8436e62e-a0d9-11e5-8521-5a8664dc0477   100Gi       RWX           my-azurefile      5m
    

Montage des PVC

Im folgenden YAML wird ein Pod erstellt, das das PVC my-azurefile verwendet, um die Azure Files-Dateifreigabe auf dem Pfad /mnt/azure zu mounten. Geben Sie für Windows Server-Container einen Pfad nach der Windows-Pfadkonvention an, z. B. "D:".

  1. Erstellen Sie eine Datei mit dem Namen azure-pvc-files.yaml, und fügen Sie den folgenden YAML-Code ein. Stellen Sie sicher, dass der claimName mit dem PVC übereinstimmt, den Sie im vorherigen Schritt erstellt haben.

    kind: Pod
    apiVersion: v1
    metadata:
      name: mypod
    spec:
      containers:
        - name: mypod
          image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: 250m
              memory: 256Mi
          volumeMounts:
            - mountPath: /mnt/azure
              name: volume
              readOnly: false
      volumes:
       - name: volume
         persistentVolumeClaim:
           claimName: my-azurefile
    
  2. Erstellen Sie den Pod mit dem Befehl kubectl apply.

    kubectl apply -f azure-pvc-files.yaml
    

    Sie verfügen jetzt über einen ausgeführten Pod mit Ihrer Azure Files-Dateifreigabe, die im Verzeichnis "/mnt/azure " bereitgestellt ist. Diese Konfiguration wird angezeigt, wenn Sie Ihren Pod mit dem Befehl kubectl describe überprüfen. In der folgenden verkürzten Beispielausgabe ist das im Container eingebundene Volume angegeben.

    Containers:
      mypod:
        Container ID:   docker://053bc9c0df72232d755aa040bfba8b533fa696b123876108dec400e364d2523e
        Image:          mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
        Image ID:       docker-pullable://nginx@sha256:d85914d547a6c92faa39ce7058bd7529baacab7e0cd4255442b04577c4d1f424
        State:          Running
          Started:      Fri, 01 Mar 2019 23:56:16 +0000
        Ready:          True
        Mounts:
          /mnt/azure from volume (rw)
          /var/run/secrets/kubernetes.io/serviceaccount from default-token-8rv4z (ro)
    [...]
    Volumes:
      volume:
        Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
        ClaimName:  my-azurefile
        ReadOnly:   false
    [...]
    

Einbindungsoptionen

Für Kubernetes-Versionen 1.13.0 und höher sind die Standardwerte für fileMode und dirMode sind 0777. Wenn Sie PVs dynamisch mithilfe einer Speicherklasse bereitstellen, können Sie Bereitstellungsoptionen direkt im Speicherklassenmanifest definieren. Ausführliche Informationen finden Sie unter Bereitstellungsoptionen. Das folgende Beispiel veranschaulicht das Festlegen dieser Berechtigungen auf 0777:

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: my-azurefile
provisioner: file.csi.azure.com # replace with "kubernetes.io/azure-file" if aks version is less than 1.21
allowVolumeExpansion: true
mountOptions:
  - dir_mode=0777
  - file_mode=0777
  - uid=0
  - gid=0
  - mfsymlinks
  - cache=strict
  - actimeo=30
  - nobrl  # disable sending byte range lock requests to the server and for applications which have challenges with posix locks
parameters:
  skuName: Premium_LRS

Speicherklassenparameter für dynamische Volumes

Die folgende Tabelle enthält Parameter, die Sie zum Definieren einer benutzerdefinierten Speicherklasse für Ihr PVC verwenden können.

Name Bedeutung Verfügbarer Wert Obligatorisch. Standardwert
accountAccessTier Zugriffsebene für das Speicherkonto Für das Standard-Konto kann Hot oder Cool und für das Premium-Konto nur Premium ausgewählt werden. Nein Leer. Verwenden Sie die Standardeinstellung für verschiedene Speicherkontotypen.
accountQuota Hiermit wird das Kontingent für ein Konto eingeschränkt. Sie können ein maximales Kontingent in GB angeben (standardmäßig 102.400 GB). Wenn das Konto das angegebene Kontingent überschreitet, überspringt der Treiber die Auswahl des Kontos. Nein 102400
allowBlobPublicAccess Erlauben oder verweigern Sie den öffentlichen Zugriff auf alle Blobs oder Container für das vom Treiber erstellte Speicherkonto. true oder false Nein false
disableDeleteRetentionPolicy Angabe, ob DeleteRetentionPolicy für das vom Treiber erstellte Speicherkonto deaktiviert werden soll true oder false Nein false
folderName Angabe des Ordnernamens in der Azure-Dateifreigabe Vorhandener Ordnername in der Azure-Dateifreigabe Nein Ist der Ordnername in der Dateifreigabe nicht vorhanden, ist die Einbindung nicht erfolgreich.
getLatestAccount Bestimmt, ob der neueste Kontoschlüssel basierend auf der Erstellungszeit abgerufen werden soll. Dieser Treiber ruft standardmäßig den ersten Schlüssel ab. true oder false Nein false
location Geben Sie die Azure-Region des Azure-Speicherkontos an. Beispiel: eastus. Nein Ohne Angabe verwendet der Treiber den gleichen Standortnamen wie der aktuelle AKS-Cluster.
matchTags Tags abgleichen, wenn der Treiber versucht, ein geeignetes Speicherkonto zu finden. true oder false Nein false
networkEndpointType 1 Geben Sie den Netzwerkendpunkttyp für das vom Treiber erstellte Speicherkonto an. Wird privateEndpoint angegeben, wird ein privater Endpunkt für das Speicherkonto erstellt. In anderen Fällen wird standardmäßig ein Dienstendpunkt erstellt. "",privateEndpoint Nein ""
protocol Geben Sie das Dateifreigabeprotokoll an. smb, nfs Nein smb
requireInfraEncryption Angabe, ob der Dienst eine sekundäre Verschlüsselungsebene mit plattformseitig verwalteten Schlüsseln für ruhende Daten für das vom Treiber erstellte Speicherkonto anwendet true oder false Nein false
resourceGroup Geben Sie die Ressourcengruppe für die Azure Disks an. Vorhandener Ressourcengruppenname Nein Ohne Angabe verwendet der Treiber den gleichen Ressourcengruppennamen wie der aktuelle AKS-Cluster.
selectRandomMatchingAccount Hiermit wird bestimmt, ob ein übereinstimmendes Konto nach dem Zufallsprinzip ausgewählt werden soll. Standardmäßig wählt der Treiber immer das erste übereinstimmende Konto in alphabetischer Reihenfolge aus. (Hinweis: Dieser Treiber verwendet den Kontosuchcache, was zu einer ungleichen Verteilung der Dateierstellung bei mehreren Konten führt.) true oder false Nein false
server Geben Sie die Serveradresse des Azure-Speicherkontos an. Vorhandene Serveradresse, z. B. accountname.privatelink.file.core.windows.net Nein Ohne Angabe verwendet der Treiber standardmäßig accountname.file.core.windows.net oder eine andere Sovereign Cloud-Kontoadresse.
shareAccessTier Zugriffsebene für die Dateifreigabe Für ein Konto vom Typ „Allgemein, Version 2“ kann zwischen TransactionOptimized (Standardwert), Hot und Cool gewählt werden. Kontotyp „Premium Storage“ nur für Dateifreigaben. Nein Leer. Verwenden Sie die Standardeinstellung für verschiedene Speicherkontotypen.
shareName Geben Sie einen Azure-Dateifreigabenamen an. Vorhandener oder neuer Name der Azure-Dateifreigabe Nein Ohne Angabe generiert der Treiber einen Namen für die Azure-Dateifreigabe.
shareNamePrefix Angabe des vom Treiber erstellten Präfixes für den Namen der Azure-Dateifreigabe Der Freigabename darf nur Kleinbuchstaben, Ziffern und Bindestriche enthalten und sollte weniger als 21 Zeichen lang sein. Nein
skuName Azure Files-Speicherkontotyp (Alias: storageAccountType) Standard_LRS, Standard_ZRS, Standard_GRS, Standard_RAGRS, Standard_RAGZRS, Premium_LRS, Premium_ZRS, StandardV2_LRS, StandardV2_ZRS, StandardV2_GRS, StandardV2_GZRS, PremiumV2_LRS, PremiumV2_ZRS Nein Standard_LRS
Die Mindestgröße der Dateifreigabe für den Kontotyp „Premium“ beträgt 100 GB.
Der ZRS-Kontotyp wird in einer begrenzten Anzahl von Regionen unterstützt.
Die NFS-Dateifreigabe unterstützt nur den Kontotyp „Premium“.
Standard-V2-SKU-Namen gelten für das v2-Modell von Azure Files.
storageAccount Geben Sie einen Azure-Speicherkontonamen an. storageAccountName -Nein Wenn kein bestimmter Speicherkontoname angegeben wird, sucht der Treiber nach einem geeigneten Speicherkonto, das den Kontoeinstellungen innerhalb derselben Ressourcengruppe entspricht. Wenn ein übereinstimmende Speicherkonto nicht gefunden werden kann, wird ein neues Konto erstellt. Falls jedoch ein Speicherkontoname angegeben wird, muss das Speicherkonto bereits vorhanden sein.
storageEndpointSuffix Geben Sie das Suffix für den Azure-Speicherendpunkt an. core.windows.net, core.chinacloudapi.cn usw. Nein Ohne Angabe verwendet der Treiber das Standardsuffix für den Speicherendpunkt gemäß der Cloudumgebung. Beispiel: core.windows.net.
tags Tags werden in einem neuen Speicherkonto erstellt. Tagformat: „foo=aaa,bar=bbb“ Nein ""

1 Wenn das Speicherkonto vom Treiber erstellt wird, müssen Sie nur den Parameter in der Speicherklasse angeben networkEndpointType: privateEndpoint . Der CSI-Treiber erstellt zusammen mit dem Konto den privaten Endpunkt und die private DNS-Zone (benannt privatelink.file.core.windows.net). Wenn Sie Ihr eigenes Speicherkonto verwenden, müssen Sie den privaten Endpunkt für das Speicherkonto erstellen. Wenn Sie den Azure Files-Speicher in einem isolierten Netzwerkcluster verwenden, müssen Sie eine benutzerdefinierte Speicherklasse mit "networkEndpointType: privateEndpoint" erstellen. Sie können diesem Beispiel zur Referenz folgen:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: azurefile-csi
provisioner: file.csi.azure.com
allowVolumeExpansion: true
parameters:
  skuName: Premium_LRS  # available values: Premium_LRS, Premium_ZRS, Standard_LRS, Standard_GRS, Standard_ZRS, Standard_RAGRS, Standard_RAGZRS
  networkEndpointType: privateEndpoint
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
  - dir_mode=0777  # modify this permission if you want to enhance the security
  - file_mode=0777
  - mfsymlinks
  - cache=strict  # https://linux.die.net/man/8/mount.cifs
  - nosharesock  # reduce probability of reconnect race
  - actimeo=30  # reduce latency for metadata-heavy workload
  - nobrl  # disable sending byte range lock requests to the server and for applications which have challenges with posix locks

Statische Bereitstellungsparameter für PVs

Die folgende Tabelle enthält Parameter, die Sie zum Definieren einer PV verwenden können.

Name Bedeutung Verfügbarer Wert Obligatorisch. Standardwert
volumeAttributes.resourceGroup Geben Sie einen Azure-Ressourcengruppennamen an. myResourceGroup Nein Ohne Angabe verwendet der Treiber den gleichen Ressourcengruppennamen wie der aktuelle Cluster.
volumeAttributes.storageAccount Geben Sie den Namen eines vorhandenen Azure-Speicherkontos an. storageAccountName Yes
volumeAttributes.shareName Geben Sie einen Azure-Dateifreigabenamen an. fileShareName Yes
volumeAttributes.folderName Geben Sie einen Ordnernamen in der Azure-Dateifreigabe an. folderName Nein Ist der Ordnername in der Dateifreigabe nicht vorhanden, ist die Einbindung nicht erfolgreich.
volumeAttributes.protocol Geben Sie das Dateifreigabeprotokoll an. smb, nfs Nein smb
volumeAttributes.server Angabe der Serveradresse des Azure-Speicherkontos Vorhandene Serveradresse, z. B. accountname.privatelink.file.core.windows.net Nein Ohne Angabe verwendet der Treiber standardmäßig accountname.file.core.windows.net oder eine andere Sovereign Cloud-Kontoadresse.

Erstellen einer PV-Momentaufnahmeklasse

Der Azure Files-CSI-Treiber unterstützt das Erstellen von Momentaufnahmen von permanenten Volumes und den zugrunde liegenden Dateifreigaben.

  1. Verwenden Sie den Befehl kubectl apply zum Erstellen einer Momentaufnahmeklasse für das Volume:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/deploy/example/snapshot/volumesnapshotclass-azurefile.yaml
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    volumesnapshotclass.snapshot.storage.k8s.io/csi-azurefile-vsc created
    
  2. Erstellen Sie einen Volumesnapshot aus dem zuvor erstellten PVC (pvc-azurefile).

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/deploy/example/snapshot/volumesnapshot-azurefile.yaml
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    volumesnapshot.snapshot.storage.k8s.io/azurefile-volume-snapshot created
    
  3. Führen Sie den folgenden Befehl aus, um sich zu vergewissern, dass die Momentaufnahme ordnungsgemäß erstellt wurde:

    kubectl describe volumesnapshot azurefile-volume-snapshot
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    Name:         azurefile-volume-snapshot
    Namespace:    default
    Labels:       <none>
    Annotations:  API Version:  snapshot.storage.k8s.io/v1beta1
    Kind:         VolumeSnapshot
    Metadata:
      Creation Timestamp:  2020-08-27T22:37:41Z
      Finalizers:
        snapshot.storage.kubernetes.io/volumesnapshot-as-source-protection
        snapshot.storage.kubernetes.io/volumesnapshot-bound-protection
      Generation:        1
      Resource Version:  955091
      Self Link:         /apis/snapshot.storage.k8s.io/v1beta1/namespaces/default/volumesnapshots/azurefile-volume-snapshot
      UID:               c359a38f-35c1-4fb1-9da9-2c06d35ca0f4
    Spec:
      Source:
        Persistent Volume Claim Name:  pvc-azurefile
      Volume Snapshot Class Name:      csi-azurefile-vsc
    Status:
      Bound Volume Snapshot Content Name:  snapcontent-c359a38f-35c1-4fb1-9da9-2c06d35ca0f4
      Ready To Use:                        false
    Events:                                <none>
    

Ändern der Größe einer Azure Files PV

Sie können ein größeres Volume für einen Anspruch auf ein persistentes Volume anfordern. Bearbeiten Sie das PVC-Objekt, und geben Sie eine höhere Größe an. Diese Änderung löst die Erweiterung des zugrunde liegenden Volumes für den Anspruch auf ein persistentes Volume aus.

Hinweis

Für den Anspruch wird nie ein neues persistentes Volume erstellt. Stattdessen wird die Größe eines vorhandenen Volumes geändert. Das Verkleinern persistenter Volumes wird derzeit nicht unterstützt.

In AKS unterstützt die integrierte azurefile-csi Speicherklasse bereits die Erweiterung, daher verwenden Sie das PVC, das wir zuvor mit dieser Speicherklasse erstellt haben. Der Anspruch auf ein persistentes Volume hat eine 100 GiB große Dateifreigabe angefordert. Sie können dies überprüfen, indem Sie Folgendes ausführen:

kubectl exec -it nginx-azurefile -- df -h /mnt/azurefile

Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

Filesystem                                                                                Size  Used Avail Use% Mounted on
//f149b5a219bd34caeb07de9.file.core.windows.net/pvc-5e5d9980-da38-492b-8581-17e3cad01770  100G  128K  100G   1% /mnt/azurefile
  1. Vergrößern Sie das Feld spec.resources.requests.storage, um den Anspruch auf ein persistentes Volume zu erweitern:

    kubectl patch pvc pvc-azurefile --type merge --patch '{"spec": {"resources": {"requests": {"storage": "200Gi"}}}}'
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    persistentvolumeclaim/pvc-azurefile patched
    
  2. Überprüfen Sie, ob sowohl der Anspruch auf ein persistentes Volume als auch das Dateisystem im Pod die neue Größe aufweisen:

    kubectl get pvc pvc-azurefile
    NAME            STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS    AGE
    pvc-azurefile   Bound    pvc-5e5d9980-da38-492b-8581-17e3cad01770   200Gi      RWX            azurefile-csi   64m
    
    kubectl exec -it nginx-azurefile -- df -h /mnt/azurefile
    Filesystem                                                                                Size  Used Avail Use% Mounted on
    //f149b5a219bd34caeb07de9.file.core.windows.net/pvc-5e5d9980-da38-492b-8581-17e3cad01770  200G  128K  200G   1% /mnt/azurefile
    

Verwenden eines PV mit privatem Azure Files-Speicher (privater Endpunkt)

Wenn Ihre Azure Files-Ressourcen durch einen privaten Endpunkt geschützt sind, müssen Sie Ihre eigene Speicherklasse erstellen. Stellen Sie sicher, dass Sie Ihre DNS-Einstellungen so konfigurieren, dass die IP-Adresse des privaten Endpunkts in den FQDN der Verbindungszeichenfolge aufgelöst wird.

Passen Sie die folgenden Parameter an:

  • resourceGroup: Die Ressourcengruppe, in der das Speicherkonto bereitgestellt wurde.

  • storageAccount: Der Name des Speicherkontos.

  • server: Der FQDN des privaten Endpunkts des Speicherkontos.

  1. Erstellen Sie eine Datei mit dem Namen private-azure-file-sc.yaml, und fügen Sie dann das folgende Beispielmanifest in die Datei ein. Ersetzen Sie die Werte für <resourceGroup> und <storageAccountName>. Beispiel:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: private-azurefile-csi
    provisioner: file.csi.azure.com
    allowVolumeExpansion: true
    parameters:
      resourceGroup: <resourceGroup>
      storageAccount: <storageAccountName>
      server: <storageAccountName>.file.core.windows.net
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    mountOptions:
      - dir_mode=0777
      - file_mode=0777
      - uid=0
      - gid=0
      - mfsymlinks
      - cache=strict  # https://linux.die.net/man/8/mount.cifs
      - nosharesock  # reduce probability of reconnect race
      - actimeo=30  # reduce latency for metadata-heavy workload
    
  2. Verwenden Sie den Befehl kubectl apply, um die Speicherklasse zu erstellen:

    kubectl apply -f private-azure-file-sc.yaml
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    storageclass.storage.k8s.io/private-azurefile-csi created
    
  3. Erstellen Sie eine Datei mit dem Namen private-pvc.yaml, und fügen Sie dann das folgende Beispielmanifest in die Datei ein:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: private-azurefile-pvc
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: private-azurefile-csi
      resources:
        requests:
          storage: 100Gi
    
  4. Erstellen Sie das PVC mit dem Befehl "kubectl apply" :

    kubectl apply -f private-pvc.yaml
    

Verwenden der verwalteten Identität für den Zugriff auf den Azure Files-Speicher (Vorschau)

Azure Files unterstützt jetzt die verwaltete identitätsbasierte Authentifizierung für den SMB-Zugriff. Mit dieser Funktion können Ihre Anwendungen, die in AKS ausgeführt werden, sicher auf Azure Files-Freigaben zugreifen, ohne dass Speicherkontoschlüssel oder Anmeldeinformationen gespeichert oder verwaltet werden müssen. Verwaltete Identitäten bieten einen optimierten und sicheren Authentifizierungsmechanismus, vereinfachen die Zugriffsverwaltung und verringern das Risiko, das mit der Gefährdung von Anmeldeinformationen verbunden ist. Sie können ein dynamisches Volume oder ein statisches Volume erstellen.

Hinweis

Die Vorschauversion von AKS unterstützt verwaltete Identitäten für Azure Files ab Version 1.34 auf Linux-Knoten.

Führen Sie die folgenden Schritte aus, um verwaltete Identität für dynamisch bereitgestellte Volumes zu aktivieren:

  1. Erstellen Sie eine Speicherklasse mit aktivierter verwalteter Identität mithilfe einer YAML-Datei, azurefile-csi-managed-identity.yaml z. B. mit dem folgenden Beispielinhalt. Platzieren Sie mountWithManagedIdentity: "true" unter parameters:

     apiVersion: storage.k8s.io/v1
     kind: StorageClass
     metadata:
       name: azurefile-csi
     provisioner: file.csi.azure.com
     parameters:
       resourceGroup: EXISTING_RESOURCE_GROUP_NAME   # optional, node resource group by default if it's not provided
       storageAccount: EXISTING_STORAGE_ACCOUNT_NAME # optional, a new account will be created if it's not provided
       mountWithManagedIdentity: "true"
       # optional, clientID of the managed identity, kubelet identity would be used by default if it's not provided
       clientID: "xxxxx-xxxx-xxx-xxx-xxxxxxx"
     reclaimPolicy: Delete
     volumeBindingMode: Immediate
     allowVolumeExpansion: true
     mountOptions:
      - dir_mode=0777  # modify this permission if you want to enhance the security
      - file_mode=0777
      - uid=0
      - gid=0
      - mfsymlinks
      - cache=strict  # https://linux.die.net/man/8/mount.cifs
      - nosharesock  # reduce probability of reconnect race
      - actimeo=30  # reduce latency for metadata-heavy workload
      - nobrl  # disable sending byte range lock requests to the server
    
  2. Wenden Sie diese Speicherklasse an, indem Sie den folgenden Befehl ausführen:

    kubectl apply -f azurefile-csi-managed-identity.yaml
    
  3. Stellen Sie Ihr StatefulSet oder Ihre Workload mithilfe der neuen Speicherklasse bereit, die auf dieses PVC verweist, um sicherzustellen, dass das Volume mithilfe der verwalteten Identitätsauthentifizierung bereitgestellt wird. Legen Sie storageClassName: azurefile-csi-managed-identity in Ihrem PVC-Manifest fest. Beispiel:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: azurefile-managed-identity-pvc
    spec:
      accessModes:
       - ReadWriteMany
      storageClassName: azurefile-csi-managed-identity
      resources:
       requests:
        storage: 100Gi
    

Informationen zu Azure Files NFS

Azure Files unterstützt das NFS v4.1-Protokoll. Die Unterstützung von NFS Version 4.1 für Azure Files bietet Ihnen ein vollständig verwaltetes NFS-System als Dienst, das auf einer hochverfügbaren, hochresistenten, verteilten und resilienten Speicherplattform basiert.

Diese Option ist für Workloads mit zufälligem Zugriff und direkten Datenaktualisierungen optimiert und bietet vollständige Unterstützung für POSIX-Dateisysteme. In diesem Abschnitt erfahren Sie, wie Sie NFS-Freigaben mit dem Azure Files-CSI-Treiber in einem AKS-Cluster verwenden.

Hinweis

Sie können einen privaten Endpunkt verwenden, anstatt den Zugriff auf das ausgewählte VNet zuzulassen.

In diesem Abschnitt wird erläutert, wie Sie die Leistung und Sicherheit bei Verwendung von Azure Files NFS 4.1 mit AKS maximieren. Erfahren Sie, wie Sie Folgendes tun können:

  • Optimieren von NFS-Lese- und Schreibgrößeneinstellungen

  • Erstellen und Konfigurieren einer NFS-Speicherklasse

  • Bereitstellen von Workloads, die NFS-unterstützte Volumen verwenden

  • Aktivieren Sie Verschlüsselung während der Übertragung (EiT), um Daten zu schützen, während sie zwischen Ihrem AKS-Cluster und Azure Files verschoben wird.

Dieser Abschnitt enthält Informationen zum Ansatz zur Leistungsoptimierung von NFS mit dem Azure Files CSI-Treiber mit den rsize Optionen (Lesegröße) und wsize (Schreibgröße). Die Optionen rsize und wsize legen gemeinsam die maximale Übertragungsgröße eines NFS-Vorgangs fest. Wenn rsize oder wsize beim Einbinden nicht angegeben werden, handeln Client und Server die höchste von beiden unterstützte Größe aus. Derzeit unterstützen sowohl Azure Files als auch moderne Linux-Distributionen Lese- und Schreibgrößen von bis zu 1.048.576 Bytes (1 MiB).

Für eine optimale Leistung muss die Client-Server-Kommunikation möglichst effizient sein. Das Erhöhen oder Verringern der Werte für Lese- und Schreibgröße der Bereitstellung kann die NFS-Leistung verbessern. Die Standardgröße der zwischen Client und Server übertragenen Lese-/Schreibpakete beträgt 8 KB für NFS Version 2 und 32 KB für NFS Version 3 und 4. Diese Standardwerte sind möglicherweise zu groß oder zu klein. Das Reduzieren von rsize und wsize könnte die NFS-Leistung in einem überlasteten Netzwerk verbessern, indem kleinere Pakete für jede NFS-Leseantwort und -schreibanforderung gesendet werden. Diese Reduzierung kann jedoch die Anzahl der Pakete erhöhen, die zum Senden von Daten über das Netzwerk benötigt werden, wodurch der gesamte Netzwerkdatenverkehr und die CPU-Auslastung auf dem Client und server erhöht werden.

Es ist wichtig, dass Sie Tests durchführen, um eine rsize effiziente Paketübertragung zu finden und wsize aufrechtzuerhalten, bei der der Durchsatz nicht verringert und die Latenz erhöht wird.

Um beispielsweise ein Maximum von rsize und wsize auf 256 KiB festzulegen, konfigurieren Sie die Speicherklasse mountOptions wie folgt:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: azurefile-csi-nfs
provisioner: file.csi.azure.com
allowVolumeExpansion: true
parameters:
  protocol: nfs
mountOptions:
  - nconnect=4
  - noresvport
  - actimeo=30
  - rsize=262144
  - wsize=262144

Beispiele für andere Speicherklassen

Die empfohlenen Einbindungsoptionen für SMB-Freigaben werden im folgenden Beispiel für die Speicherklasse bereitgestellt.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: azurefile-csi
provisioner: file.csi.azure.com
allowVolumeExpansion: true
parameters:
  skuName: Premium_LRS  # available values: Premium_LRS, Premium_ZRS, Standard_LRS, Standard_GRS, Standard_ZRS, Standard_RAGRS, Standard_RAGZRS
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
  - dir_mode=0777  # modify this permission if you want to enhance the security
  - file_mode=0777 # modify this permission if you want to enhance the security
  - mfsymlinks    # support symbolic links
  - cache=strict  # https://linux.die.net/man/8/mount.cifs
  - nosharesock  # reduces probability of reconnect race
  - actimeo=30  # reduces latency for metadata-heavy workload
  - nobrl  # disable sending byte range lock requests to the server and for applications which have challenges with posix locks

Wenn Sie Premium-Dateifreigaben (SSD) verwenden und Ihre Workload metadatenlastig ist, registrieren Sie sich für die Verwendung des Metadatenzwischenspeicherungsfeatures , um die Leistung zu verbessern.

Weitere Informationen finden Sie unter Verbessern der Leistung für SMB Azure-Dateifreigaben.

Windows-Container

Der Azure Files-CSI-Treiber unterstützt auch Windows-Knoten und -Container. Wenn Sie Windows-Container verwenden möchten, gehen Sie wie in der Schnellstartanleitung für Windows-Container beschrieben vor, um einen Windows-Knotenpool hinzuzufügen.

  1. Wenn Sie über einen Windows-Knotenpool verfügen, können Sie die integrierten Speicherklassen wie azurefile-csi verwenden oder eine benutzerdefinierte Speicherklasse erstellen. Sie können ein exemplarisches Windows-basiertes StatefulSet-Objekt bereitstellen, das Zeitstempel in einer Datei (data.txt) speichert, indem Sie den Befehl kubectl apply ausführen:

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-sigs/azurefile-csi-driver/master/deploy/example/windows/statefulset.yaml
    

    Die Ausgabe des Befehls sieht in etwa wie im folgenden Beispiel aus:

    statefulset.apps/busybox-azurefile created
    
  2. Überprüfen Sie den Inhalt des Volumes, indem Sie den folgenden Kubectl-exec-Befehl ausführen:

    kubectl exec -it busybox-azurefile-0 -- cat c:\\mnt\\azurefile\\data.txt # on Linux or MacOS Bash
    kubectl exec -it busybox-azurefile-0 -- cat c:\mnt\azurefile\data.txt # on Windows Powershell or CMD
    

    Die Ausgabe der Befehle sieht in etwa wie im folgenden Beispiel aus:

    2020-08-27 22:11:01Z
    2020-08-27 22:11:02Z
    2020-08-27 22:11:04Z
    (...)
    

Nächste Schritte