Utiliser des disques Azure Ultra sur Azure Kubernetes Service

Les disques Ultra Azure permettent un stockage de disque à haut débit avec un nombre élevé d’IOPS et une faible latence homogène pour vos applications avec état. Entre autres avantages, les disques Ultra permettent de changer dynamiquement les performances des disques SSD en fonction de vos charges de travail, sans devoir redémarrer vos nœuds d’agent. Les disques Ultra sont adaptés aux charges de travail à forte intensité de données.

Cet article explique comment configurer un cluster AKS (nouveau ou existant) pour l’utilisation de disques Ultra Azure.

Avant de commencer

Cette fonctionnalité ne peut être définie qu’au moment de la création du cluster ou à la création d’un pool de nœuds.

Limites

  • Les disques Ultra Azure requièrent des pools de nœuds déployés dans des zones de disponibilité et des régions qui prennent en charge ces disques, tout en n’étant uniquement pris en charge que par des séries de machines virtuelles spécifiques. Pour plus d’informations, consultez le tableau correspondant sous la section Limitations des disques Ultra.
  • Les disques Ultra ne peuvent pas être utilisés avec certaines fonctionnalités, telles que les groupes à haute disponibilité ou Azure Disk Encryption. Examinez les limitations des disques Ultra pour obtenir les informations les plus récentes.

Créer un cluster qui peut utiliser des disques Ultra

Créez un cluster AKS capable d’exploiter des disques Azure Ultra à l’aide des commandes CLI suivantes. Utilisez le paramètre --enable-ultra-ssd pour définir la fonctionnalité EnableUltraSSD.

az aks create -g MyResourceGroup -n myAKSCluster -l westus2 --node-vm-size Standard_D2s_v3 --zones 1 2 --node-count 2 --enable-ultra-ssd

Si vous souhaitez créer un cluster sans prise en charge des disques Ultra, omettez le paramètre --enable-ultra-ssd.

Activer les disques Ultra sur un cluster existant

Vous pouvez activer les disques Ultra sur un cluster existant en ajoutant un nouveau pool de nœuds à votre cluster qui prend en charge les disques Ultra. Configurez un nouveau pool de nœuds pour utiliser des disques Ultra à l’aide du paramètre --enable-ultra-ssd avec la commande az aks nodepool add.

Si vous souhaitez créer de nouveaux pools de nœuds sans prise en charge des disques Ultra, exécutez le paramètre --enable-ultra-ssd.

Utiliser des disques Ultra de manière dynamique avec une classe de stockage

Pour utiliser des disques Ultra dans nos déploiements ou StatefulSets, vous pouvez utiliser une classe de stockage pour l’approvisionnement dynamique.

Créer la classe de stockage

Une classe de stockage permet de définir 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. Dans cet exemple, nous créons une classe de stockage qui fait référence à des disques Ultra.

  1. Créez un fichier nommé azure-ultra-disk-sc.yaml et copiez-y le manifeste suivant :

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: ultra-disk-sc
    provisioner: disk.csi.azure.com # replace with "kubernetes.io/azure-disk" if aks version is less than 1.21
    volumeBindingMode: WaitForFirstConsumer # optional, but recommended if you want to wait until the pod that will use this disk is created 
    parameters:
      skuname: UltraSSD_LRS
      kind: managed
      cachingMode: None
      diskIopsReadWrite: "2000"  # minimum value: 2 IOPS/GiB 
      diskMbpsReadWrite: "320"   # minimum value: 0.032/GiB
    
  2. Créez la classe de stockage à l’aide de la commande kubectl apply et spécifiez votre fichier azure-ultra-disk-sc.yaml.

    kubectl apply -f azure-ultra-disk-sc.yaml
    

    Votre sortie doit ressembler à l’exemple suivant :

    storageclass.storage.k8s.io/ultra-disk-sc created
    

Créer une revendication de volume persistant

Une revendication de volume persistant (PVC) est utilisée pour configurer automatiquement le stockage basé sur une classe de stockage. Dans ce cas, un PVC peut utiliser la classe de stockage créée précédemment pour créer un disque ultra.

  1. Créez un fichier nommé azure-ultra-disk-pvc.yaml et copiez-y le manifeste suivant :

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ultra-disk
    spec:
      accessModes:
     - ReadWriteOnce
      storageClassName: ultra-disk-sc
      resources:
        requests:
          storage: 1000Gi
    

    La revendication demande un disque nommé ultra-disk, d’une taille de 1 000 Go avec un accès ReadWriteOnce. La classe de stockage ultra-disk-sc est spécifiée en tant que classe de stockage.

  2. Créez la revendication de volume persistant avec la commande kubectl apply et spécifiez votre fichier azure-ultra-disk-pvc.yaml.

    kubectl apply -f azure-ultra-disk-pvc.yaml
    

    Votre sortie doit ressembler à l’exemple suivant :

    persistentvolumeclaim/ultra-disk created
    

Utiliser le volume persistant

Une fois la revendication de volume persistant créée, et le disque provisionné convenablement, un pod peut être créé avec un accès au disque. Le manifeste suivant crée un pod NGINX de base qui utilise la revendication de volume persistant nommé ultra-disk pour monter le disque Azure à l’emplacement /mnt/azure.

  1. Créez un fichier nommé nginx-ultra.yaml et copiez-y le manifeste suivant :

    kind: Pod
    apiVersion: v1
    metadata:
      name: nginx-ultra
    spec:
      containers:
     - name: nginx-ultra
        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
      volumes:
        - name: volume
          persistentVolumeClaim:
            claimName: ultra-disk
    
  2. Créez le pod à l’aide de la commande kubectl apply et spécifiez votre fichier nginx-ultra.yaml.

    kubectl apply -f nginx-ultra.yaml
    

    Votre sortie doit ressembler à l’exemple suivant :

    pod/nginx-ultra created
    

    Vous disposez maintenant d’un pod en cours d’exécution avec le disque Azure monté dans le répertoire /mnt/azure.

  3. Consultez les détails de votre configuration à l’aide de la commande kubectl describe pod et spécifiez votre fichier nginx-ultra.yaml.

    kubectl describe pod nginx-ultra
    

    Votre sortie doit ressembler à 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"
    [...]
    

Étapes suivantes