Créer et utiliser un volume avec des disques Azure dans Azure Kubernetes Service (AKS)
Un volume persistant représente un élément de stockage approvisionné pour une utilisation dans des pods Kubernetes. Vous pouvez utiliser un volume persistant avec un ou plusieurs pods et l’approvisionner de façon statique ou dynamique. Cet article décrit comment créer dynamiquement des volumes persistants avec des disques Azure dans un cluster Azure Kubernetes Service (AKS).
Notes
Un disque Azure ne peut être qu’avec le type de Mode d’accèsReadWriteOnce, qui le rend disponible pour un seul nœud dans AKS. Ce mode d’accès permet toujours à plusieurs pods d’accéder au volume lorsque les pods s’exécutent sur le même nœud. Pour plus d’informations, consultez Modes d’accès PersistantVolume pour Kubernetes.
Cet article vous montre comment :
- Utilisez un volume persistant dynamique en installant le pilote CSI (Container Storage Interface) et en créant dynamiquement un ou plusieurs disques managés Azure à attacher à un pod.
- Utilisez un volume persistant statique en créant un ou plusieurs disques managés Azure, ou utilisez un disque existant et attachez-le à un pod.
Pour plus d’informations sur les volumes Kubernetes, consultez Options de stockage pour les applications dans AKS.
Avant de commencer
Vérifiez qu’Azure CLI version 2.0.59 ou ultérieure est installé et configuré. Exécutez
az --version
pour trouver la version. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI.Le pilote CSI de disque Azure a une limite de volume par nœud. Le nombre de volumes change en fonction de la taille du nœud/pool de nœuds. Exécutez la commande kubectl get pour déterminer le nombre de volumes qui peuvent être alloués par nœud :
kubectl get CSINode <nodename> -o yaml
Si la limite de volume par nœud est un problème pour votre charge de travail, envisagez d’utiliser stockage de conteneurs Azure pour les volumes persistants au lieu des pilotes CSI.
Provisionner un volume de manière dynamique
Cette section fournit des conseils aux administrateurs de clusters qui veulent provisionner un ou plusieurs volumes persistants qui incluent des détails sur le stockage sur disque Azure utilisé par une charge de travail. Une revendication de volume persistant utilise l’objet de classe de stockage pour provisionner dynamiquement un conteneur de stockage sur disque Azure.
Paramètres de classe de stockage pour les volumes persistants dynamiques
Le tableau suivant contient des paramètres que vous pouvez utiliser pour définir une classe de stockage personnalisée pour votre PersistentVolumeClaim.
Nom | Signification | Valeur disponible | Obligatoire | Valeur par défaut |
---|---|---|---|---|
skuName | Type de compte de stockage de disques Azure (alias : storageAccountType ) |
Standard_LRS , Premium_LRS , StandardSSD_LRS , PremiumV2_LRS , UltraSSD_LRS , Premium_ZRS , StandardSSD_ZRS |
Non | StandardSSD_LRS |
fsType | Type de système de fichiers | ext4 , ext3 , ext2 , xfs , btrfs pour Linux, ntfs pour Windows |
Non | ext4 pour Linux, ntfs pour Windows |
cachingMode | Paramètre de cache hôte de disque de données Azure(PremiumV2_LRS et UltraSSD_LRS prennent uniquement en charge le mode de mise en cache None ) |
None , ReadOnly , ReadWrite |
Non | ReadOnly |
resourceGroup | Spécifiez le groupe de ressources pour les disques Azure. | Nom du groupe de ressources existant | Non | Si le paramètre est vide, le pilote utilise le même nom de groupe de ressources que le cluster AKS actuel. |
DiskIOPSReadWrite | Capacité d’IOPS du disque UltraSSD ou Premium SSD v2 (2 IOPS/Gio minimum) | 100 à environ 160000 | Non | 500 |
DiskMBpsReadWrite | Capacité de débit du disque UltraSSD ou Premium SSD v2 (0,032/Gio minimum) | 1 à environ 2000 | Non | 100 |
LogicalSectorSize | Taille du secteur logique en octets pour le disque Ultra. (valeurs prises en charge : 512 et 4096, par défaut 4096) | 512 , 4096 |
Non | 4096 |
tags | Étiquettes de disque Azure | Format des étiquettes : key1=val1,key2=val2 |
Non | "" |
diskEncryptionSetID | ResourceId du jeu de chiffrement de disque à utiliser pour activer le chiffrement au repos | Format : /subscriptions/{subs-id}/resourceGroups/{rg-name}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSet-name} |
Non | "" |
diskEncryptionType | Type de chiffrement du jeu de chiffrement de disque. | EncryptionAtRestWithCustomerKey (par défaut), EncryptionAtRestWithPlatformAndCustomerKeys |
Non | "" |
writeAcceleratorEnabled | Accélérateur d’écriture sur les disques Azure | true , false |
Non | "" |
networkAccessPolicy | Propriété NetworkAccessPolicy pour empêcher la génération de l’URI SAS d’un disque ou d’un instantané | AllowAll , DenyAll , AllowPrivate |
Non | AllowAll |
diskAccessID | ID de ressource Azure de la ressource DiskAccess pour utiliser des points de terminaison privés sur des disques | Non | `` | |
enableBursting | Activer le bursting à la demande au-delà de la cible de performances approvisionnée du disque. Le bursting à la demande ne doit être appliqué qu’à un disque Premium dont la taille est > à 512 Go. Le disque Ultra et le disque partagé ne sont pas pris en charge. Le bursting est désactivé par défaut. | true , false |
Non | false |
useragent | Agent utilisateur utilisé pour l’attribution de l’utilisation du client | Non | Agent utilisateur généré au format driverName/driverVersion compiler/version (OS-ARCH) |
|
subscriptionID | Spécifiez l’ID d’abonnement Azure dans lequel le disque Azure est créé. | ID d’abonnement Azure | Non | Si le paramètre n’est pas vide, resourceGroup doit être fourni. |
--- | Les paramètres suivants sont uniquement pour v2 | --- | --- | --- |
maxShares | Nombre total de montages de disques partagés autorisés pour le disque. La définition de la valeur sur 2 ou plus active des réplicas d’attachement. | Les valeurs prises en charge dépendent de la taille du disque. Pour connaître les valeurs prises en charge, consultez Partager un disque managé Azure. | Non | 1 |
maxMountReplicaCount | Nombre d’attachements de réplicas à gérer. | Cette valeur doit être comprise dans la plage [0..(maxShares - 1)] . |
Non | Si accessMode a la valeur ReadWriteMany , la valeur par défaut est 0 . Sinon, la valeur par défaut est maxShares - 1 . |
Classes de stockage intégrées
Les classes de stockage définissent la création dynamique d’une unité de stockage avec un volume persistant. Pour plus d’informations sur les classes de stockage Kubernetes, consultez Classes de stockage Kubernetes.
Chaque cluster AKS comprend 4 classes de stockage précréées, dont 2 sont configurées pour fonctionner avec des disques Azure :
- La classe de stockage par défaut approvisionne un Disque SSD Azure standard.
- Des disques SSD standard assurent le stockage standard et offrent un stockage économique tout en garantissant des performances fiables.
- La classe de stockage managed-csi-premium approvisionne un Disque Azure Premium.
- Des disques SSD à faible latence et hautes performances soutiennent les disques Premium. Cela convient parfaitement aux machines virtuelles exécutant des charges de travail de production. Lorsque vous utilisez le pilote CSI de disque Azure sur AKS, vous pouvez également utiliser la classe de stockage
managed-csi
, qui repose sur le stockage localement redondant (LRS) SSD Standard.
- Des disques SSD à faible latence et hautes performances soutiennent les disques Premium. Cela convient parfaitement aux machines virtuelles exécutant des charges de travail de production. Lorsque vous utilisez le pilote CSI de disque Azure sur AKS, vous pouvez également utiliser la classe de stockage
- À compter de Kubernetes version 1.29, quand vous déployez des clusters Azure Kubernetes Service (AKS) sur plusieurs zones de disponibilité, AKS utilise désormais le stockage redondant interzone (ZRS) pour créer des disques managés dans des classes de stockage intégrées.
- ZRS garantit la réplication synchrone de vos disques managés Azure sur plusieurs zones de disponibilité Azure dans la région de votre choix. Cette stratégie de redondance renforce la résilience de vos applications et protège vos données contre les défaillances du centre de données.
- Toutefois, il est important de noter que le stockage redondant interzone (ZRS) est plus coûteux que le stockage localement redondant (LRS). Si l’optimisation des coûts est une priorité, vous pouvez créer une classe de stockage avec le paramètre de nom de référence SKU LRS et l’utiliser dans votre revendication de volume persistant.
La réduction de la taille d’un PVC n’est pas prise en charge à cause du risque de perte de données. Vous pouvez modifier une classe de stockage existante à l’aide de la commande kubectl edit sc
ou créer votre propre classe de stockage personnalisée. Par exemple, si vous souhaitez utiliser un disque de taille 4 Tio, vous devez créer une classe de stockage qui définit cachingmode: None
, car la mise en cache de disque n’est pas prise en charge pour les disques de 4 Tio ou plus. Pour plus d’informations sur les classes de stockage et la création de votre propre classe de stockage, consultez Options de stockage pour les applications dans AKS.
Vous pouvez consulter les classes de stockage précréées à l’aide de la commande kubectl get sc
. L’exemple suivant montre les classes de stockage précréées disponibles au sein d’un cluster AKS :
kubectl get sc
La sortie de la commande ressemble à l’exemple suivant :
NAME PROVISIONER AGE
default (default) disk.csi.azure.com 1h
managed-csi disk.csi.azure.com 1h
Notes
Les revendications de volume persistant sont spécifiées dans Gio mais les disques managés Azure sont facturés par référence SKU pour une taille spécifique. Ces références SKU vont de 32 Gio pour les disques S4 ou P4 à 32 Tio pour les disques S80 ou P80 (en préversion). Le débit et les performances d’E/S d’un disque managé Premium dépendent à la fois de la référence SKU et de la taille d’instance des nœuds dans le cluster AKS. Pour plus d’informations, consultez Tarifs et performances de disques managés.
Créer une revendication de volume persistant
Une revendication de volume persistant approvisionne automatiquement le stockage selon une classe de stockage. Dans ce cas, une PVC peut utiliser une des classes de stockage créées au préalable pour créer un disque managé Azure standard ou Premium.
Créez un fichier nommé
azure-pvc.yaml
et copiez-y le manifeste suivant. La revendication demande un disque nomméazure-managed-disk
, d’une taille de 5 Go avec un accès ReadWriteOnce. La classe de stockage managed-csi est spécifiée en tant que classe de stockage.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azure-managed-disk spec: accessModes: - ReadWriteOnce storageClassName: managed-csi resources: requests: storage: 5Gi
Conseil
Pour créer un disque qui utilise le stockage standard, préférez storageClassName: managed-csi-premium
plutôt que managed-csi.
Créez la revendication de volume persistant à l’aide de la commande
kubectl apply
, puis spécifiez votre fichier azure-pvc.yaml.kubectl apply -f azure-pvc.yaml
La sortie de la commande ressemble à l’exemple suivant :
persistentvolumeclaim/azure-managed-disk created
Utiliser le volume persistant
Après avoir créé la revendication de volume persistant, vous devez vérifier que son état est Pending
. L’état Pending
indique qu’elle est prête à être utilisée par un pod.
Vérifiez l’état de la PVC à l’aide de la commande
kubectl describe pvc
.kubectl describe pvc azure-managed-disk
La sortie de la commande ressemble à l’exemple condensé suivant :
Name: azure-managed-disk Namespace: default StorageClass: managed-csi Status: Pending [...]
Créez un fichier nommé
azure-pvc-disk.yaml
et copiez-y le manifeste suivant. Ce manifeste crée un pod NGINX de base qui utilise la revendication de volume persistant nommée azure-managed-disk pour monter le disque Azure à l’emplacement/mnt/azure
. Pour les conteneurs Windows Server, spécifiez un chemin de montage en utilisant la convention de chemin Windows, par exemple, '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
Créez le pod à l’aide de la commande
kubectl apply
.kubectl apply -f azure-pvc-disk.yaml
La sortie de la commande ressemble à l’exemple suivant :
pod/mypod created
Vous disposez maintenant d’un pod en cours d’exécution avec le Disque Azure monté dans le répertoire
/mnt/azure
. Vérifiez la configuration du pod à l’aide de la commandekubectl describe
.kubectl describe pod mypod
La sortie de la commande ressemble à l’exemple suivant :
[...] 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" [...]
Utiliser des disques Ultra Azure
Pour utiliser un disque Ultra Azure, consultez Utiliser des disques Ultra sur Azure Kubernetes Service (AKS).
Utilisation de balises Azure
Pour plus d’informations sur l’utilisation des balises Azure, consultez Utiliser des étiquettes Azure dans Azure Kubernetes Service (AKS).
Provisionner un volume de manière statique
Cette section fournit des conseils aux administrateurs de clusters souhaitant créer un ou plusieurs volumes persistants qui incluent des détails sur les disques Azure utilisés par une charge de travail.
Paramètres d’approvisionnement statique pour un volume persistant
Le tableau suivant contient des paramètres à utiliser pour définir un volume persistant.
Nom | Signification | Valeur disponible | Obligatoire | Valeur par défaut |
---|---|---|---|---|
volumeHandle | URI de disque Azure | /subscriptions/{sub-id}/resourcegroups/{group-name}/providers/microsoft.compute/disks/{disk-id} |
Oui | N/A |
volumeAttributes.fsType | Type de système de fichiers | ext4 , ext3 , ext2 , xfs , btrfs pour Linux, ntfs pour Windows |
Non | ext4 pour Linux, ntfs pour Windows |
volumeAttributes.partition | Numéro de partition du disque existant (pris en charge uniquement sur Linux) | 1 , 2 , 3 |
Non | Vide (pas de partition) : vérifiez que le format de partition est semblable à -part1 |
volumeAttributes.cachingMode | Paramètre de cache de l’hôte de disque | None , ReadOnly , ReadWrite |
Non | ReadOnly |
Créer un disque Azure
Lorsque vous créez un disque Azure pour une utilisation avec AKS, vous pouvez créer la ressource de disque sur le groupe de ressources de nœuds. Cette approche permet au cluster AKS d’accéder et de gérer la ressource de disque. Si vous créez le disque dans un groupe de ressources distinct, vous devez donner à l’identité managée Azure Kubernetes Service (AKS) de votre cluster le rôle Contributor
dans le groupe de ressources du disque.
Identifiez le nom du groupe de ressources à l’aide de la commande
az aks show
et ajoutez le paramètre--query nodeResourceGroup
.az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
La sortie de la commande ressemble à l’exemple suivant :
MC_myResourceGroup_myAKSCluster_eastus
Créez un disque à l’aide de la commande
az disk create
. Spécifiez le nom du groupe de ressources de nœuds et le nom de la ressource de disque, par exemple myAKSDisk. L’exemple suivant crée un disque de 20 Gio et génère l’ID du disque après sa création. Si vous avez besoin de créer un disque pour une utilisation avec des conteneurs Windows Server, ajoutez le paramètre--os-type windows
pour formater correctement le disque.az disk create \ --resource-group MC_myResourceGroup_myAKSCluster_eastus \ --name myAKSDisk \ --size-gb 20 \ --query id --output tsv
Notes
Les disques Azure sont facturés par référence SKU pour une taille donnée. Ces références SKU vont de 32 Gio pour les disques S4 ou P4 à 32 Tio pour les disques S80 ou P80 (en préversion). Le débit et les performances d’E/S d’un disque managé Premium dépendent à la fois de la référence SKU et de la taille d’instance des nœuds dans le cluster AKS. Consultez Tarification et performances de la fonctionnalité Disques managés.
L’ID de ressource de disque s’affiche une fois la commande complétée avec succès, comme illustré dans l’exemple de sortie suivant. Vous utilisez l’ID de disque pour monter le disque à la section suivante.
/subscriptions/<subscriptionID>/resourceGroups/MC_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk
Monter le disque en tant que volume
Créez un fichier pv-azuredisk.yaml avec un objet PersistentVolume. Mettez à jour
volumeHandle
avec l’ID de ressource de disque de l’étape précédente. Pour les conteneurs Windows Server, spécifiez ntfs pour le paramètre 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
Créez un fichier pvc-azuredisk.yaml avec un objet PersistentVolumeClaim qui utilise PersistentVolume.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-azuredisk spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi volumeName: pv-azuredisk storageClassName: managed-csi
Créez PersistentVolume et PersistentVolumeClaim à l’aide de la commande
kubectl apply
et référencez les deux fichiers YAML créés.kubectl apply -f pv-azuredisk.yaml kubectl apply -f pvc-azuredisk.yaml
Vérifiez que la revendication PersistentVolumeClaim est créée et liée à PersistentVolume à l’aide de la commande
kubectl get pvc
.kubectl get pvc pvc-azuredisk
La sortie de la commande ressemble à l’exemple suivant :
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-azuredisk Bound pv-azuredisk 20Gi RWO 5s
Créez un fichier azure-disk-pod.yaml pour référencer votre PersistentVolumeClaim. Pour les conteneurs Windows Server, spécifiez un chemin de montage en utilisant la convention de chemin Windows, par exemple, '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
Appliquez la configuration et montez le volume à l’aide de la commande
kubectl apply
.kubectl apply -f azure-disk-pod.yaml
Nettoyer les ressources
Quand vous avez fini d’utiliser les ressources créées dans cet article, vous pouvez les supprimer à l’aide de la commande kubectl delete
.
# Remove the pod
kubectl delete -f azure-pvc-disk.yaml
# Remove the persistent volume claim
kubectl delete -f azure-pvc.yaml
Étapes suivantes
- Pour découvrir comment utiliser le pilote CSI pour un stockage sur disque Azure, consultez Utiliser des disques Azure avec le pilote CSI.
- Pour connaître les meilleures pratiques associées, consultez Meilleures pratiques relatives au stockage et aux sauvegardes dans Azure Kubernetes Service (AKS).
Azure Kubernetes Service