Verwenden von Azure Container Storage mit temporärem SSD-Datenträger
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 temp SSD als Backend-Speicher für Ihre Kubernetes-Workloads zu verwenden. Am Ende verfügen Sie über einen Pod, der temp SSD als Speicher verwendet.
Was ist ein kurzlebiger Datenträger?
Wenn Ihre Anwendung Speicherlatenz von unter einer Millisekunde benötigt und keine Dauerhaftigkeit der Daten erfordert, können Sie den kurzlebigen Datenträger mit Azure Container Storage verwenden, um Ihre Leistungsanforderungen zu erfüllen. „Kurzlebig“ bedeutet, dass die Datenträger auf dem lokalen virtuellen Computer (VM), der den AKS-Cluster hostet, bereitgestellt und nicht in einem Azure-Speicherdienst gespeichert werden. Daten gehen auf diesen Datenträgern verloren, wenn Sie Ihren virtuellen Computer beenden oder die Zuordnung für Ihren virtuellen Computer aufheben.
Zwei Arten des kurzlebigen Datenträgers sind verfügbar: lokaler NVMe-Datenträger und temporärer SSD-Datenträger. NVMe ist für die Hochgeschwindigkeitsübertragung von Daten zwischen Speicher und CPU konzipiert. Wählen Sie NVMe aus, wenn Ihre Anwendung mehr IOPS oder einen höheren Durchsatz als ein temporärer SSD-Datenträger oder mehr Speicherplatz benötigt. Beachten Sie, dass Azure Container Storage nur synchrone Datenreplikation für lokale NVMe-Datenträger unterstützt.
Aufgrund der Kurzlebigkeit dieser Datenträger unterstützt Azure Container Storage die Verwendung von generischen kurzlebigen Volumes standardmäßig bei Verwendung eines kurzlebigen Datenträgers. Bestimmte Anwendungsfälle können jedoch persistente Volumes erfordern, auch wenn die Daten nicht dauerhaft sind. Dies ist etwa der Fall, wenn Sie vorhandene YAML-Dateien oder Bereitstellungsvorlagen verwenden möchten, die für die Verwendung persistenter Volumes hartcodiert sind, und Ihre Workload die Replikation auf Anwendungsebene zum Zweck der Dauerhaftigkeit unterstützt. In solchen Fällen können Sie Ihre Azure Container Storage-Installation aktualisieren und die Anmerkung acstor.azure.com/accept-ephemeral-storage=true
in der Anspruchsdefinition für beständige Volumes hinzufügen, um die Erstellung persistenter Volumes aus Speicherpools für kurzlebige Datenträger zu unterstützen.
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.
Wählen Sie einen VM-Typ aus, der temp SSD unterstützt
Kurzlebige Datenträger sind nur für bestimmte VM-Typen verfügbar. Stellen Sie sicher, dass Sie einen VM-Typ mit temporärem SSD-Datenträger auswählen, z. B. eine VM der Serie Ev3 oder Esv3.
Führen Sie den folgenden Befehl aus, um den VM-Typ abzurufen, der mit Ihrem Knotenpool verwendet wird. Ersetzen Sie <resource group>
und <cluster name>
durch Ihre eigenen Werte. Sie müssen keine Werte für PoolName
oder VmSize
angeben, damit die Abfrage wie hier dargestellt beibehalten wird.
az aks nodepool list --resource-group <resource group> --cluster-name <cluster name> --query "[].{PoolName:name, VmSize:vmSize}" -o table
Im Folgenden finden Sie ein Beispiel für eine Ausgabe.
PoolName VmSize
---------- ---------------
nodepool1 standard_l8s_v3
Es wird empfohlen, dass jede VM mindestens vier virtuelle CPUs (vCPUs) und jeder Knotenpool mindestens drei Knoten aufweist.
Erstellen und Anfügen generischer kurzlebiger Volumes
Führen Sie die folgenden Schritte aus, um ein generisches kurzlebiges 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.
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 Abschnitt überspringen und mit der Anzeige der verfügbaren Speicherklassen fortfahren.
Führen Sie die folgenden Schritte aus, um einen Speicherpool mithilfe eines temporären SSD 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, und speichern Sie die Datei. Der Wert des Namens für den Speicherpool kann beliebig sein.
apiVersion: containerstorage.azure.com/v1 kind: StoragePool metadata: name: ephemeraldisk-temp namespace: acstor spec: poolType: ephemeralDisk: diskType: temp
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/ephemeraldisk-temp 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 ephemeraldisk-temp 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.
$ kubectl get sc | grep "^acstor-"
acstor-azuredisk-internal disk.csi.azure.com Retain WaitForFirstConsumer true 65m
acstor-ephemeraldisk-temp containerstorage.csi.azure.com Delete WaitForFirstConsumer true 2m27s
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. Bereitstellen eines Pods mit einem generischen kurzlebigen Volume
Erstellen Sie einen Pod mithilfe von FIO (Flexibler E/A-Tester) für die Benchmarking und Workloadsimulation, die ein generisches, kurzlebiges Volume verwendet.
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 containers: - name: fio image: nixery.dev/shell/fio args: - sleep - "1000000" volumeMounts: - mountPath: "/volume" name: ephemeralvolume volumes: - name: ephemeralvolume ephemeral: volumeClaimTemplate: metadata: labels: type: my-ephemeral-volume spec: accessModes: [ "ReadWriteOnce" ] storageClassName: acstor-ephemeraldisk-temp # replace with the name of your storage class if different resources: requests: storage: 1Gi
Wenn Sie die Speichergröße Ihrer Volumes ändern, stellen Sie sicher, dass diese kleiner als die verfügbare Kapazität des temporären Datenträgers eines einzelnen Knotens ist. Weitere Informationen finden Sie unter Überprüfen der Knotenkapazität für temporäre Datenträger.
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 das kurzlebige Volume erfolgreich an den Pod gebunden wurde:
kubectl describe pod fiopod kubectl describe pvc fiopod-ephemeralvolume
Ü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 temp SSD-Datenträger als Speicher verwendet. Sie können ihn auch für Ihre Kubernetes-Workloads verwenden.
Erstellen und Anfügen persistenter Volumes
Wenn Sie ein persistentes Volume aus einem Speicherpool für kurzlebige Datenträger erstellen möchten, müssen Sie eine Anmerkung in Ihre Ansprüche für persistente Volumes (Persistent Volume Claims, PVCs) einschließen, um sicherzustellen, dass persistente Volumes auch dann verwendet werden sollen, wenn die Daten kurzlebig sind. Darüber hinaus müssen Sie das Flag --ephemeral-disk-volume-type
mit dem Wert PersistentVolumeWithAnnotation
für Ihren Cluster aktivieren, bevor Sie Ansprüche für persistente Volumes erstellen.
Führen Sie die folgenden Schritte aus, um ein persistentes Volume zu erstellen und anzufügen.
1. Aktualisieren der Azure Container Storage-Installation
Führen Sie den folgenden Befehl aus, um Ihre Azure Container Storage-Installation zu aktualisieren und damit die Erstellung persistenter Volumes aus Speicherpools für kurzlebige Datenträger zu ermöglichen.
az aks update -n <cluster-name> -g <resource-group> --enable-azure-container-storage ephemeralDisk --storage-pool-option Temp --ephemeral-disk-volume-type PersistentVolumeWithAnnotation
2. Erstellen eines Speicherpools
Erstellen Sie 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.
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 Abschnitt überspringen und mit der Anzeige der verfügbaren Speicherklassen fortfahren.
Führen Sie die folgenden Schritte aus, um einen Speicherpool mithilfe eines temporären SSD 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, und speichern Sie die Datei. Der Wert des Namens für den Speicherpool kann beliebig sein.
apiVersion: containerstorage.azure.com/v1 kind: StoragePool metadata: name: ephemeraldisk-temp namespace: acstor spec: poolType: ephemeralDisk: diskType: temp
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/ephemeraldisk-temp 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 ephemeraldisk-temp 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.
3. 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 und beim Bereitstellen 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.
$ kubectl get sc | grep "^acstor-"
acstor-azuredisk-internal disk.csi.azure.com Retain WaitForFirstConsumer true 65m
acstor-ephemeraldisk-temp containerstorage.csi.azure.com Delete WaitForFirstConsumer true 2m27s
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.
4. 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: ephemeralpvc annotations: acstor.azure.com/accept-ephemeral-storage: "true" spec: accessModes: - ReadWriteOnce storageClassName: acstor-ephemeraldisk-temp # replace with the name of your storage class if different resources: requests: storage: 100Gi
Wenn Sie die Speichergröße Ihrer Volumes ändern, stellen Sie sicher, dass diese kleiner als die verfügbare Kapazität des kurzlebigen Datenträgers eines einzelnen Knotens ist. Weitere Informationen finden Sie unter Überprüfen der Knotenkapazität für temporäre Datenträger.
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/ephemeralpvc created
Sie können den Status des PVC überprüfen, indem Sie den folgenden Befehl ausführen:
kubectl describe pvc ephemeralpvc
Sobald der PVC erstellt wurde, kann er von einem Pod verwendet werden.
5. 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: ephemeralpv persistentVolumeClaim: claimName: ephemeralpvc containers: - name: fio image: nixery.dev/shell/fio args: - sleep - "1000000" volumeMounts: - mountPath: "/volume" name: ephemeralpv
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 ephemeralpvc
Ü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 einen temporären SSD-Datenträger als Speicher verwendet. Sie können ihn auch für Ihre Kubernetes-Workloads verwenden.
Verwalten von Volumes und Speicherpools
In diesem Abschnitt erfahren Sie, wie Sie die verfügbare Kapazität eines kurzlebigen Datenträgers für einen einzelnen Knoten überprüfen und wie Sie einen Speicherpool erweitern oder löschen.
Überprüfen der Knotenkapazität für temporäre Datenträger
Ein kurzlebiges Volume wird einem einzelnen Knoten zugewiesen. Wenn Sie die Größe Ihrer kurzlebigen Volumes konfigurieren, sollte diese kleiner als die verfügbare Kapazität des temporären Datenträgers des einzelnen Knotens sein.
Führen Sie den folgenden Befehl aus, um die verfügbare Kapazität des temporären Datenträgers für einen einzelnen Knoten zu überprüfen.
$ kubectl get diskpool -n acstor
NAME CAPACITY AVAILABLE USED RESERVED READY AGE
ephemeraldisk-temp-diskpool-jaxwb 75660001280 75031990272 628011008 560902144 True 21h
ephemeraldisk-temp-diskpool-wzixx 75660001280 75031990272 628011008 560902144 True 21h
ephemeraldisk-temp-diskpool-xbtlj 75660001280 75031990272 628011008 560902144 True 21h
In diesem Beispiel ist die verfügbare Kapazität des temporären Datenträgers für einen einzelnen Knoten 75031990272
Byte oder 69 GiB.
Erweitern eines Speicherpools
Sie können von temp SSD gesicherte Speicherpools erweitern, um schnell und ohne Ausfallzeiten zu skalieren. Das Verkleinern von Speicherpools wird derzeit nicht unterstützt.
Da ein Speicherpool, der von einem kurzlebigen Datenträger unterstützt wird, lokale Speicherressourcen auf den AKS-Clusterknoten (VMs) verwendet, muss durch erweitern des Speicherpools ein weiterer Knoten zum Cluster hinzugefügt werden. Befolgen Sie diese Anweisungen, um den Speicherpool zu erweitern.
Führen Sie den folgenden Befehl aus, um einen Knoten im AKS-Cluster hinzuzufügen. Ersetzen Sie
<cluster-name>
,<nodepool name>
und<resource-group-name>
durch Ihre eigenen Werte. Führen Siekubectl get nodes
aus, um den Namen des Knotenpools abzurufen.az aks nodepool add --cluster-name <cluster name> --name <nodepool name> --resource-group <resource group> --node-vm-size Standard_L8s_v3 --node-count 1 --labels acstor.azure.com/io-engine=acstor
Führen Sie
kubectl get nodes
aus, und Sie sehen, dass dem Cluster ein Knoten hinzugefügt wurde.Führen Sie
kubectl get sp -A
aus, und Sie sollten sehen, dass die Kapazität des Speicherpools gestiegen ist.
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>