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
    

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 PersistentVolumes 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 de l’hôte du disque de données Azure 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 :

  1. 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.
  2. 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.

La réduction de la taille d’un PVC est non 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 (ou « PVC », pour « Persistent Volume Claim ») 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.

  1. 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.

  1. 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.

  1. 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
    [...]
    
  2. 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
    
  3. 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
    
  4. 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 commande kubectl 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.

  1. 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
    
  2. 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

  1. 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
    
  2. 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
    
  3. 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
    
  4. 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
    
  5. 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
    
  6. 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