Teilen über


Verwenden der Azure Container Storage Preview mit lokaler NVMe- und Volumenreplikation

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 kurzlebige Datenträger mit lokaler NVMe und Volumenreplikation als Backend-Speicher für Ihre Kubernetes-Workloads zu verwenden. Am Ende verfügen Sie über einen Pod, der einen lokalen NVMe als Speicher verwendet. Bei der Replikation werden Daten in Volumes auf verschiedenen Knoten kopiert und beim Verlust eines Replikats ein Volume wiederhergestellt. Dabei wird Resilienz für kurzlebige Datenträger bereitgestellt.

Was ist ein kurzlebiger Datenträger?

Wenn Ihre Anwendung Speicherlatenz von unter einer Millisekunde benötigt, können Sie den kurzlebigen Datenträger mit Azure Container Storage verwenden, damit Ihre Leistungsanforderungen erfüllt werden. „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: NVMe und temporäres SSD. NVMe ist für die Hochgeschwindigkeitsübertragung von Daten zwischen Speicher und CPU konzipiert. Wählen Sie NVMe aus, wenn Ihre Anwendung einen höheren IOPS und einen höheren Durchsatz als ein temporäres SSD erfordert oder Ihre Workload repliziert werden muss. Die Replikation wird derzeit für temporäre SSD nicht unterstützt.

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.

Auswählen eines VM-Typs, der lokale NVMe unterstützt

Kurzlebige Datenträger sind nur für bestimmte VM-Typen verfügbar. Wenn Sie einen lokalen NVMe verwenden möchten, ist eine datenspeicheroptimierte VM wie standard_l8s_v3 erforderlich.

Sie können den folgenden Befehl ausführen, um den VM-Typ abzurufen, der mit Ihrem Knotenpool verwendet 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 persistenter Volumes

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

1. Erstellen eines Speicherpools mit Volumereplikation

Führen Sie die folgenden Schritte aus, um einen Speicherpool mit lokaler NVMe-Replikation zu erstellen. Azure Container Storage unterstützt derzeit drei Replikat- und fünf Replikatkonfigurationen. Wenn Sie drei Replikate angeben, müssen Sie mindestens drei Knoten in Ihrem AKS-Cluster haben. Wenn Sie fünf Replikate angeben, müssen Sie mindestens fünf Knoten haben.

Hinweis

Da kurzlebige Datenträgerspeicherpools alle verfügbaren NVMe-Datenträger verbrauchen, müssen Sie alle vorhandenen lokalen NVMe-Speicherpools löschen, bevor Sie einen neuen Speicherpool mit Replikation 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, und speichern Sie die Datei. Der Wert des Namens für den Speicherpool kann beliebig sein. Legen Sie Replikate auf 3 oder 5 fest.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: nvme
      namespace: acstor
    spec:
      poolType:
        ephemeralDisk:
          diskType: nvme
          replicas: 3
    
  3. 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/nvme 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 nvme 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 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        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. 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: ephemeralpvc
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: acstor-ephemeraldisk-nvme # 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 kurzlebige Datenträger.

  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/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.

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: ephemeralpv
          persistentVolumeClaim:
            claimName: ephemeralpvc
      containers:
        - name: fio
          image: nixery.dev/shell/fio
          args:
            - sleep
            - "1000000"
          volumeMounts:
            - mountPath: "/volume"
              name: ephemeralpv
    
  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 ephemeralpvc
    
  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 einen lokalen NVMe mit Volumereplikation verwendet, und Sie können ihn 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, wie Sie ein langlebiges Volume entfernen und wieder einbinden und wie Sie einen Speicherpool erweitern oder löschen.

Überprüfen der Knotenkapazität für kurzlebige 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 kurzlebigen Datenträgers des einzelnen Knotens sein.

Führen Sie den folgenden Befehl aus, um die verfügbare Kapazität des kurzlebigen Datenträgers für einen einzelnen Knoten zu überprüfen.

$ kubectl get diskpool -n acstor
NAME                                CAPACITY      AVAILABLE     USED        RESERVED    READY   AGE
ephemeraldisk-nvme-diskpool-jaxwb   75660001280   75031990272   628011008   560902144   True    21h
ephemeraldisk-nvme-diskpool-wzixx   75660001280   75031990272   628011008   560902144   True    21h
ephemeraldisk-nvme-diskpool-xbtlj   75660001280   75031990272   628011008   560902144   True    21h

In diesem Beispiel ist die verfügbare Kapazität des kurzlebigen Datenträgers für einen einzelnen Knoten 75031990272 Byte oder 69 GiB.

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.

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 persistente Volumes gebunden ist, führen Sie Folgendes aus:

kubectl get pvc <persistent-volume-claim-name>

Erweitern eines Speicherpools

Sie können Speicherpools erweitern, die von lokalen NVMe gesichert werden, 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.

  1. 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 Sie kubectl 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
    
  2. Führen Sie kubectl get nodes aus, und Sie sehen, dass dem Cluster ein Knoten hinzugefügt wurde.

  3. 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>

Weitere Informationen