Partager via


Utiliser Azure Container Storage avec NVMe local

Azure Container Storage est un service cloud de gestion, de déploiement et d’orchestration de volumes conçu de manière native pour les conteneurs. Cet article explique comment configurer Azure Container Storage pour utiliser un disque éphémère avec NVMe local comme stockage back-end vos charges de travail Kubernetes. À la fin, vous aurez un pod qui utilise NVMe local pour son stockage.

Qu’est-ce qu’un disque éphémère ?

Lorsque votre application a besoin d’une latence de stockage inférieure à une milliseconde mais pas d’une durabilité des données, vous pouvez utiliser un disque éphémère avec Azure Container Storage pour répondre à vos besoins de performances. « Éphémère » signifie que les disques sont déployés sur la machine virtuelle locale (VM) hébergeant le cluster AKS, et pas enregistrés dans un service de stockage Azure. Si vous arrêtez ou désaffectez votre machine virtuelle, les données seront perdues sur ces disques.

Deux types de disque éphémère sont disponibles : NVMe local et SSD temporaire. NVMe est conçu pour le transfert de données à grande vitesse entre le stockage et le processeur. Choisissez NVMe lorsque votre application a besoin d’IOPS ou de débit plus élevé que le disque SSD temporaire, ou nécessite davantage d’espace de stockage. Sachez que Stockage de conteneurs Azure prend uniquement en charge la réplication de données synchrone pour NVMe local.

En raison de la nature éphémère de ces disques, Stockage de conteneurs Azure prend en charge l’utilisation de volumes éphémères génériques par défaut lors de l’utilisation d’un disque éphémère. Toutefois, certains cas d’usage peuvent nécessiter des volumes persistants même si les données ne sont pas durables. C’est le cas par exemple si vous souhaitez utiliser des fichiers YAML existants ou des modèles de déploiement codés en dur pour utiliser des volumes persistants, et que votre charge de travail prend en charge la réplication au niveau de l’application à des fins de durabilité. Dans ces cas-là, vous pouvez mettre à jour votre installation Stockage de conteneurs Azure et ajouter l’annotation acstor.azure.com/accept-ephemeral-storage=true dans votre définition de revendication de volume persistant pour prendre en charge la création de volumes persistants à partir de pools de stockage sur disque éphémère.

Prérequis

  • Si vous n’avez pas d’abonnement Azure, créez un compte gratuit avant de commencer.

  • Cet article nécessite la dernière version (2.35.0 ou ultérieure) de l’interface Azure CLI. Consultez Comment installer l’interface Azure CLI. Si vous utilisez l’environnement Bash dans Azure Cloud Shell, la version la plus récente est déjà installée. Si vous prévoyez d’exécuter les commandes localement et non dans Azure Cloud Shell, veillez à le faire avec des privilèges Administrateur. Pour obtenir plus d’informations, consultez Démarrage d’Azure Cloud Shell.

  • Vous aurez besoin du client de ligne de commande Kubernetes, kubectl. Si vous utilisez Azure Cloud Shell, il est déjà installé ; vous pouvez aussi l’installer localement en exécutant la commande az aks install-cli.

  • Si vous n’avez pas encore installé Azure Container Storage, suivez les instructions dans Utiliser Azure Container Storage avec Azure Kubernetes Service.

  • Vérifiez si votre région cible est prise en charge dans Les régions de stockage de conteneurs Azure.

Choisir un type de machine virtuelle prenant en charge NVMe local

Le disque éphémère est disponible uniquement dans certains types de machines virtuelles. Si vous envisagez d’utiliser NVMe local, une machine virtuelle à stockage optimisé comme standard_l8s_v3 est requise.

Exécuter la commande suivante pour obtenir le type de machine virtuelle utilisé avec votre pool de nœuds. Remplacez <resource group> et <cluster name> par vos propres valeurs. Vous n’avez pas besoin de fournir des valeurs pour PoolName ou VmSize. Conservez la requête comme indiqué ici.

az aks nodepool list --resource-group <resource group> --cluster-name <cluster name> --query "[].{PoolName:name, VmSize:vmSize}" -o table

Voici un exemple de sortie.

PoolName    VmSize
----------  ---------------
nodepool1   standard_l8s_v3

Il est recommandé que chaque machine virtuelle dispose au minimum de quatre processeurs virtuels (vCPU) et que chaque pool de nœuds comprenne au moins trois nœuds.

Créer et attacher des volumes éphémères génériques

Suivez ces étapes pour créer et attacher un volume éphémère générique.

1. Créer un pool de stockage

Tout d’abord, créez un pool de stockage, qui est un regroupement logique de stockage pour votre cluster Kubernetes, en le définissant dans un fichier manifeste YAML.

Si vous avez activé Azure Container Storage en utilisant les commandes az aks create ou az aks update, il est possible que vous disposiez déjà d’un pool de stockage. Utilisez kubectl get sp -n acstor pour obtenir la liste des pools de stockage. Si vous souhaitez utiliser un pool de stockage déjà disponible, vous pouvez ignorer cette section et passer à la section Afficher les classes de stockage disponibles.

Suivez ces étapes pour créer un pool de stockage à l’aide d’un NVMe local.

  1. Utilisez votre éditeur de texte favori pour créer un fichier manifeste YAML tel que code acstor-storagepool.yaml.

  2. Collez le code suivant et enregistrez le fichier. Vous pouvez choisir n’importe quelle valeur nom du pool de stockage.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: ephemeraldisk-nvme
      namespace: acstor
    spec:
      poolType:
        ephemeralDisk:
          diskType: nvme
    
  3. Appliquez le fichier manifeste YAML pour créer le pool de stockage.

    kubectl apply -f acstor-storagepool.yaml 
    

    Une fois la création du pool de stockage terminée, vous verrez un message comme suit :

    storagepool.containerstorage.azure.com/ephemeraldisk-nvme created
    

    Vous pouvez également exécuter cette commande pour vérifier l’état du pool de stockage. Remplacez <storage-pool-name> par la valeur nom de votre pool de stockage. Dans cet exemple, la valeur est ephemeraldisk-nvme.

    kubectl describe sp <storage-pool-name> -n acstor
    

Lorsque le pool de stockage est créé, Azure Container Storage crée une classe de stockage en votre nom, à l’aide de la convention d’affectation de noms acstor-<storage-pool-name>.

2. Afficher les classes de stockage disponibles

Lorsque le pool de stockage est prêt à être utilisé, vous devez sélectionner une classe de stockage pour définir la façon dont le stockage est créé dynamiquement lors de la création et du déploiement de volumes.

Exécutez kubectl get sc pour afficher les classes de stockage disponibles Vous devriez voir une classe de stockage appelée acstor-<storage-pool-name>.

$ kubectl get sc | grep "^acstor-"
acstor-azuredisk-internal   disk.csi.azure.com               Retain          WaitForFirstConsumer   true                   65m
acstor-ephemeraldisk-nvme        containerstorage.csi.azure.com   Delete          WaitForFirstConsumer   true                   2m27s

Important

N’utilisez pas la classe de stockage marquée interne. Il s’agit d’une classe de stockage interne nécessaire au fonctionnement d’Azure Container Storage.

3. Déployer un pod avec un volume éphémère générique

Créez un pod à l’aide de Fio (testeur d’E/S flexible) pour l’évaluation et la simulation de charge de travail, qui utilise un volume éphémère générique.

  1. Utilisez votre éditeur de texte favori pour créer un fichier manifeste YAML tel que code acstor-pod.yaml.

  2. Collez le code suivant et enregistrez le fichier.

    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-nvme # replace with the name of your storage class if different
                resources:
                  requests:
                    storage: 1Gi
    

    Lorsque vous modifiez la taille de stockage de vos volumes, assurez-vous que la taille est inférieure à la capacité disponible du disque éphémère d’un nœud unique. Consultez Vérifier la capacité de disque éphémère du nœud.

  3. Appliquez le fichier manifeste YAML pour déployer le pod.

    kubectl apply -f acstor-pod.yaml
    

    Vous devez obtenir une sortie similaire à la suivante :

    pod/fiopod created
    
  4. Vérifiez que le pod est en cours d’exécution et que la revendication de volume éphémère a bien été liée au pod :

    kubectl describe pod fiopod
    kubectl describe pvc fiopod-ephemeralvolume
    
  5. Vérifiez les tests Fio pour voir son état actuel :

    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
    

Vous avez maintenant déployé un pod qui utilise NVMe local pour son stockage et vous pouvez l’utiliser pour vos charges de travail Kubernetes.

Créer et attacher des volumes persistants

Pour créer un volume persistant à partir d’un pool de stockage sur disque éphémère, vous devez inclure une annotation dans vos revendications de volume persistant (PVC) en guise de protection pour vous assurer que vous comptez utiliser des volumes persistants même si les données sont éphémères. En outre, vous devez activer l’indicateur --ephemeral-disk-volume-type avec la valeur PersistentVolumeWithAnnotation sur votre cluster avant de créer vos revendications de volume persistant.

Suivez ces étapes pour créer et attacher un volume persistant.

1. Mettre à jour votre installation de Stockage de conteneurs Azure

Exécutez la commande suivante pour mettre à jour votre installation de Stockage de conteneurs Azure pour permettre la création de volumes persistants à partir de pools de stockage sur disque éphémère.

az aks update -n <cluster-name> -g <resource-group> --enable-azure-container-storage ephemeralDisk --storage-pool-option NVMe --ephemeral-disk-volume-type PersistentVolumeWithAnnotation 

2. Créer un pool de stockage

Créez un pool de stockage, qui est un regroupement logique de stockage pour votre cluster Kubernetes, en le définissant dans un fichier manifeste YAML.

Si vous avez activé Azure Container Storage en utilisant les commandes az aks create ou az aks update, il est possible que vous disposiez déjà d’un pool de stockage. Utilisez kubectl get sp -n acstor pour obtenir la liste des pools de stockage. Si vous souhaitez utiliser un pool de stockage déjà disponible, vous pouvez ignorer cette section et passer à la section Afficher les classes de stockage disponibles.

Suivez ces étapes pour créer un pool de stockage à l’aide d’un NVMe local.

  1. Utilisez votre éditeur de texte favori pour créer un fichier manifeste YAML tel que code acstor-storagepool.yaml.

  2. Collez le code suivant et enregistrez le fichier. Vous pouvez choisir n’importe quelle valeur nom du pool de stockage.

    apiVersion: containerstorage.azure.com/v1
    kind: StoragePool
    metadata:
      name: ephemeraldisk-nvme
      namespace: acstor
    spec:
      poolType:
        ephemeralDisk:
          diskType: nvme
    
  3. Appliquez le fichier manifeste YAML pour créer le pool de stockage.

    kubectl apply -f acstor-storagepool.yaml 
    

    Une fois la création du pool de stockage terminée, vous verrez un message comme suit :

    storagepool.containerstorage.azure.com/ephemeraldisk-nvme created
    

    Vous pouvez également exécuter cette commande pour vérifier l’état du pool de stockage. Remplacez <storage-pool-name> par la valeur nom de votre pool de stockage. Dans cet exemple, la valeur est ephemeraldisk-nvme.

    kubectl describe sp <storage-pool-name> -n acstor
    

Lorsque le pool de stockage est créé, Azure Container Storage crée une classe de stockage en votre nom, à l’aide de la convention d’affectation de noms acstor-<storage-pool-name>.

3. Afficher les classes de stockage disponibles

Lorsque le pool de stockage est prêt à être utilisé, vous devez sélectionner une classe de stockage pour définir la façon dont le stockage est créé dynamiquement lors de la création et du déploiement de volumes.

Exécutez kubectl get sc pour afficher les classes de stockage disponibles Vous devriez voir une classe de stockage appelée acstor-<storage-pool-name>.

$ kubectl get sc | grep "^acstor-"
acstor-azuredisk-internal   disk.csi.azure.com               Retain          WaitForFirstConsumer   true                   65m
acstor-ephemeraldisk-nvme        containerstorage.csi.azure.com   Delete          WaitForFirstConsumer   true                   2m27s

Important

N’utilisez pas la classe de stockage marquée interne. Il s’agit d’une classe de stockage interne nécessaire au fonctionnement d’Azure Container Storage.

4. Créer une revendication de volume persistant

Une revendication de volume persistant est utilisée pour approvisionner automatiquement le stockage basé sur une classe de stockage. Suivez ces étapes pour créer une revendication de volume persistant à l’aide de la nouvelle classe de stockage.

  1. Utilisez votre éditeur de texte favori pour créer un fichier manifeste YAML tel que code acstor-pvc.yaml.

  2. Collez le code suivant et enregistrez le fichier. Vous pouvez choisir n’importe quelle valeur name de la revendication de volume persistant.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: ephemeralpvc
      annotations:
        acstor.azure.com/accept-ephemeral-storage: "true"
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: acstor-ephemeraldisk-nvme # replace with the name of your storage class if different
      resources:
        requests:
          storage: 100Gi
    

    Lorsque vous modifiez la taille de stockage de vos volumes, assurez-vous que la taille est inférieure à la capacité disponible du disque éphémère d’un nœud unique. Consultez Vérifier la capacité de disque éphémère du nœud.

  3. Appliquez le fichier manifeste YAML pour créer la revendication de volume persistant.

    kubectl apply -f acstor-pvc.yaml
    

    La sortie doit ressembler à celle-ci :

    persistentvolumeclaim/ephemeralpvc created
    

    Vous pouvez vérifier l’état de la revendication de volume persistant en exécutant la commande suivante :

    kubectl describe pvc ephemeralpvc
    

Une fois la revendication de volume persistant créée, elle peut être utilisée par un pod.

5. Déployer un pod et attacher un volume persistant

Créez un pod à l’aide de Fio (testeur d’E/S flexible) pour l’évaluation et la simulation de charge de travail, puis spécifiez un chemin de montage pour le volume persistant. Pour nomRevendication, utilisez la valeur nom que vous avez utilisée lors de la création de la revendication de volume persistant.

  1. Utilisez votre éditeur de texte favori pour créer un fichier manifeste YAML tel que code acstor-pod.yaml.

  2. Collez le code suivant et enregistrez le fichier.

    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
    
  3. Appliquez le fichier manifeste YAML pour déployer le pod.

    kubectl apply -f acstor-pod.yaml
    

    Vous devez obtenir une sortie similaire à la suivante :

    pod/fiopod created
    
  4. Vérifiez que le pod est en cours d’exécution et que la revendication de volume persistant a bien été liée au pod :

    kubectl describe pod fiopod
    kubectl describe pvc ephemeralpvc
    
  5. Vérifiez les tests Fio pour voir son état actuel :

    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
    

Vous avez maintenant déployé un pod qui utilise NVMe local et vous pouvez l’utiliser pour vos charges de travail Kubernetes.

Gérer des volumes et des pools de stockage

Dans cette section, vous apprenez à vérifier la capacité disponible de disque éphémère pour un seul nœud, à développer ou supprimer un pool de stockage et à optimiser les performances.

Vérifier la capacité de disque éphémère du nœud

Un volume éphémère est alloué sur un seul nœud. Lorsque vous modifiez la taille de vos volumes éphémères, la taille doit être inférieure à la capacité disponible du disque éphémère du nœud unique.

Exécutez la commande suivante pour vérifier la capacité disponible du disque éphémère pour un seul nœud.

$ kubectl get diskpool -n acstor
NAME                                CAPACITY      AVAILABLE     USED        RESERVED    READY   AGE
ephemeraldisk-nvme-diskpool-jaxwb   75660001280   75031990272   628011008   560902144   True    21h
ephemeraldisk-nvme-diskpool-wzixx   75660001280   75031990272   628011008   560902144   True    21h
ephemeraldisk-nvme-diskpool-xbtlj   75660001280   75031990272   628011008   560902144   True    21h

Dans cet exemple, la capacité disponible du disque éphémère pour un nœud unique est de 75031990272 octets ou 69 Gio.

Développer un pool de stockage

Vous pouvez développer des pools de stockage sauvegardés par NVMe local pour effectuer un scale-up rapide et sans temps d’arrêt. La réduction des pools de stockage n’est actuellement pas prise en charge.

Étant donné qu’un pool de stockage sauvegardé par un disque éphémère utilise des ressources de stockage local sur les nœuds de cluster AKS (machines virtuelles), le développement du pool de stockage nécessite l’ajout d’un autre nœud au cluster. Suivez ces instructions pour développer le pool de stockage.

  1. Exécutez la commande suivante pour ajouter un nouveau nœud au cluster AKS. Remplacez <cluster-name>, <nodepool name> et <resource-group-name> par vos propres valeurs. Pour obtenir le nom de votre pool de nœuds, exécutez kubectl 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
    
  2. Exécutez kubectl get nodes et vous verrez qu’un nœud a été ajouté au cluster.

  3. Exécutez kubectl get sp -A et vous verrez en principe que la capacité du pool de stockage a augmenté.

Supprimer un pool de stockage

Si vous souhaitez supprimer un pool de stockage, exécutez la commande suivante. Remplacez <storage-pool-name> par le nom du pool de stockage.

kubectl delete sp -n acstor <storage-pool-name>

Optimiser les performances lors de l’utilisation de NVMe local

Selon les besoins de votre charge de travail en matière de performances, vous pouvez choisir parmi trois niveaux différents : De base, Standard et Premium. Votre sélection aura un impact sur le nombre de processeurs virtuels consommés par les composants de Stockage de conteneurs Azure dans les nœuds où il est installé. Standard est la configuration par défaut si vous ne mettez pas à jour le niveau de performance.

Ces trois niveaux offrent une gamme de différentes IOPS. Le tableau suivant contient de l’aide sur ce que vous pouvez attendre avec chacun de ces niveaux. Nous avons utilisé FIO, un outil d’évaluation courant, pour obtenir ces chiffres avec la configuration suivante :

  • AKS : Référence SKU du nœud – Standard_L16s_v3
  • FIO : Taille de bloc – 4 Ko ; Profondeur de la file d’attente – 32 ; Numjobs : nombre de cœurs affectés aux composants de Stockage de conteneurs ; Modèle d’accès – aléatoire ; Taille du jeu de Workers – 32 G
Niveau Nombre de processeurs virtuels IOPS en lecture – 100 % IOPS en écriture – 100 %
Basic 12,5 % du nombre total de cœurs de machine virtuelle Jusqu’à 120 000 Jusqu’à 90 000
Standard (valeur par défaut) 25 % du nombre total de cœurs de machine virtuelle Jusqu’à 220 000 Jusqu’à 180 000
Premium 50 % du nombre total de cœurs de machine virtuelle Jusqu’à 550 000 Jusqu’à 360 000

Remarque

La consommation de RAM et de hugepages reste cohérente à tous les niveaux : 1 Gio de RAM et 2 Gio de hugepages.

Une fois que vous avez identifié le niveau de performance qui s’aligne le mieux sur vos besoins, vous pouvez exécuter la commande suivante pour mettre à jour le niveau de performance de votre installation Stockage de conteneurs Azure. Remplacez <performance tier> par de base, standard ou premium.

az aks update -n <cluster-name> -g <resource-group> --enable-azure-container-storage <storage-pool-type> --ephemeral-disk-nvme-perf-tier <performance-tier>

Voir aussi