Condividi tramite


Usa Azure Container Storage con un’unità SSD temporanea

Archiviazione di Azure Container è un servizio di gestione, distribuzione e orchestrazione basato sul cloud creato in modo nativo per i contenitori. Questo articolo illustra come configurare Azure Container Storage per l’uso di un disco temporaneo con un’unità SSD temporanea come risorsa di archiviazione back-end per i carichi di lavoro Kubernetes. Alla fine, si avrà un pod che usa un’unita SSD temporanea come risorsa di archiviazione.

Che cos’è un disco temporaneo?

Quando un’applicazione necessita di latenza di archiviazione di sotto millisecondi e non richiede durabilità dei dati, è possibile usare un disco temporaneo con Azure Container Storage per soddisfare i requisiti delle prestazioni. Temporaneo significa che i dischi vengono distribuiti nella macchina virtuale locale che ospita il cluster del servizio Azure Kubernetes 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 dischi temporanei: 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 superiore rispetto all'unità SSD temporanea o richiede più spazio di archiviazione. Tenere presente che Archiviazione di Container Azure supporta solo la replica dei dati sincrona per NVMe locale.

A causa della natura temporanea di questi dischi, Archiviazione di Container Azure supporta l'uso di volumi temporanei generici per impostazione predefinita quando si usa un disco temporaneo. Tuttavia, alcuni casi d'uso potrebbero chiamare per volumi permanenti anche se i dati non sono durevoli; ad esempio, se si vogliono usare file YAML esistenti o modelli di distribuzione hardcoded per usare volumi permanenti e il carico di lavoro supporta la replica a livello di applicazione per la durabilità. In questi casi, è possibile aggiornare l'installazione di Archiviazione di Container Azure e aggiungere l'annotazione acstor.azure.com/accept-ephemeral-storage=true nella definizione dell'attestazione del volume permanente per supportare la creazione di volumi permanenti 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 (2.35.0 o successiva) 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, la versione più recente è già installata. 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 comando az aks install-cli.

  • Se Azure Container Storage non è già installato, seguire le istruzioni riportate in Usare Azure Container Storage con il servizio Azure Kubernetes.

  • Controllare se l’area di destinazione è supportata nelle aree di Azure Container Storage.

Scegliere un tipo di macchina virtuale che supporti l’unità SSD temporanea

Il disco temporaneo è disponibile solo in determinati tipi di macchine virtuali. Assicurarsi di scegliere un tipo di macchina virtuale con unità SSD temporanea, ad esempio una macchina virtuale serie Ev3 e Esv3.

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 i comandi az aks create o az aks update, 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 l’unità SSD temporanea.

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

  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-temp
      namespace: acstor
    spec:
      poolType:
        ephemeralDisk:
          diskType: temp
    
  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-temp created
    

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

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

Quando viene creato il pool di archiviazione, Archiviazione di Azure Container 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 di attestazioni di volumi persistenti e la distribuzione di volumi permanenti.

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-temp        containerstorage.csi.azure.com   Delete          WaitForFirstConsumer   true                   2m27s

Importante

Non usare la classe di archiviazione contrassegnata come internal. 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 (Flexible I/O Tester o tester di I/O flessibile) per il benchmarking e la simulazione del carico di lavoro, che usa un volume temporaneo generico.

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

  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-temp # 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. Vedere Controllare la capacità del disco temporaneo del nodo.

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

    kubectl apply -f acstor-pod.yaml
    

    L'output dovrebbe essere 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 un’unità SSD temporanea come risorsa di archiviazione ed è possibile usarlo per i carichi di lavoro Kubernetes.

Creare e collegare volumi permanenti

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 flag --ephemeral-disk-volume-type con il valore PersistentVolumeWithAnnotation nel cluster prima di creare le attestazioni del volume permanente.

Seguire questa procedura per creare e collegare un volume permanente.

1. Aggiornare l'installazione di Archiviazione di Container Azure

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

az aks update -n <cluster-name> -g <resource-group> --enable-azure-container-storage ephemeralDisk --storage-pool-option Temp --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 i comandi az aks create o az aks update, 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 l’unità SSD temporanea.

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

  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-temp
      namespace: acstor
    spec:
      poolType:
        ephemeralDisk:
          diskType: temp
    
  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-temp created
    

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

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

Quando viene creato il pool di archiviazione, Archiviazione di Azure Container 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-temp        containerstorage.csi.azure.com   Delete          WaitForFirstConsumer   true                   2m27s

Importante

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

4. Creare un'attestazione di volume permanente

Un'attestazione di volume permanente viene usata per il provisioning automatico dell'archiviazione in 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, ad esempio code acstor-pvc.yaml.

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

    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
    

    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. Vedere Controllare la capacità del disco temporaneo del nodo.

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

    kubectl apply -f acstor-pvc.yaml
    

    L'output visualizzato sarà simile al seguente:

    persistentvolumeclaim/ephemeralpvc created
    

    È possibile controllare lo stato del PVC eseguendo questo comando:

    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 flessibile) 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 valore usato durante la creazione dell'attestazione del volume permanente.

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

  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
    

    L'output dovrebbe essere 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
    

È stato ora distribuito un pod che usa un’unità SSD temporanea 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 e come espandere o eliminare un pool di archiviazione.

Controllare la capacità del disco temporaneo 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 controllare la capacità disponibile del disco temporaneo per un singolo nodo.

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

Espandere un pool di archiviazione

È possibile espandere i pool di archiviazione supportati dall’unità SSD temporanea per aumentare le risorse rapidamente e senza tempi di inattività. La compattazione dei pool di archiviazione non è attualmente supportata.

Poiché un pool di archiviazione supportato da un disco temporaneo usa risorse di archiviazione locali nei nodi del cluster del servizio Azure Kubernetes, l’espansione del pool di archiviazione richiede l’aggiunta di un altro nodo al cluster. Seguire queste 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 valori personalizzati. 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. Eseguire kubectl get sp -A e si noterà 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 per il pool di archiviazione.

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

Vedi anche