Verwenden von Azure Container Storage mit verwalteten Azure-Datenträgern

Azure Container Storage ist ein cloudbasierter Dienst zum Verwalten, Bereitstellen und Orchestrieren von Volumes, der nativ für Container entwickelt wurde. In diesem Artikel erfahren Sie, wie Sie Azure Container Storage konfigurieren, um verwalteter Azure-Datenträger als Backend-Speicher für Ihre Kubernetes-Workloads zu verwenden. Am Ende verfügen Sie über einen Pod, der verwaltete Azure-Datenträger als Speicher verwendet.

Voraussetzungen

  • Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.

  • Für diesen Artikel ist die aktuelle Azure CLI-Version (mindestens Version 2.35.0) erforderlich. Weitere Informationen finden Sie unter Installieren der Azure-Befehlszeilenschnittstelle. Wenn Sie die Bash-Umgebung in Azure Cloud Shell nutzen, ist die neueste Version bereits installiert. Wenn Sie die Befehle nicht in Azure Cloud Shell, sondern lokal ausführen möchten, führen Sie sie mit Administratorrechten aus. Weitere Informationen finden Sie unter Erste Schritte mit Azure Cloud Shell.

  • Sie benötigen den Kubernetes-Befehlszeilenclient kubectl. Es ist bereits installiert, wenn Sie Azure Cloud Shell verwenden. Sie können ihn auch lokal installieren, indem Sie den Befehl „az aks install-cli“ ausführen.

  • Wenn Sie Azure Container Storage noch nicht installiert haben, befolgen Sie die Anweisungen im Artikel Verwenden von Azure Container Storage mit Azure Kubernetes Service.

  • Überprüfen Sie unter Azure Container Storage-Regionen, ob Ihre Zielregion unterstützt wird.

  • Um Azure Container Storage mit verwalteten Azure-Datenträgern zu verwenden, muss Ihr AKS-Cluster über einen Knotenpool mit mindestens drei universellen VMs (z. B. standard_d4s_v5) für die Clusterknoten mit mindestens vier virtuellen CPUs (vCPUs) verfügen.

Erstellen und Anfügen persistenter Volumes

Führen Sie die folgenden Schritte aus, um ein persistentes Volume zu erstellen und anzufügen.

1. Erstellen eines Speicherpools

Erstellen Sie zunächst einen Speicherpool, bei dem es sich um eine logische Gruppierung von Speicher für Ihren Kubernetes-Cluster handelt, indem Sie ihn in einer YAML-Manifestdatei definieren.

Sie haben die folgenden Optionen zum Erstellen eines Speicherpools:

Wenn Sie Azure Container Storage mithilfe der Befehle az aks create oder az aks update aktiviert haben, verfügen Sie möglicherweise bereits über einen Speicherpool. Dient kubectl get sp -n acstor zum Abrufen der Liste der Speicherpools. Wenn Sie bereits über einen Speicherpool verfügen, den Sie verwenden möchten, können Sie diesen Schritt überspringen und mit der Anzeige der verfügbaren Speicherklassen fortfahren.

Erstellen eines dynamischen Speicherpools

Führen Sie die folgenden Schritte aus, um einen dynamischen Speicherpool für Azure-Datenträger zu erstellen.

  1. Verwenden Sie Ihren bevorzugten Text-Editor, um eine YAML-Manifestdatei wie code acstor-storagepool.yaml zu erstellen.

  2. Fügen Sie den folgenden Code ein. Der Wert des Namens für den Speicherpool kann beliebig sein. Geben Sie für skuName den Leistungs- und Redundanzgrad an. Zulässige Werte sind Premium_LRS, Standard_LRS, StandardSSD_LRS, UltraSSD_LRS, Premium_ZRS, PremiumV2_LRS und StandardSSD_ZRS. Geben Sie für storage die Speicherkapazität für den Pool in Gi oder Ti an.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: azuredisk
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          skuName: Premium_LRS
      resources:
        requests:
          storage: 1Ti
    

    Wenn Sie Datenträger vom Typ „UltraSSD_LRS“ oder „PremiumV2_LRS“ verwenden, können Sie IOPS und Durchsatz mithilfe der Parameter IOPSReadWrite und MBpsReadWrite in Ihrer Speicherpooldefinition festlegen.

    IOPSReadWrite bezieht sich auf die Anzahl der für SSD Ultra- und Premium v2 LRS-Datenträger zulässigen IOPS. Weitere Informationen finden Sie unter IOPS bei Disk Ultra und IOPS bei SSD Premium v2.

    MBpsReadWrite bezieht sich auf die für SSD Ultra- und Premium v2 LRS-Datenträger zulässige Bandbreite. MBit/s bezieht sich auf Millionen von Bytes pro Sekunde (MB/s = 10^6 Bytes pro Sekunde). Weitere Informationen finden Sie unter Disk Ultra-Durchsatz und SSD Premium v2-Durchsatz.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: azuredisk
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          skuName: PremiumV2_LRS
          iopsReadWrite: 5000
          mbpsReadWrite: 200
      resources:
        requests:
          storage: 1Ti
    
  3. Speichern Sie die YAML-Manifestdatei, und wenden Sie sie dann an, um den Speicherpool zu erstellen.

    kubectl apply -f acstor-storagepool.yaml 
    

    Wenn die Erstellung des Speicherpools abgeschlossen ist, wird eine Meldung wie folgt angezeigt:

    storagepool.containerstorage.azure.com/azuredisk created
    

    Sie können diesen Befehl auch ausführen, um den Status des Speicherpools zu überprüfen. Ersetzen Sie <storage-pool-name> durch den Wert des Namens für Ihren Speicherpool. In diesem Beispiel wird der Wert azuredisk verwendet.

    kubectl describe sp <storage-pool-name> -n acstor
    

Wenn der Speicherpool erstellt wird, erstellt Azure Container Storage unter Verwendung der Namenskonvention acstor-<storage-pool-name> eine Speicherklasse in Ihrem Namen. Jetzt können Sie die verfügbaren Speicherklassen anzeigen und persistente Volumenansprüche erstellen.

Erstellen eines vorab bereitgestellten Speicherpools

Wenn Sie über bereits bereitgestellte Azure-verwaltete Datenträger verfügen, können Sie einen vorab bereitgestellten Speicherpool mit diesen Datenträgern erstellen. Da die Datenträger bereits bereitgestellt wurden, müssen Sie beim Erstellen des Speicherpools nicht die skuName- oder Sku-Kapazität angeben.

Führen Sie die folgenden Schritte aus, um einen vorab bereitgestellten Speicherpool für Azure-Datenträger zu erstellen.

  1. Melden Sie sich beim Azure-Portal an.

  2. Navigieren Sie für jeden Datenträger, den Sie verwenden möchten, zum von Azure verwalteten Datenträger, und wählen Sie Einstellungen>Eigenschaften aus. Kopieren Sie die gesamte Zeichenfolge unter Ressourcen-ID, und fügen Sie sie in eine Textdatei ein.

  3. Verwenden Sie Ihren bevorzugten Text-Editor, um eine YAML-Manifestdatei wie code acstor-storagepool.yaml zu erstellen.

  4. Fügen Sie den folgenden Code ein. Der Wert des Namens für den Speicherpool kann beliebig sein. Ersetzen Sie <resource-id> mit der Ressourcen-ID der einzelnen verwalteten Datenträger. Speichern Sie die Datei .

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: sp-preprovisioned
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          disks:
            - reference <resource-id1>
            - reference <resource-id2>
    
  5. Wenden Sie die YAML-Manifestdatei an, um den Speicherpool zu erstellen.

    kubectl apply -f acstor-storagepool.yaml 
    

    Wenn die Erstellung des Speicherpools abgeschlossen ist, wird eine Meldung wie folgt angezeigt:

    storagepool.containerstorage.azure.com/sp-preprovisioned created
    

    Sie können diesen Befehl auch ausführen, um den Status des Speicherpools zu überprüfen. Ersetzen Sie <storage-pool-name> durch den Wert des Namens für Ihren Speicherpool. In diesem Beispiel wäre der Wert sp-preprovisioned.

    kubectl describe sp <storage-pool-name> -n acstor
    

Wenn der Speicherpool erstellt wird, erstellt Azure Container Storage unter Verwendung der Namenskonvention acstor-<storage-pool-name> eine Speicherklasse in Ihrem Namen. Jetzt können Sie die verfügbaren Speicherklassen anzeigen und persistente Volumenansprüche erstellen.

Erstellen eines dynamischen Speicherpools mit Ihrem eigenen Verschlüsselungsschlüssel (optional)

Alle Daten in einem Azure-Speicherkonto werden im Ruhezustand verschlüsselt. Standardmäßig werden Daten mit von Microsoft verwalteten Schlüsseln verschlüsselt. Um mehr Kontrolle über Verschlüsselungsschlüssel zu erhalten, können Sie vom Kunden verwaltete Schlüssel (CMK) bereitstellen, wenn Sie Ihren Speicherpool erstellen, um die persistenten Datenträger zu verschlüsseln, die Sie erstellen.

Um Ihren eigenen Schlüssel für die serverseitige Verschlüsselung zu verwenden, müssen Sie über einen Azure Key Vault mit einem Schlüssel verfügen. Der Key Vault sollte den Löschschutz aktiviert haben und das Azure RBAC-Berechtigungsmodell verwenden. Weitere Informationen zu kundenseitig verwalteten Schlüsseln in Linux.

Beim Erstellen ihres Speicherpools müssen Sie die CMK-Parameter definieren. Die erforderlichen CMK-Verschlüsselungsparameter sind:

  • keyVersion gibt die Version des zu verwendenden Schlüssels an
  • keyName ist der Name Ihres Schlüssels
  • keyVaultUri ist der einheitliche Ressourcenbezeichner des Azure Key Vault, z. B. https://user.vault.azure.net
  • Identity gibt eine verwaltete Identität mit Zugriff auf den Tresor an, z. B. /subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourcegroups/MC_user-acstor-westus2-rg_user-acstor-westus2_westus2/providers/Microsoft.ManagedIdentity/userAssignedIdentities/user-acstor-westus2-agentpool

Führen Sie die folgenden Schritte aus, um einen Speicherpool mit Ihrem eigenen Verschlüsselungsschlüssel zu erstellen. Alle aus diesem Speicherpool erstellten beständigen Datenträger werden mit demselben Schlüssel verschlüsselt.

  1. Verwenden Sie Ihren bevorzugten Text-Editor, um eine YAML-Manifestdatei wie code acstor-storagepool-cmk.yaml zu erstellen.

  2. Fügen Sie den folgenden Code ein, geben Sie die erforderlichen Parameter an und speichern Sie die Datei. Der Wert des Namens für den Speicherpool kann beliebig sein. Geben Sie für skuName den Leistungs- und Redundanzgrad an. Zulässige Werte sind Premium_LRS, Standard_LRS, StandardSSD_LRS, UltraSSD_LRS, Premium_ZRS, PremiumV2_LRS und StandardSSD_ZRS. Geben Sie für storage die Speicherkapazität für den Pool in Gi oder Ti an. Stellen Sie sicher, dass Sie die CMK-Verschlüsselungsparameter angeben.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: azuredisk
      namespace: acstor
    spec:
      poolType:
        azureDisk:
          skuName: Premium_LRS
          encryption: {
            keyVersion: "<key-version>",
            keyName: "<key-name>",
            keyVaultUri: "<key-vault-uri>",
            identity: "<identity>"
          }
      resources:
        requests:
          storage: 1Ti
    
  3. Wenden Sie die YAML-Manifestdatei an, um den Speicherpool zu erstellen.

    kubectl apply -f acstor-storagepool-cmk.yaml 
    

    Wenn die Erstellung des Speicherpools abgeschlossen ist, wird eine Meldung wie folgt angezeigt:

    storagepool.containerstorage.azure.com/azuredisk created
    

    Sie können diesen Befehl auch ausführen, um den Status des Speicherpools zu überprüfen. Ersetzen Sie <storage-pool-name> durch den Wert des Namens für Ihren Speicherpool. In diesem Beispiel wird der Wert azuredisk verwendet.

    kubectl describe sp <storage-pool-name> -n acstor
    

Wenn der Speicherpool erstellt wird, erstellt Azure Container Storage unter Verwendung der Namenskonvention acstor-<storage-pool-name> eine Speicherklasse in Ihrem Namen.

2. Anzeigen der verfügbaren Speicherklassen

Wenn der Speicherpool zur Verwendung bereit ist, müssen Sie eine Speicherklasse auswählen, um zu definieren, wie Speicher beim Erstellen persistenter Volumeansprüche und beim Bereitstellen persistenter Volumes dynamisch erstellt wird.

Führen Sie kubectl get sc aus, um die verfügbaren Speicherklassen anzuzeigen. Es wird die Speicherklasse mit dem Namen acstor-<storage-pool-name> angezeigt.

Wichtig

Verwenden Sie nicht die Speicherklasse, die als intern gekennzeichnet ist. Es handelt sich um eine interne Speicherklasse, die benötigt wird, damit Azure Container Storage funktioniert.

3. Erstellen eines Anspruchs auf ein persistentes Volume

Ein Anspruch auf ein persistentes Volume (Persistent Volume Claim, PVC) wird verwendet, um basierend auf einer Speicherklasse automatisch Speicher bereitzustellen. Führen Sie die folgenden Schritte aus, um einen PVC mit der neuen Speicherklasse zu erstellen.

  1. Verwenden Sie Ihren bevorzugten Text-Editor, um eine YAML-Manifestdatei wie code acstor-pvc.yaml zu erstellen.

  2. Fügen Sie den folgenden Code ein, und speichern Sie die Datei. Der PVC-Wert name kann beliebig sein.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: azurediskpvc
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: acstor-azuredisk # replace with the name of your storage class if different
      resources:
        requests:
          storage: 100Gi
    
  3. Wenden Sie die YAML-Manifestdatei an, um den PVC zu erstellen.

    kubectl apply -f acstor-pvc.yaml
    

    Eine ähnliche Ausgabe wie die folgende sollte angezeigt werden:

    persistentvolumeclaim/azurediskpvc created
    

    Sie können den Status des PVC überprüfen, indem Sie den folgenden Befehl ausführen:

    kubectl describe pvc azurediskpvc
    

Sobald der PVC erstellt wurde, kann er von einem Pod verwendet werden.

4. Bereitstellen eines Pods und Anfügen eines persistenten Volumes

Erstellen Sie einen Pod mithilfe von FIO (Flexibler E/A-Tester) für Benchmarking und Workloadsimulation, und geben Sie einen Bereitstellungspfad für das persistente Volume an. Verwenden Sie für claimName den Wert des Namens, den Sie beim Erstellen des Anspruchs auf persistentes Volume verwendet haben.

  1. Verwenden Sie Ihren bevorzugten Text-Editor, um eine YAML-Manifestdatei wie code acstor-pod.yaml zu erstellen.

  2. Fügen Sie den folgenden Code ein, und speichern Sie die Datei.

    kind: Pod
    apiVersion: v1
    metadata:
      name: fiopod
    spec:
      nodeSelector:
        acstor.azure.com/io-engine: acstor
      volumes:
        - name: azurediskpv
          persistentVolumeClaim:
            claimName: azurediskpvc
      containers:
        - name: fio
          image: nixery.dev/shell/fio
          args:
            - sleep
            - "1000000"
          volumeMounts:
            - mountPath: "/volume"
              name: azurediskpv
    
  3. Wenden Sie die YAML-Manifestdatei an, um den Pod bereitzustellen.

    kubectl apply -f acstor-pod.yaml
    

    Die Ausgabe sollte etwa folgendermaßen aussehen:

    pod/fiopod created
    
  4. Überprüfen Sie, ob der Pod ausgeführt wird und dass der Anspruch auf persistentes Volume erfolgreich an den Pod gebunden wurde:

    kubectl describe pod fiopod
    kubectl describe pvc azurediskpvc
    
  5. Überprüfen Sie FIO-Tests, um den aktuellen Status anzuzeigen:

    kubectl exec -it fiopod -- fio --name=benchtest --size=800m --filename=/volume/test --direct=1 --rw=randrw --ioengine=libaio --bs=4k --iodepth=16 --numjobs=8 --time_based --runtime=60
    

Sie haben jetzt einen Pod bereitgestellt, der Azure-Datenträger als Speicher verwendet. Sie können ihn auch für Ihre Kubernetes-Workloads verwenden.

Verwalten persistenter Volumes und Speicherpools

Nachdem Sie nun ein persistentes Volume erstellt haben, können Sie es nach Bedarf trennen und erneut anfügen. Sie können auch einen Speicherpool erweitern oder löschen.

Trennen und erneutes Anfügen eines persistenten Volumes

Um ein persistentes Volume zu trennen, löschen Sie den Pod, dem das persistente Volume angefügt ist. Ersetzen Sie <pod-name> durch den Namen des Pods, z. B. fiopod.

kubectl delete pods <pod-name>

Um ein persistentes Volume erneut anzufügen, verweisen Sie einfach auf den Namen für den Anspruch auf persistentes Volume in der YAML-Manifestdatei, wie unter Bereitstellen eines Pods und Anfügen eines persistenten Volumes beschrieben.

Um zu überprüfen, an welches persistente Volume ein Anspruch auf persistentes Volume gebunden ist, führen Sie kubectl get pvc <persistent-volume-claim-name> aus.

Erweitern eines Speicherpools

Sie können von Azure-Datenträgern gesicherte Speicherpools erweitern, um schnell und ohne Ausfallzeiten zu skalieren. Das Verkleinern von Speicherpools wird derzeit nicht unterstützt. Die Speicherpoolerweiterung wird für Ultra Disks oder SSD Premium v2 nicht unterstützt.

Hinweis

Durch das Erweitern eines Speicherpools können sich Ihre Kosten für Azure Container Storage und Azure Disks erhöhen. Weitere Informationen finden Sie auf der Azure Container Storage-Preisseite und unter Grundlegendes zur Abrechnung von Azure Container Storage.

Derzeit gilt für die Erweiterung des Speicherpools die folgende Einschränkung bei der Verwendung der SKUs Premium_LRS, Standard_LRS, StandardSSD_LRS, Premium_ZRS und StandardSSD_ZRS:

  • Wenn Ihr vorhandener Speicherpool kleiner als 4 TiB (4.096 GiB) ist, können Sie ihn nur auf bis zu 4.095 GiB erweitern. Um Fehler zu vermeiden, versuchen Sie nicht, den aktuellen Speicherpool auf mehr als 4.095 GiB zu erweitern, wenn er anfänglich kleiner als 4 TiB ist (4.096 GiB). Speicherpools > 4 TiB können bis auf die maximal verfügbare Speicherkapazität erweitert werden.

Befolgen Sie diese Anweisungen, um einen vorhandenen Speicherpool für Azure-Datenträger zu erweitern.

  1. Öffnen Sie mit einem Text-Editor die YAML-Manifestdatei, die Sie zum Erstellen des Speicherpools verwendet haben, z. B. code acstor-storagepool.yaml.

  2. Ersetzen Sie den angegebenen Speichereintrag in der YAML-Manifestdatei durch den gewünschten Wert. Dieser Wert muss größer als die aktuelle Kapazität des Speicherpools sein. Wenn die Spezifikation z. B. auf storage: 1Ti gesetzt ist, ändern Sie sie auf storage: 2Ti. Wenn Sie einen vorab bereitgestellten Speicherpool erstellt haben, gibt es keinen Speichereintrag, da der Speicherpool die Kapazitätsgröße von den vorab bereitgestellten Azure-Datenträgern geerbt hat. Wenn im YAML kein Speichereintrag angezeigt wird, fügen Sie den folgenden Code hinzu, der die gewünschte Speicherkapazität angibt, und speichern Sie dann die Manifestdatei:

    spec:
      resources:
        requests:
          storage: 2Ti
    

Hinweis

Wenn Sie zwei Datenträger in einem Speicherpool mit jeweils einer Kapazität von 1 TiB besitzen und die YAML-Manifestdatei zum Lesen von storage: 4Ti bearbeiten, werden beide Datenträger bei Anwendung der YAML-Datei auf 2 TiB erweitert, sodass Sie eine neue Gesamtkapazität von 4 TiB erhalten.

  1. Wenden Sie die YAML-Manifestdatei an, um den Speicherpool zu erweitern.

    kubectl apply -f acstor-storagepool.yaml 
    
  2. Führen Sie diesen Befehl aus, um den Status des Speicherpools zu überprüfen. Ersetzen Sie <storage-pool-name> durch den Wert des Namens für Ihren Speicherpool.

    kubectl describe sp <storage-pool-name> -n acstor
    

    Es sollte eine Meldung wie "der Speicherpool wird erweitert" angezeigt werden. Führen Sie den Befehl nach ein paar Minuten erneut aus, und die Nachricht sollte nicht mehr angezeigt werden.

  3. Führen Sie kubectl get sp -A aus. Der Speicherpool sollte die neue Größe widerspiegeln.

Löschen eines Speicherpools

Wenn Sie einen Speicherpool löschen möchten, führen Sie den folgenden Befehl aus. Ersetzen Sie <storage-pool-name> durch den Namen des Speicherpools.

kubectl delete sp -n acstor <storage-pool-name>

Weitere Informationen