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 comandoaz 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.
Usare l'editor di testo preferito per creare un file manifesto YAML, ad esempio
code acstor-storagepool.yaml
.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
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.
Usare l'editor di testo preferito per creare un file manifesto YAML, ad esempio
code acstor-pod.yaml
.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.
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
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
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.
Usare l'editor di testo preferito per creare un file manifesto YAML, ad esempio
code acstor-storagepool.yaml
.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
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.
Usare l'editor di testo preferito per creare un file manifesto YAML, ad esempio
code acstor-pvc.yaml
.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.
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.
Usare l'editor di testo preferito per creare un file manifesto YAML, ad esempio
code acstor-pod.yaml
.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
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
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
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.
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, 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=acstor
Eseguire
kubectl get nodes
e si noterà che un nodo è stato aggiunto al cluster.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>