Utiliser le pilote CSI (Container Storage Interface) pour le stockage Blob Azure

Le pilote CSI (Container Storage Interface) pour le stockage Blob Azure est un pilote conforme à la spécification CSI utilisé par Azure Kubernetes Service (AKS) pour gérer le cycle de vie du stockage Blob Azure. CSI est une norme pour exposer des systèmes de stockage de blocs et de fichiers arbitraires à des charges de travail en conteneur sur Kubernetes.

En adoptant et en utilisant CSI, AKS peut désormais écrire, déployer et itérer les plug-ins pour exposer de nouveaux systèmes de stockage ou améliorer les existants dans Kubernetes. L’utilisation de pilotes CSI dans AKS permet d’éviter de toucher au code Kubernetes de base et d’attendre ses cycles de mise en production.

Lorsque vous montez du stockage Blob Azure en tant que système de fichiers dans un conteneur ou un pod, cela vous permet d’utiliser le stockage d’objets blob avec un certain nombre d’applications qui fonctionnent avec de grandes quantités de données non structurées. Par exemple :

  • Données du fichier journal
  • Images, documents et diffusion en continu de vidéos ou d’audio
  • Données de récupération d’urgence

Les données sur le stockage d’objets sont accessibles par les applications à l’aide du protocole BlobFuse ou NFS (Network File System) 3.0. Avant l’introduction du pilote CSI pour le stockage Blob Azure, la seule option consistait à installer manuellement un pilote non pris en charge pour accéder au stockage Blob à partir de votre application s’exécutant sur AKS. Lorsque le pilote CSI pour le stockage Blob Azure est activé sur AKS, il existe deux classes de stockage intégrées : azureblob-fuse-premium et azureblob-nfs-premium.

Pour créer un cluster AKS avec prise en charge des pilotes CSI, consultez Pilotes CSI sur AKS. Pour en savoir plus sur les différences d’accès entre chacun des types de stockage Azure à l’aide du protocole NFS, consultez Comparer l’accès à Azure Files, au Stockage Blob et à Azure NetApp Files avec NFS.

Fonctionnalités du pilote CSI pour le stockage Blob Azure

Le pilote CSI pour le stockage Blob Azure prend en charge les fonctionnalités suivantes :

  • Protocole BlobFuse et NFS (Network File System) version 3.0

Avant de commencer

  • La version 2.42 ou ultérieure d’Azure CLI doit être installée et configurée. Exécutez az --version pour trouver la version. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI.

  • Effectuez les étapes de ce lien si vous avez précédemment installé le pilote open source du Stockage Blob CSI pour accéder au stockage Blob Azure à partir de votre cluster.

Remarque

Si le proxy blobfuse n'est pas activé lors de l'installation du pilote open source, la désinstallation du pilote open source perturbera les montages blobfuse existants. Cependant, les montages NFS ne seront pas affectés.

Activer le pilote CSI sur un cluster AKS, nouveau ou existant

À l’aide d’Azure CLI, vous pouvez activer le pilote CSI de stockage Blob sur un cluster AKS nouveau ou existant avant de configurer un volume persistant pour une utilisation par les pods du cluster.

Pour activer le pilote sur un nouveau cluster, ajoutez le paramètre --enable-blob-driver avec la commande az aks create, comme indiqué dans l’exemple suivant :

az aks create --enable-blob-driver -n myAKSCluster -g myResourceGroup

Pour activer le pilote sur un cluster existant, ajoutez le paramètre --enable-blob-driver avec la commande az aks update, comme indiqué dans l’exemple suivant :

az aks update --enable-blob-driver -n myAKSCluster -g myResourceGroup

Vous êtes invité à confirmer qu’aucun pilote CSI d’objet blob open source n’est installé. Après que vous l’ayez confirmée, l’exécution de cette action peut prendre plusieurs minutes. Une fois l’opération terminée, vous devez voir dans la sortie l’état d’activation du pilote sur votre cluster. L’exemple suivant ressemble à la section indiquant les résultats de la commande précédente :

"storageProfile": {
    "blobCsiDriver": {
      "enabled": true
    },

Désactiver le pilote CSI sur un cluster AKS existant

À l’aide d’Azure CLI, vous pouvez désactiver le pilote CSI de stockage Blob sur un cluster AKS existant après avoir supprimé le volume persistant du cluster.

Pour désactiver le pilote sur un cluster existant, ajoutez le paramètre --disable-blob-driver avec la commande az aks update, comme indiqué dans l’exemple suivant :

az aks update --disable-blob-driver -n myAKSCluster -g myResourceGroup

Utiliser un volume persistant avec le stockage Blob Azure

Un volume persistant représente un élément de stockage provisionné pour une utilisation dans des pods Kubernetes. Un volume persistant peut être utilisé par un ou plusieurs pods et être provisionné de façon statique ou dynamique. Si plusieurs pods ont besoin d’un accès simultané au même volume de stockage, vous pouvez utiliser le Stockage Blob Azure pour vous connecter à l’aide du système de fichiers réseau (NFS) ou de blobfuse. Cet article vous montre comment créer un partage de conteneur de stockage Blob Azure de manière dynamique utilisé par plusieurs pods dans un cluster AKS.

Pour plus d’informations sur les volumes Kubernetes, consultez Options de stockage pour les applications dans AKS.

Créer dynamiquement des volumes persistants de stockage Blob Azure à l’aide des classes de stockage intégrées

Une classe de stockage est utilisée pour définir la façon dont un conteneur de stockage d’objets blob Azure est créé. Un compte de stockage est automatiquement créé dans le groupe de ressources de nœud pour être utilisé avec la classe de stockage afin de contenir le conteneur de stockage Azure Blob. Faites votre choix parmi les références SKU de redondance de stockage Azure suivantes pour skuName :

  • Standard_LRS : Stockage localement redondant standard
  • Premium_LRS : Stockage Premium localement redondant
  • Standard_ZRS : stockage redondant interzone standard
  • Premium_ZRS : stockage redondant interzone Premium
  • Standard_GRS : Stockage géo-redondant standard
  • Standard_RAGRS : Stockage géo-redondant avec accès en lecture standard

Lorsque vous utilisez des pilotes CSI de stockage sur AKS, il existe deux classes StorageClass supplémentaires intégrées qui utilisent le pilote CSI pour le stockage Blob Azure.

La stratégie de récupération sur les deux classes de stockage garantit que le stockage Azure Blob sous-jacent est supprimé lorsque le volume persistant respectif est supprimé. Les classes de stockage configurent également le conteneur pour qu’il soit extensible par défaut, car le paramètre set allowVolumeExpansion a la valeur true.

Utilisez la commande kubectl get sc pour voir les classes de stockage. L’exemple suivant montre les classes de stockage azureblob-fuse-premium et azureblob-nfs-premium disponibles au sein d’un cluster AKS :

NAME                                  PROVISIONER       RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION     AGE
azureblob-fuse-premium               blob.csi.azure.com   Delete          Immediate              true                   23h
azureblob-nfs-premium                blob.csi.azure.com   Delete          Immediate              true                   23h

Pour utiliser ces classes de stockage, créez un PVC et un pod respectif qui les référence et les utilise. Une revendication de volume persistant est utilisée pour configurer automatiquement le stockage basé sur une classe de stockage. Un PVC peut utiliser l’une des classes de stockage précréées ou une classe de stockage définie par l’utilisateur pour créer un conteneur de stockage Azure Blob pour la référence SKU, la taille et le protocole de votre choix. Lorsque vous créez une définition de pod, la revendication de volume persistant est spécifiée pour demander le stockage souhaité.

Utilisation d’un StatefulSet

Pour conserver un volume de stockage pour votre charge de travail, vous pouvez utiliser un StatefulSet. Cela facilite la correspondance entre les volumes existants et les nouveaux pods qui remplacent les volumes qui ont échoué. Les exemples suivants montrent comment configurer un StatefulSet pour le stockage d’objets blob à l’aide de Blobfuse ou du protocole NFS.

Prérequis

  • L’identité de Plan de contrôle de votre cluster AKS (le nom de votre cluster AKS) est ajoutée au rôle Contributeur sur le réseau virtuel et NetworkSecurityGroup.
  1. Créez un fichier nommé azure-blob-nfs-ss.yaml et copiez-y le YAML suivant.

    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: statefulset-blob-nfs
      labels:
        app: nginx
    spec:
      serviceName: statefulset-blob-nfs
      replicas: 1
      template:
        metadata:
          labels:
            app: nginx
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
            - name: statefulset-blob-nfs
              image: mcr.microsoft.com/oss/nginx/nginx:1.19.5
              volumeMounts:
                - name: persistent-storage
                  mountPath: /mnt/blob
      updateStrategy:
        type: RollingUpdate
      selector:
        matchLabels:
          app: nginx
      volumeClaimTemplates:
        - metadata:
            name: persistent-storage
          spec:
            storageClassName: azureblob-nfs-premium
            accessModes: ["ReadWriteMany"]
            resources:
              requests:
                storage: 100Gi
    
  2. Créez le StatefulSet avec la commande kubectl create :

    kubectl create -f azure-blob-nfs-ss.yaml
    

Étapes suivantes