Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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 ilaz aks install-clicomando .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.
Usare l'editor di testo preferito per creare un file manifesto YAML,
code acstor-storagepool.yamlad esempio .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: nvmeApplicare il file manifesto YAML per creare il pool di archiviazione.
kubectl apply -f acstor-storagepool.yamlAl 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.
Usare l'editor di testo preferito per creare un file manifesto YAML,
code acstor-pod.yamlad esempio .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: 1GiQuando 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.
Applicare il file manifesto YAML per distribuire il pod.
kubectl apply -f acstor-pod.yamlVerrà visualizzato un output simile al seguente:
pod/fiopod createdVerificare 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-ephemeralvolumeControllare 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.
Usare l'editor di testo preferito per creare un file manifesto YAML,
code acstor-storagepool.yamlad esempio .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: nvmeApplicare il file manifesto YAML per creare il pool di archiviazione.
kubectl apply -f acstor-storagepool.yamlAl 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.
Usare l'editor di testo preferito per creare un file manifesto YAML,
code acstor-pvc.yamlad esempio .Incollare il codice seguente e salvare il file. Il valore di PVC
namepuò 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: 100GiQuando 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.
Applicare il file manifesto YAML per creare il PVC.
kubectl apply -f acstor-pvc.yamlL'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.
Usare l'editor di testo preferito per creare un file manifesto YAML,
code acstor-pod.yamlad esempio .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: ephemeralpvApplicare il file manifesto YAML per distribuire il pod.
kubectl apply -f acstor-pod.yamlVerrà visualizzato un output simile al seguente:
pod/fiopod createdVerificare 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 ephemeralpvcControllare 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.
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, eseguirekubectl 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=acstorEseguire
kubectl get nodese si noterà che un nodo è stato aggiunto al cluster.Eseguite
kubectl get sp -Ae 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>