Condividi tramite


Utilizzare Azure Container Storage (versione 1.x.x) con NVMe locale

Azure Container Storage è un servizio di gestione, distribuzione e orchestrazione basato sul cloud progettato nativamente per i container. Questo articolo illustra come configurare l'archiviazione di Azure Container (versione 1.x.x) per usare il disco temporaneo con NVMe locale come risorsa di archiviazione back-end per i carichi di lavoro Kubernetes. Alla fine, si avrà un pod che usa NVMe locale come risorsa di archiviazione.

Importante

Questo articolo illustra le funzioni e le capacità disponibili nell'Archiviazione di Container di Azure (versione 1.x.x). Azure Storage per i Contenitori (versione 2.x.x) è ora disponibile. Se si usa già l'Archiviazione Azure Container (versione 2.x.x), vedere questo articolo per configurare l'NVMe locale.

Che cos'è il disco temporaneo?

Quando l'applicazione necessita di latenza di archiviazione di sotto millisecondi e non richiede durabilità dei dati, è possibile usare il disco temporaneo con Archiviazione contenitori di Azure per soddisfare i requisiti di prestazioni. Effimero significa che i dischi vengono distribuiti sulla macchina virtuale locale (VM) che ospita il cluster AKS e non vengono salvati in un servizio di archiviazione di Azure. I dati andranno persi in questi dischi se si arresta o dealloca la macchina virtuale.

Sono disponibili due tipi di disco temporaneo: NVMe locale e UNITÀ SSD temporanea. NVMe è progettato per il trasferimento di dati ad alta velocità tra l'archiviazione e la CPU. Scegliere NVMe quando l'applicazione necessita di operazioni di I/O al secondo o velocità effettiva superiori rispetto all'unità SSD temporanea o richiede più spazio di archiviazione. Tenere presente che Azure Container Storage supporta solo la replica dei dati sincroni per NVMe locale.

A causa della natura temporanea di questi dischi, Archiviazione Azure Container supporta l'uso di volumi temporanei generici per impostazione predefinita quando si usa un disco temporaneo. Tuttavia, alcuni casi d'uso potrebbero richiedere volumi persistenti anche se i dati non sono durevoli; ad esempio, se si vogliono usare file YAML esistenti o modelli di distribuzione hard-coded per usare volumi persistenti e il carico di lavoro supporta la replica a livello di applicazione per garantire la durabilità. In questi casi, è possibile aggiornare l'installazione di Archiviazione Azure Container e aggiungere l'annotazione acstor.azure.com/accept-ephemeral-storage=true nella definizione dell'attestazione di volume permanente per supportare la creazione di volumi persistenti da pool di archiviazione su disco temporanei.

Prerequisiti

  • Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.

  • Questo articolo richiede la versione più recente dell'interfaccia della riga di comando di Azure. Vedere Come installare l'interfaccia della riga di comando di Azure. Se si usa l'ambiente Bash in Azure Cloud Shell, è probabile che sia già installata la versione più recente. Se si prevede di eseguire i comandi in locale anziché in Azure Cloud Shell, assicurarsi di eseguirli con privilegi amministrativi. Per altre informazioni, vedere Introduzione ad Azure Cloud Shell.

  • È necessario il client della riga di comando Kubernetes, kubectl. È già installato se si usa Azure Cloud Shell oppure è possibile installarlo in locale eseguendo il az aks install-cli comando .

  • Controllare se l'area di destinazione è supportata nelle aree di archiviazione di Azure Container.

Scegliere un tipo di macchina virtuale che supporti NVMe locale

Il disco NVMe locale è disponibile solo in determinati tipi di macchine virtuali, ad esempio SKU di VM ottimizzati per l'archiviazione o SKU di MACCHINE virtuali con accelerazione GPU. Se si prevede di usare la capacità NVMe locale, scegliere uno di questi SKU di macchine virtuali.

Eseguire il comando seguente per ottenere il tipo di macchina virtuale usato con il pool di nodi. Sostituire <resource group> e <cluster name> con valori personalizzati. Non è necessario specificare valori per PoolName o VmSize, quindi mantenere la query come illustrato di seguito.

az aks nodepool list --resource-group <resource group> --cluster-name <cluster name> --query "[].{PoolName:name, VmSize:vmSize}" -o table

Di seguito è riportato un esempio di output.

PoolName    VmSize
----------  ---------------
nodepool1   standard_l8s_v3

È consigliabile che ogni macchina virtuale abbia almeno quattro CPU virtuali (vCPU) e che ogni pool di nodi abbia almeno tre nodi.

Creare e collegare volumi temporanei generici

Seguire questa procedura per creare e collegare un volume temporaneo generico.

1. Creare un pool di archiviazione

Creare prima di tutto un pool di archiviazione, ovvero un raggruppamento logico di archiviazione per il cluster Kubernetes, definendolo in un file manifesto YAML.

Se è stata abilitata l'archiviazione di Azure Container usando az aks create o az aks update i comandi, potrebbe essere già disponibile un pool di archiviazione. Usare kubectl get sp -n acstor per ottenere l'elenco dei pool di archiviazione. Se è già disponibile un pool di archiviazione che si vuole usare, è possibile ignorare questa sezione e passare a Visualizzare le classi di archiviazione disponibili.

Seguire questa procedura per creare un pool di archiviazione usando nvme locale.

  1. Usare l'editor di testo preferito per creare un file manifesto YAML, code acstor-storagepool.yamlad esempio .

  2. Incollare il codice seguente e salvare il file. Il valore del nome del pool di archiviazione può essere quello desiderato.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: ephemeraldisk-nvme
      namespace: acstor
    spec:
      poolType:
        ephemeralDisk:
          diskType: nvme
    
  3. Applicare il file manifesto YAML per creare il pool di archiviazione.

    kubectl apply -f acstor-storagepool.yaml 
    

    Al termine della creazione del pool di archiviazione, verrà visualizzato un messaggio simile al seguente:

    storagepool.containerstorage.azure.com/ephemeraldisk-nvme created
    

    È anche possibile eseguire questo comando per controllare lo stato del pool di archiviazione. Sostituire <storage-pool-name> con il valore del nome del pool di archiviazione. Per questo esempio, il valore sarà temporaneodisk-nvme.

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

Quando viene creato il pool di archiviazione, Azure Container Storage creerà una classe di archiviazione per conto dell'utente usando la convenzione di denominazione acstor-<storage-pool-name>.

2. Visualizzare le classi di archiviazione disponibili

Quando il pool di archiviazione è pronto per l'uso, è necessario selezionare una classe di archiviazione per definire il modo in cui l'archiviazione viene creata dinamicamente durante la creazione e la distribuzione di volumi.

Eseguire kubectl get sc per visualizzare le classi di archiviazione disponibili. Verrà visualizzata una classe di archiviazione denominata acstor-<storage-pool-name>.

$ kubectl get sc | grep "^acstor-"
acstor-azuredisk-internal   disk.csi.azure.com               Retain          WaitForFirstConsumer   true                   65m
acstor-ephemeraldisk-nvme        containerstorage.csi.azure.com   Delete          WaitForFirstConsumer   true                   2m27s

Importante

Non usare la classe di archiviazione contrassegnata come interna. Si tratta di una classe di archiviazione interna necessaria per il funzionamento dell'archiviazione di Azure Container.

3. Distribuire un pod con un volume temporaneo generico

Creare un pod usando Fio (Tester di I/O Flessibile) per benchmarking e simulazione del carico di lavoro, utilizzando un volume effimero generico.

  1. Usare l'editor di testo preferito per creare un file manifesto YAML, code acstor-pod.yamlad esempio .

  2. Incollare il codice seguente e salvare il file.

    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-nvme # replace with the name of your storage class if different
                resources:
                  requests:
                    storage: 1Gi
    

    Quando si modificano le dimensioni di archiviazione dei volumi, assicurarsi che le dimensioni siano inferiori alla capacità disponibile del disco temporaneo di un singolo nodo. Vedi Verificare la capacità del disco effimero del nodo.

  3. Applicare il file manifesto YAML per distribuire il pod.

    kubectl apply -f acstor-pod.yaml
    

    Verrà visualizzato un output simile al seguente:

    pod/fiopod created
    
  4. Verificare che il pod sia in esecuzione e che l'attestazione del volume temporaneo sia stata associata correttamente al pod:

    kubectl describe pod fiopod
    kubectl describe pvc fiopod-ephemeralvolume
    
  5. Controllare il test fio per visualizzarne lo stato corrente:

    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
    

È stato ora distribuito un pod che usa NVMe locale come risorsa di archiviazione ed è possibile usarlo per i carichi di lavoro Kubernetes.

Creare e collegare volumi persistenti

Per creare un volume permanente da un pool di archiviazione su disco temporaneo, è necessario includere un'annotazione nelle attestazioni del volume permanente (PVC) come protezione per assicurarsi di usare volumi permanenti anche quando i dati sono temporanei. È inoltre necessario abilitare il --ephemeral-disk-volume-type flag con il valore PersistentVolumeWithAnnotation sul tuo cluster prima di creare le dichiarazioni di volume persistente.

Segui i seguenti passaggi per creare e associare un volume persistente.

1. Aggiornare l'installazione di Archiviazione di Container Azure

Eseguire il comando seguente per aggiornare l'installazione di Archiviazione Azure Container per consentire la creazione di volumi persistenti da pool di archiviazione su disco temporanei.

az aks update -n <cluster-name> -g <resource-group> --enable-azure-container-storage ephemeralDisk --storage-pool-option NVMe --ephemeral-disk-volume-type PersistentVolumeWithAnnotation 

2. Creare un pool di archiviazione

Creare un pool di archiviazione, ovvero un raggruppamento logico di archiviazione per il cluster Kubernetes, definendolo in un file manifesto YAML.

Se è stata abilitata l'archiviazione di Azure Container usando az aks create o az aks update i comandi, potrebbe essere già disponibile un pool di archiviazione. Usare kubectl get sp -n acstor per ottenere l'elenco dei pool di archiviazione. Se è già disponibile un pool di archiviazione che si vuole usare, è possibile ignorare questa sezione e passare a Visualizzare le classi di archiviazione disponibili.

Seguire questa procedura per creare un pool di archiviazione usando nvme locale.

  1. Usare l'editor di testo preferito per creare un file manifesto YAML, code acstor-storagepool.yamlad esempio .

  2. Incollare il codice seguente e salvare il file. Il valore del nome del pool di archiviazione può essere quello desiderato.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: ephemeraldisk-nvme
      namespace: acstor
    spec:
      poolType:
        ephemeralDisk:
          diskType: nvme
    
  3. Applicare il file manifesto YAML per creare il pool di archiviazione.

    kubectl apply -f acstor-storagepool.yaml 
    

    Al termine della creazione del pool di archiviazione, verrà visualizzato un messaggio simile al seguente:

    storagepool.containerstorage.azure.com/ephemeraldisk-nvme created
    

    È anche possibile eseguire questo comando per controllare lo stato del pool di archiviazione. Sostituire <storage-pool-name> con il valore del nome del pool di archiviazione. Per questo esempio, il valore sarà temporaneodisk-nvme.

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

Quando viene creato il pool di archiviazione, Azure Container Storage creerà una classe di archiviazione per conto dell'utente usando la convenzione di denominazione acstor-<storage-pool-name>.

3. Visualizzare le classi di archiviazione disponibili

Quando il pool di archiviazione è pronto per l'uso, è necessario selezionare una classe di archiviazione per definire il modo in cui l'archiviazione viene creata dinamicamente durante la creazione e la distribuzione di volumi.

Eseguire kubectl get sc per visualizzare le classi di archiviazione disponibili. Verrà visualizzata una classe di archiviazione denominata acstor-<storage-pool-name>.

$ kubectl get sc | grep "^acstor-"
acstor-azuredisk-internal   disk.csi.azure.com               Retain          WaitForFirstConsumer   true                   65m
acstor-ephemeraldisk-nvme        containerstorage.csi.azure.com   Delete          WaitForFirstConsumer   true                   2m27s

Importante

Non usare la classe di archiviazione contrassegnata come interna. Si tratta di una classe di archiviazione interna necessaria per il funzionamento dell'archiviazione di Azure Container.

4. Creare una richiesta di volume persistente

Un'attestazione di volume permanente viene usata per effettuare automaticamente il provisioning dell'archiviazione in base a una classe di archiviazione. Seguire questa procedura per creare un PVC usando la nuova classe di archiviazione.

  1. Usare l'editor di testo preferito per creare un file manifesto YAML, code acstor-pvc.yamlad esempio .

  2. Incollare il codice seguente e salvare il file. Il valore di PVC name può essere quello che vuoi.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ephemeralpvc
      annotations:
        acstor.azure.com/accept-ephemeral-storage: "true"
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: acstor-ephemeraldisk-nvme # replace with the name of your storage class if different
      resources:
        requests:
          storage: 100Gi
    

    Quando si modificano le dimensioni di archiviazione dei volumi, assicurarsi che le dimensioni siano inferiori alla capacità disponibile del disco temporaneo di un singolo nodo. Vedi Verificare la capacità del disco effimero del nodo.

  3. Applicare il file manifesto YAML per creare il PVC.

    kubectl apply -f acstor-pvc.yaml
    

    L'output dovrebbe essere simile al seguente:

    persistentvolumeclaim/ephemeralpvc created
    

    È possibile verificare lo stato del PVC eseguendo il comando seguente:

    kubectl describe pvc ephemeralpvc
    

Una volta creato il PVC, è pronto per l'uso da parte di un pod.

5. Distribuire un pod e collegare un volume permanente

Creare un pod usando Fio (tester di I/O flessibili) per il benchmarking e la simulazione del carico di lavoro e specificare un percorso di montaggio per il volume permanente. Per claimName, usare il valore nome usato durante la creazione del PersistentVolumeClaim.

  1. Usare l'editor di testo preferito per creare un file manifesto YAML, code acstor-pod.yamlad esempio .

  2. Incollare il codice seguente e salvare il file.

    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. Applicare il file manifesto YAML per distribuire il pod.

    kubectl apply -f acstor-pod.yaml
    

    Verrà visualizzato un output simile al seguente:

    pod/fiopod created
    
  4. Verificare che il pod sia in esecuzione e che l'attestazione del volume permanente sia stata associata correttamente al pod:

    kubectl describe pod fiopod
    kubectl describe pvc ephemeralpvc
    
  5. Controllare il test fio per visualizzarne lo stato corrente:

    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
    

A questo punto è stato distribuito un pod che usa NVMe locale ed è possibile usarlo per i carichi di lavoro Kubernetes.

Gestire volumi e pool di archiviazione

In questa sezione si apprenderà come controllare la capacità disponibile del disco temporaneo per un singolo nodo, come espandere o eliminare un pool di archiviazione e come ottimizzare le prestazioni.

Controllare la capacità temporanea del disco del nodo

Un volume temporaneo viene allocato in un singolo nodo. Quando si configurano le dimensioni dei volumi temporanei, le dimensioni devono essere inferiori alla capacità disponibile del disco temporaneo del nodo singolo.

Eseguire il comando seguente per verificare la capacità disponibile del disco temporaneo per un singolo nodo.

kubectl get diskpool -n acstor

L'output dovrebbe essere simile al seguente:

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 questo esempio, la capacità disponibile del disco temporaneo per un singolo nodo è 75031990272 di byte o 69 GiB.

Espandere un pool di archiviazione

È possibile espandere i pool di archiviazione supportati da NVMe locali per aumentare rapidamente e senza tempi di inattività. La compattazione dei pool di archiviazione non è attualmente supportata.

Poiché un pool di archiviazione supportato da Ephemeral Disk utilizza risorse di archiviazione locali sui nodi del cluster AKS, l'espansione del pool di archiviazione richiede di aggiungere un altro nodo al cluster. Seguire le seguenti istruzioni per espandere il pool di archiviazione.

  1. Eseguire il comando seguente per aggiungere un nodo al cluster del servizio Azure Kubernetes. Sostituire <cluster-name>, <nodepool name> e <resource-group-name> con i propri valori. Per ottenere il nome del pool di nodi, eseguire kubectl get nodes.

    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. Eseguire kubectl get nodes e si noterà che un nodo è stato aggiunto al cluster.

  3. Eseguite kubectl get sp -A e noterete che la capacità del pool di archiviazione è aumentata.

Eliminare un pool di archiviazione

Se si vuole eliminare un pool di archiviazione, eseguire il comando seguente. Sostituire <storage-pool-name> con il nome del pool di archiviazione.

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

Ottimizzare le prestazioni quando si usa nvme locale

A seconda dei requisiti di prestazioni del carico di lavoro, è possibile scegliere tra tre diversi livelli di prestazioni: Basic, Standard e Premium. La tua selezione influirà sul numero di vCPU consumati dai componenti di Azure Container Storage nei nodi in cui è installato. Standard è la configurazione predefinita se non si aggiorna il livello di prestazioni.

Questi tre livelli offrono una diversa gamma di IOPS. La tabella seguente contiene indicazioni su ciò che è possibile prevedere con ognuno di questi livelli. È stato usato FIO, uno strumento di benchmarking diffuso, per ottenere questi numeri con la configurazione seguente:

  • AKS: SKU nodo - Standard_L16s_v3
  • FIO: dimensioni blocco - 4 KB; Profondità coda - 32; Numjobs: numero di core assegnati ai componenti di archiviazione del contenitore; Criterio di accesso - casuale; Dimensioni del set di lavoro - 32G
Livello Numero di vCPU 100 % di IOPS di lettura 100% di operazioni di I/O in scrittura
Basic 12.5% di core di macchine virtuali totali Fino a 120.000 Fino a 90.000
Standard (impostazione predefinita) 25% dei core totali delle VM Fino a 220.000 Fino a 180.000
Premium 50% dei core totali della VM Fino a 550.000 Fino a 360.000

Annotazioni

Il consumo di RAM e di hugepages rimarrà costante in tutti i livelli: 1 GiB di RAM e 2 GiB di hugepages.

Dopo aver identificato il livello di prestazioni più adatto alle proprie esigenze, è possibile eseguire il comando seguente per aggiornare il livello di prestazioni dell'installazione di Archiviazione contenitori di Azure. Sostituire <performance tier> con Basic, Standard o Premium.

az aks update -n <cluster-name> -g <resource-group> --enable-azure-container-storage <storage-pool-type> --ephemeral-disk-nvme-perf-tier <performance-tier>

Vedere anche