Utiliser Azure Container Storage avec le disque SSD temporaire
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 vous explique comment configurer le stockage de conteneur Azure pour utiliser un disque éphémère avec des SSD temporaires comme stockage de back-end pour vos charges de travail Kubernetes. À la fin, vous aurez un pod qui utilise des SSD temporaires comme 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 commandeaz 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 qui prend en charge les SSD temporaires
Le disque éphémère est disponible uniquement dans certains types de machines virtuelles. Veillez à choisir un type de machine virtuelle avec un SSD temporaire, tel qu’une machine virtuelle Ev3 et Esv3.
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 SSD temporaire.
Utilisez votre éditeur de texte favori pour créer un fichier manifeste YAML tel que
code acstor-storagepool.yaml
.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-temp namespace: acstor spec: poolType: ephemeralDisk: diskType: temp
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-temp 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-temp.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 de revendications de volume persistant et du déploiement de volumes persistants.
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-temp 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.
Utilisez votre éditeur de texte favori pour créer un fichier manifeste YAML tel que
code acstor-pod.yaml
.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-temp # 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 celle-ci est inférieure à la capacité disponible du disque temporaire d’un nœud unique. Consultez Vérifier la capacité du disque temporaire du nœud.
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
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
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 des SSD temporaires comme 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 Temp --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 SSD temporaire.
Utilisez votre éditeur de texte favori pour créer un fichier manifeste YAML tel que
code acstor-storagepool.yaml
.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-temp namespace: acstor spec: poolType: ephemeralDisk: diskType: temp
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-temp 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-temp.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-temp 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.
Utilisez votre éditeur de texte favori pour créer un fichier manifeste YAML tel que
code acstor-pvc.yaml
.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-temp # 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é du disque temporaire du nœud.
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.
Utilisez votre éditeur de texte favori pour créer un fichier manifeste YAML tel que
code acstor-pod.yaml
.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
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
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
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 un SSD temporaire et vous pouvez l’utiliser pour vos charges de travail Kubernetes.
Gérer des volumes et des pools de stockage
Dans cette section, vous allez apprendre à vérifier la capacité disponible du disque éphémère pour un unique nœud, mais également à développer ou supprimer un pool de stockage.
Vérifier la capacité du disque temporaire du nœud
Un volume éphémère est alloué sur un seul nœud. Lorsque vous modifiez la taille des volumes éphémères, celle-ci doit être inférieure à la capacité disponible du disque temporaire du nœud unique.
Exécutez la commande suivante pour vérifier la capacité disponible du disque temporaire pour un nœud unique.
$ kubectl get diskpool -n acstor
NAME CAPACITY AVAILABLE USED RESERVED READY AGE
ephemeraldisk-temp-diskpool-jaxwb 75660001280 75031990272 628011008 560902144 True 21h
ephemeraldisk-temp-diskpool-wzixx 75660001280 75031990272 628011008 560902144 True 21h
ephemeraldisk-temp-diskpool-xbtlj 75660001280 75031990272 628011008 560902144 True 21h
Dans cet exemple, la capacité disponible du disque temporaire 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 basés sur des SSD temporaires pour effectuer un scale-up rapidement 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.
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écutezkubectl 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
Exécutez
kubectl get nodes
et vous verrez qu’un nœud a été ajouté au cluster.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>