Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Azure Container Storage ist ein cloudbasierter Volumeverwaltungs-, Bereitstellungs- und Orchestrierungsdienst, der nativ für Container erstellt wurde. In diesem Artikel erfahren Sie, wie Sie Azure Container Storage (Version 1.x.x) so konfigurieren, dass Azure-verwaltete Datenträger als Back-End-Speicher für Ihre Kubernetes-Workloads verwendet werden. Am Ende verfügen Sie über einen Pod, der azure-verwaltete Datenträger als Speicher verwendet.
Wichtig
Dieser Artikel behandelt Features und Funktionen, die in Azure Container Storage (Version 1.x.x) verfügbar sind. Azure Container Storage (Version 2.x.x) ist jetzt verfügbar, unterstützt aber derzeit nur lokale NVMe für den Sicherungsspeicher.
Voraussetzungen
Wenn Sie kein Azure-Abonnement besitzen, können Sie ein kostenloses Konto erstellen, bevor Sie beginnen.
Dieser Artikel erfordert die neueste Version der Azure CLI. Weitere Informationen finden Sie unter Installieren der Azure-Befehlszeilenschnittstelle. Wenn Sie die Bash-Umgebung in Azure Cloud Shell verwenden, ist die neueste Version wahrscheinlich 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.Ü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:
- Erstellen eines dynamischen Speicherpools
- Erstellen eines vorab bereitgestellten Speicherpools mit vorab bereitgestellten Azure-verwalteten Datenträgern
- Erstellen eines dynamischen Speicherpools mit Ihrem eigenen Verschlüsselungsschlüssel (optional)
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.
Verwenden Sie Ihren bevorzugten Text-Editor, um eine YAML-Manifestdatei wie
code acstor-storagepool.yamlzu erstellen.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 Speicher 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: 1TiWenn Sie Datenträger vom Typ „UltraSSD_LRS“ oder „PremiumV2_LRS“ verwenden, können Sie IOPS und Durchsatz mithilfe der Parameter
IOPSReadWriteundMBpsReadWritein Ihrer Speicherpooldefinition festlegen.IOPSReadWritebezieht 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.MBpsReadWritebezieht 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: 1TiSpeichern Sie die YAML-Manifestdatei, und wenden Sie sie dann an, um den Speicherpool zu erstellen.
kubectl apply -f acstor-storagepool.yamlWenn die Erstellung des Speicherpools abgeschlossen ist, wird eine Meldung wie folgt angezeigt:
storagepool.containerstorage.azure.com/azuredisk createdSie 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 mithilfe der Benennungskonvention acstor-<storage-pool-name>eine Speicherklasse in Ihrem Auftrag. 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 den Speicherpool für vorkonfigurierte Azure-Datenträger vorzubereiten.
Vorkonfigurierte von Azure verwaltete Datenträger müssen sich in derselben Zone des Systemknotenpools befinden. Führen Sie die folgenden Schritte aus, um Zonen von Datenträgern und Systemknotenpools zu überprüfen.
$ systemNodepoolName=$(az aks nodepool list -g <resourceGroup> --cluster-name <clusterName> --query "[?mode=='System'].name" -o tsv) $ az aks nodepool show --resource-group <resourceGroup> --cluster-name <clusterName> --name $systemNodepoolName --query "availabilityZones" -o tsv 1 $ az disk show --resource-group <resourceGroup> --name <diskName> --query "zones" -o tsv 1Cluster-verwaltete Identität finden
$ az aks show --resource-group <resourceGroup> --name <clusterName> --query "identity" -o tsv a972fa43-1234-5678-1234-c040eb546ec5Weisen Sie der verwalteten Clusteridentität die Rolle Mitwirkender des Datenträgers zu. Melden Sie sich beim Azure-Portal an, und navigieren Sie zu Ihrem Datenträger. Wählen Sie im Dienstmenü Zugriffssteuerung (IAM)>Rollenzuweisung hinzufügen aus, und wählen Sie dann die Rolle Mitwirkender aus, und weisen Sie die Rolle der Identität zu. Wenn Sie Ihren Datenträger unter einer verwalteten AKS-Ressourcengruppe (Beispiel: MC_myResourceGroup_myAKSCluster_eastus) erstellt haben, können Sie diesen Schritt überspringen.
Ermitteln der Identität des Systemknotenpools:
$ nodeResourceGroup=$(az aks show --resource-group <resourceGroup> --name <clusterName> --query nodeResourceGroup -o tsv) $ agentPoolIdentityName="<clusterName>-agentpool" $ az identity show --resource-group $nodeResourceGroup --output tsv --subscription $subscriptionId --name $agentPoolIdentityName --query 'principalId' eb25d20f-1234-4ed5-1234-cef16f5bfe93Weisen Sie der Identität die Rolle Datenträgerpooloperator auf Ihrem Datenträger zu. Melden Sie sich beim Azure-Portal an, und navigieren Sie zu Ihrem Datenträger. Wählen Sie im Dienstmenü Zugriffssteuerung (IAM)>Rollenzuweisung hinzufügen aus, und wählen Sie dann die Rolle Datenträgerpooloperator aus, und weisen Sie die Rolle der Identität zu.
Führen Sie die folgenden Schritte aus, um einen vorab bereitgestellten Speicherpool für Azure-Datenträger zu erstellen.
Melden Sie sich beim Azure-Portal an.
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.
Verwenden Sie Ihren bevorzugten Text-Editor, um eine YAML-Manifestdatei wie
code acstor-storagepool.yamlzu erstellen.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>Wenden Sie die YAML-Manifestdatei an, um den Speicherpool zu erstellen.
kubectl apply -f acstor-storagepool.yamlWenn die Erstellung des Speicherpools abgeschlossen ist, wird eine Meldung wie folgt angezeigt:
storagepool.containerstorage.azure.com/sp-preprovisioned createdSie 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 mithilfe der Benennungskonvention acstor-<storage-pool-name>eine Speicherklasse in Ihrem Auftrag. 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 persistenten Volumes werden mit demselben Schlüssel verschlüsselt.
Verwenden Sie Ihren bevorzugten Text-Editor, um eine YAML-Manifestdatei wie
code acstor-storagepool-cmk.yamlzu erstellen.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 Speicher 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: 1TiWenden Sie die YAML-Manifestdatei an, um den Speicherpool zu erstellen.
kubectl apply -f acstor-storagepool-cmk.yamlWenn die Erstellung des Speicherpools abgeschlossen ist, wird eine Meldung wie folgt angezeigt:
storagepool.containerstorage.azure.com/azuredisk createdSie 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 mithilfe der Benennungskonvention acstor-<storage-pool-name>eine Speicherklasse in Ihrem Auftrag.
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
Stellen Sie sicher, dass SIE NICHT die speicherklasse verwenden, 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.
Verwenden Sie Ihren bevorzugten Text-Editor, um eine YAML-Manifestdatei wie
code acstor-pvc.yamlzu erstellen.Fügen Sie den folgenden Code ein, und speichern Sie die Datei. Der PVC-Wert
namekann 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: 100GiWenden Sie die YAML-Manifestdatei an, um den PVC zu erstellen.
kubectl apply -f acstor-pvc.yamlEine ähnliche Ausgabe wie die folgende sollte angezeigt werden:
persistentvolumeclaim/azurediskpvc createdSie können den Status des PVC überprüfen, indem Sie den folgenden Befehl ausführen:
kubectl describe pvc azurediskpvc
Sobald die PVC erstellt wurde, kann sie 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.
Verwenden Sie Ihren bevorzugten Text-Editor, um eine YAML-Manifestdatei wie
code acstor-pod.yamlzu erstellen.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: azurediskpvWenden Sie die YAML-Manifestdatei an, um den Pod bereitzustellen.
kubectl apply -f acstor-pod.yamlDie Ausgabe sollte etwa folgendermaßen aussehen:
pod/fiopod createdÜ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Ü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 eine Anforderung für ein 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.
Öffnen Sie mit einem Text-Editor die YAML-Manifestdatei, die Sie zum Erstellen des Speicherpools verwendet haben, z. B.
code acstor-storagepool.yaml.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: 1Tigesetzt ist, ändern Sie sie aufstorage: 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: 2TiHinweis
Wenn Sie zwei Datenträger in einem Speicherpool mit jeweils einer Kapazität von 1 TiB haben und die YAML-Manifestdatei zum Lesen
storage: 4Tibearbeiten, werden beide Datenträger bei Anwendung des YAML auf 2 TiB erweitert, sodass Sie eine neue Gesamtkapazität von 4 TiB erhalten.Wenden Sie die YAML-Manifestdatei an, um den Speicherpool zu erweitern.
kubectl apply -f acstor-storagepool.yamlFü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 acstorEs sollte eine Meldung wie „Der Speicherpool wird erweitert“ angezeigt werden. Führen Sie den Befehl nach ein paar Minuten erneut aus, und die Meldung sollte nicht mehr angezeigt werden.
Führen Sie
kubectl get sp -Aaus. 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>