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:
- 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.yaml
zu 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 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
undMBpsReadWrite
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
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.
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.yaml
zu 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.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.
Verwenden Sie Ihren bevorzugten Text-Editor, um eine YAML-Manifestdatei wie
code acstor-storagepool-cmk.yaml
zu 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 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
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.
Verwenden Sie Ihren bevorzugten Text-Editor, um eine YAML-Manifestdatei wie
code acstor-pvc.yaml
zu erstellen.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
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.
Verwenden Sie Ihren bevorzugten Text-Editor, um eine YAML-Manifestdatei wie
code acstor-pod.yaml
zu 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: azurediskpv
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
Ü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 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.
Ö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: 1Ti
gesetzt 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: 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.
Wenden Sie die YAML-Manifestdatei an, um den Speicherpool zu erweitern.
kubectl apply -f acstor-storagepool.yaml
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.
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>