Creare e usare un volume con i dischi di Azure nel servizio Azure Kubernetes (ASK)
Un volume permanente rappresenta una parte di risorsa di archiviazione di cui è stato effettuato il provisioning da usare con i pod Kubernetes. È possibile usare un volume permanente con uno o più pod ed effettuarne il provisioning in modo dinamico o statico. Questo articolo illustra come creare in modo dinamico volumi permanenti con Dischi di Azure in un cluster del servizio Azure Kubernetes.
Nota
Un disco di Azure può essere montato solo con la modalità di accesso ReadWriteOnce, che lo rende disponibile solo a un nodo nel servizio Azure Kubernetes. Questa modalità di accesso consente comunque a più pod di accedere al volume quando i pod vengono eseguiti nello stesso nodo. Per altre informazioni, vedere le modalità di accesso Kubernetes PersistentVolume.
Questo articolo illustra come:
- Usare un volume permanente dinamico installando il driver CSI (Container Storage Interface) e creando dinamicamente uno o più dischi gestiti di Azure da collegare a un pod.
- Usare un volume permanente statico creando uno o più dischi gestiti di Azure oppure usandone uno esistente e collegandolo a un pod.
Per altre informazioni sui volumi Kubernetes, vedere Opzioni di archiviazione per le applicazioni nel servizio Azure Kubernetes.
Operazioni preliminari
Assicurarsi che sia installata e configurata l'interfaccia della riga di comando di Azure versione 2.0.59 o successiva. Eseguire
az --version
per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.Il driver CSI del disco di Azure ha un limite di volume per nodo. Il numero di volumi cambia in base alle dimensioni del nodo/pool di nodi. Eseguire il comando kubectl get per determinare il numero di volumi che possono essere allocati per nodo:
kubectl get CSINode <nodename> -o yaml
Se il limite di volume per nodo è un problema per il carico di lavoro, prendere in considerazione l'uso di Archiviazione Azure Container per volumi persistenti anziché driver CSI.
Effettuare il provisioning dinamico di un volume
Questa sezione fornisce indicazioni per gli amministratori dei cluster che vogliono effettuare il provisioning di uno o più volumi permanenti che includono i dettagli dell'archiviazione su disco di Azure per l'uso da parte di un carico di lavoro. Un'attestazione di volume permanente usa l'oggetto classe di archiviazione per effettuare il provisioning dinamico di un contenitore di archiviazione su disco di Azure.
Parametri della classe di archiviazione per i volumi permanenti dinamici
La tabella seguente mostra i parametri utilizzabili per definire una classe di archiviazione personalizzata per PersistentVolumeClaim.
Nome | Significato | Valore disponibile | Obbligatorio | Default value |
---|---|---|---|---|
skuName | Tipo di account di archiviazione di Dischi di Azure (alias: storageAccountType ) |
Standard_LRS , Premium_LRS , StandardSSD_LRS , PremiumV2_LRS UltraSSD_LRS , , Premium_ZRS StandardSSD_ZRS |
No | StandardSSD_LRS |
fsType | Tipo di file system | ext4 , ext3 , ext2 , xfs , btrfs per Linux, ntfs per Windows |
No | ext4 per Linux, ntfs per Windows |
cachingMode | Impostazione cache host dischi dati di Azure (PremiumV2_LRS e UltraSSD_LRS supportano solo la modalità di memorizzazione nella cache None ) |
None , ReadOnly , ReadWrite |
No | ReadOnly |
resourceGroup | Specificare il gruppo di risorse per Dischi di Azure | Nome del gruppo di risorse esistente | No | Se vuoto, il driver usa lo stesso nome del gruppo di risorse del cluster del servizio Azure Kubernetes |
DiskIOPSReadWrite | Capacità di operazioni di I/O al secondo del disco UltraSSD o SSD Premium v2 (minimo: 2 operazioni di I/O al secondo/GiB) | 100~160000 | No | 500 |
DiskMBpsReadWrite | Capacità di velocità effettiva del disco UltraSSD o SSD Premium v2(minimo: 0,032/GiB) | 1~2000 | No | 100 |
LogicalSectorSize | Dimensioni del settore logico in byte per il disco Ultra. I valori supportati sono 512 e 4096. 4096 è il valore predefinito. | 512 , 4096 |
No | 4096 |
tag | Tag del disco di Azure | Formato tag: key1=val1,key2=val2 |
No | "" |
diskEncryptionSetID | ResourceId del set di crittografia dischi da usare per l'abilitazione della crittografia dei dati inattivi | Formato: /subscriptions/{subs-id}/resourceGroups/{rg-name}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSet-name} |
No | "" |
diskEncryptionType | Tipo di crittografia del set di crittografia dischi. | EncryptionAtRestWithCustomerKey (per impostazione predefinita), EncryptionAtRestWithPlatformAndCustomerKeys |
No | "" |
writeAcceleratorEnabled | Acceleratore di scrittura in Dischi di Azure | true , false |
No | "" |
networkAccessPolicy | Proprietà NetworkAccessPolicy per impedire la generazione dell'URI di firma di accesso condiviso per un disco o uno snapshot | AllowAll , DenyAll , AllowPrivate |
No | AllowAll |
diskAccessID | ID risorsa di Azure della risorsa DiskAccess per l'uso di endpoint privati nei dischi | No | `` | |
enableBursting | Abilitare il bursting su richiesta oltre a soglia di prestazioni di cui è stato effettuato il provisioning del disco. Il bursting su richiesta deve essere applicato solo al disco Premium e quando le dimensioni del disco sono > 512 GB. Il disco Ultra e condiviso non è supportato. Il bursting è disabilitato per impostazione predefinita. | true , false |
No | false |
userAgent | Agente utente usato per l'attribuzione dell'utilizzo dei clienti | No | Useragent generato formattato driverName/driverVersion compiler/version (OS-ARCH) |
|
subscriptionid | Specificare l'ID sottoscrizione di Azure in cui vengono creati i dischi di Azure. | ID sottoscrizione di Azure | No | Se non è vuoto, resourceGroup deve essere specificato. |
--- | I parametri seguenti sono solo per v2 | --- | --- | --- |
maxShares | Numero totale di montaggi del disco condiviso consentiti per il disco. L'impostazione del valore su 2 o su un valore superiore abilita le repliche degli allegati. | I valori supportati dipendono dalle dimensioni del disco. Vedere Condividere un disco gestito di Azure per i valori supportati. | No | 1 |
maxMountReplicaCount | Numero di allegati di repliche da gestire. | Questo valore deve essere compreso nell'intervallo [0..(maxShares - 1)] |
No | Se accessMode è ReadWriteMany , il valore predefinito è 0 . In caso contrario, il valore predefinito è maxShares - 1 |
Classi di archiviazione predefinite
Le classi di archiviazione definiscono il modo in cui un'unità di archiviazione viene creata dinamicamente con un volume permanente. Per altre informazioni sulle classi di archiviazione Kubernetes, vedere le classi di archiviazione Kubernetes.
Ogni cluster del servizio Azure Kubernetes include quattro classi di archiviazione predefinite, due delle quali configurate per l'uso con Dischi di Azure:
- La classe di archiviazione predefinita effettua il provisioning di un disco SSD di Azure standard.
- Le unità SSD Standard supportano l'Archiviazione Standard e offrono un'archiviazione conveniente pur fornendo prestazioni affidabili.
- La classe di archiviazione managed-csi-premium effettua il provisioning di un disco di Azure Premium.
- I dischi a bassa latenza e ad alte prestazioni basati su unità SSD supportano i dischi Premium. Sono ideali per le macchine virtuali che eseguono carichi di lavoro di produzione. Quando si usa il driver CSI del disco di Azure nel servizio Azure Kubernetes, è anche possibile usare la classe di archiviazione
managed-csi
, supportata dall'archiviazione con ridondanza locale di SSD Standard.
- I dischi a bassa latenza e ad alte prestazioni basati su unità SSD supportano i dischi Premium. Sono ideali per le macchine virtuali che eseguono carichi di lavoro di produzione. Quando si usa il driver CSI del disco di Azure nel servizio Azure Kubernetes, è anche possibile usare la classe di archiviazione
- A partire dalla versione 1.29 di Kubernetes, quando si distribuiscono cluster del servizio Azure Kubernetes in più zone di disponibilità, il servizio Azure Kubernetes ora usa l'archiviazione con ridondanza della zona (ZRS) per creare dischi gestiti all'interno di classi di archiviazione predefinite.
- L'archiviazione con ridondanza della zona garantisce la replica sincrona dei dischi gestiti di Azure in più zone di disponibilità di Azure nell'area scelta. Questa strategia di ridondanza migliora la resilienza delle applicazioni e protegge i dati dagli errori del data center.
- Tuttavia, è importante notare che l'archiviazione con ridondanza della zona (ZRS) comporta un costo più elevato rispetto all'archiviazione con ridondanza locale. Se l'ottimizzazione dei costi è una priorità, è possibile creare una nuova classe di archiviazione con il parametro nome SKU LRS e usarla nell'attestazione del volume permanente.
La riduzione delle dimensioni di un PVC non è supportata a causa del rischio di perdita di dati. È possibile modificare una classe di archiviazione esistente usando il comando kubectl edit sc
oppure è possibile creare una classe di archiviazione personalizzata. Ad esempio, se si vuole usare un disco di dimensioni pari a 4 TiB, è necessario creare una classe di archiviazione che definisce cachingmode: None
perché la memorizzazione nella cache del disco non è supportata per i dischi da 4 TiB e di dimensioni maggiori. Per altre informazioni sulle classi di archiviazione e sulla creazione di una classe di archiviazione personalizzata, vedere Opzioni di archiviazione per le applicazioni nel servizio Azure Kubernetes.
È possibile visualizzare le classi di archiviazione predefinite usando il comando kubectl get sc
. L'esempio seguente illustra le classi di archiviazione predefinite disponibili all'interno di un cluster del servizio Azure Kubernetes:
kubectl get sc
L'output del comando è simile all'esempio seguente:
NAME PROVISIONER AGE
default (default) disk.csi.azure.com 1h
managed-csi disk.csi.azure.com 1h
Nota
Le attestazioni di volumi permanenti sono specificate in GiB, ma i dischi gestiti di Azure vengono fatturati in base al codice SKU per una dimensione specifica. Questi SKU spaziano da 32 GiB per i dischi S4 o P4 a 32 TiB per i dischi S80 o P80 (in anteprima). La velocità effettiva e le prestazioni delle operazioni di I/O al secondo per un disco gestito Premium dipendono sia dallo SKU sia dalla dimensione dell'istanza dei nodi nel cluster servizio Azure Kubernetes. Per altre informazioni, vedere Prezzi e prestazioni dei dischi gestiti.
Creare un'attestazione di volume permanente
Un'attestazione di volume permanente effettua automaticamente il provisioning dell'archiviazione in base a una classe di archiviazione. In questo caso un'attestazione di volume permanente può usare una delle classi di archiviazione predefinite per creare un disco gestito di Azure Standard o Premium.
Creare un file denominato
azure-pvc.yaml
e copiarlo nel manifesto seguente. L'attestazione richiede un disco denominatoazure-managed-disk
di 5 GB con accesso ReadWriteOnce. Come classe di archiviazione è specificata managed-csi.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azure-managed-disk spec: accessModes: - ReadWriteOnce storageClassName: managed-csi resources: requests: storage: 5Gi
Suggerimento
Per creare un disco con archiviazione Premium, usare storageClassName: managed-csi-premium
anziché managed-csi.
Creare l'attestazione di volume permanente usando il comando
kubectl apply
e specificare il file azure-pvc.yaml.kubectl apply -f azure-pvc.yaml
L'output del comando è simile all'esempio seguente:
persistentvolumeclaim/azure-managed-disk created
Usare il volume permanente
Dopo aver creato l'attestazione di volume permanente, è necessario verificare che abbia lo stato Pending
. Lo stato Pending
indica che è pronta per essere usata da un pod.
Verificare lo stato dell'attestazione di volume permanente usando il comando
kubectl describe pvc
.kubectl describe pvc azure-managed-disk
L'output del comando è simile all'esempio condensato seguente:
Name: azure-managed-disk Namespace: default StorageClass: managed-csi Status: Pending [...]
Creare un file denominato
azure-pvc-disk.yaml
e copiarlo nel manifesto seguente. Questo manifesto crea un pod NGINX di base che usa l'attestazione di volume permanente denominata azure-managed-disk per montare il disco di Azure nel percorso/mnt/azure
. Per i contenitori Windows Server specificare un valore per mountPath usando la convenzione di percorso di Windows, ad esempio 'D:'.kind: Pod apiVersion: v1 metadata: name: mypod spec: containers: - name: mypod image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - mountPath: "/mnt/azure" name: volume readOnly: false volumes: - name: volume persistentVolumeClaim: claimName: azure-managed-disk
Creare il pod usando il comando
kubectl apply
.kubectl apply -f azure-pvc-disk.yaml
L'output del comando è simile all'esempio seguente:
pod/mypod created
A questo punto è disponibile un pod in esecuzione con il disco di Azure montato nella directory
/mnt/azure
. Controllare la configurazione del pod usando il comandokubectl describe
.kubectl describe pod mypod
L'output del comando è simile all'esempio seguente:
[...] Volumes: volume: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: azure-managed-disk ReadOnly: false default-token-smm2n: Type: Secret (a volume populated by a Secret) SecretName: default-token-smm2n Optional: false [...] Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 2m default-scheduler Successfully assigned mypod to aks-nodepool1-79590246-0 Normal SuccessfulMountVolume 2m kubelet, aks-nodepool1-79590246-0 MountVolume.SetUp succeeded for volume "default-token-smm2n" Normal SuccessfulMountVolume 1m kubelet, aks-nodepool1-79590246-0 MountVolume.SetUp succeeded for volume "pvc-faf0f176-8b8d-11e8-923b-deb28c58d242" [...]
Usare Dischi Ultra di Azure
Per usare il disco Ultra di Azure, vedere Usare dischi Ultra nel servizio Azure Kubernetes.
Uso dei tag di Azure
Per altre informazioni sull'uso dei tag di Azure, vedere Usare i tag di Azure nel servizio Azure Kubernetes.
Effettuare il provisioning statico di un volume
Questa sezione fornisce indicazioni per gli amministratori dei cluster che desiderano creare uno o più volumi persistenti che includono dettagli di dischi di Azure per l'uso da parte di un carico di lavoro.
Parametri di provisioning statico per un volume persistente
La tabella seguente include i parametri che possono essere utilizzati per definire un volume permanente.
Nome | Significato | Valore disponibile | Obbligatorio | Default value |
---|---|---|---|---|
volumeHandle | URI del disco di Azure | /subscriptions/{sub-id}/resourcegroups/{group-name}/providers/microsoft.compute/disks/{disk-id} |
Sì | N/D |
volumeAttributes.fsType | Tipo di file system | ext4 , ext3 , ext2 , xfs , btrfs per Linux, ntfs per Windows |
No | ext4 per Linux, ntfs per Windows |
volumeAttributes.partition | Numero di partizione del disco esistente (supportato solo in Linux) | 1 , 2 , 3 |
No | Vuoto (nessuna partizione) Assicurarsi che il formato della partizione sia simile a -part1 |
volumeAttributes.cachingMode | Impostazione della cache dell'host del disco | None , ReadOnly , ReadWrite |
No | ReadOnly |
Creare un disco di Azure
Quando si crea un disco di Azure da usare con il servizio Azure Kubernetes, è possibile creare la risorsa disco nel gruppo di risorse del nodo. Questo approccio consente al cluster del servizio Azure Kubernetes di accedere e gestire la risorsa disco. Se invece si crea il disco in un gruppo di risorse separato, è necessario concedere all'identità gestita del servizio Azure Kubernetes per il cluster il ruolo Contributor
nel gruppo di risorse del disco.
Individuare il nome del gruppo di risorse usando il comando
az aks show
e aggiungere il parametro--query nodeResourceGroup
.az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
L'output del comando è simile all'esempio seguente:
MC_myResourceGroup_myAKSCluster_eastus
Creare un disco usando il comando
az disk create
. Specificare il nome del gruppo di risorse del nodo e un nome per la risorsa disco, ad esempio myAKSDisk. L'esempio seguente crea un disco da 20 GiB e restituisce l'ID del disco dopo la creazione. Se è necessario creare un disco da usare con i contenitori di Windows Server, aggiungere il parametro--os-type windows
per formattare correttamente il disco.az disk create \ --resource-group MC_myResourceGroup_myAKSCluster_eastus \ --name myAKSDisk \ --size-gb 20 \ --query id --output tsv
Nota
I dischi di Azure vengono fatturati per SKU in base alle dimensioni specifiche. Questi SKU spaziano da 32 GiB per i dischi S4 o P4 a 32 TiB per i dischi S80 o P80 (in anteprima). La velocità effettiva e le prestazioni delle operazioni di I/O al secondo per un disco gestito Premium dipendono sia dallo SKU sia dalla dimensione dell'istanza dei nodi nel cluster del servizio Azure Kubernetes. Vedere Prezzi per Managed Disks.
L'ID risorsa del disco viene visualizzato dopo aver completato correttamente il comando, come illustrato nell'output di esempio seguente. L'ID del disco viene usato per montare il disco nella sezione successiva.
/subscriptions/<subscriptionID>/resourceGroups/MC_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk
Montare il disco come volume
Creare un file pv-azuredisk.yaml con PersistentVolume. Aggiornare
volumeHandle
con l'ID della risorsa del disco del passaggio precedente. Per i contenitori di Windows Server, specificare ntfs per il parametro fsType.apiVersion: v1 kind: PersistentVolume metadata: annotations: pv.kubernetes.io/provisioned-by: disk.csi.azure.com name: pv-azuredisk spec: capacity: storage: 20Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: managed-csi csi: driver: disk.csi.azure.com volumeHandle: /subscriptions/<subscriptionID>/resourceGroups/MC_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk volumeAttributes: fsType: ext4
Creare un file pvc-azuredisk.yaml con PersistentVolumeClaim che usa PersistentVolume.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-azuredisk spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi volumeName: pv-azuredisk storageClassName: managed-csi
Creare PersistentVolume e PersistentVolumeClaim usando il comando
kubectl apply
e fare riferimento ai due file YAML creati.kubectl apply -f pv-azuredisk.yaml kubectl apply -f pvc-azuredisk.yaml
Verificare che PersistentVolumeClaim sia stato creato e associato a PersistentVolume usando il comando
kubectl get pvc
.kubectl get pvc pvc-azuredisk
L'output del comando è simile all'esempio seguente:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-azuredisk Bound pv-azuredisk 20Gi RWO 5s
Creare un file azure-disk-pod.yaml per fare riferimento a PersistentVolumeClaim. Per i contenitori Windows Server specificare un valore per mountPath usando la convenzione di percorso di Windows, ad esempio 'D:'.
apiVersion: v1 kind: Pod metadata: name: mypod spec: nodeSelector: kubernetes.io/os: linux containers: - image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine name: mypod resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - name: azure mountPath: /mnt/azure volumes: - name: azure persistentVolumeClaim: claimName: pvc-azuredisk
Applicare la configurazione e montare il volume usando il comando
kubectl apply
.kubectl apply -f azure-disk-pod.yaml
Pulire le risorse
Quando le risorse create in questo articolo non sono più necessarie, è possibile rimuoverle usando il comando kubectl delete
.
# Remove the pod
kubectl delete -f azure-pvc-disk.yaml
# Remove the persistent volume claim
kubectl delete -f azure-pvc.yaml
Passaggi successivi
- Per informazioni su come usare il driver CSI per l'archiviazione di Dischi di Azure, vedere Usare l'archiviazione di Dischi di Azure con il driver CSI.
- Per le procedure consigliate associate, vedere Procedure consigliate per archiviazione e backup nel servizio Azure Kubernetes.
Azure Kubernetes Service