Créer et gérer des volumes persistants (PVs) avec Azure Blob Storage dans Azure Kubernetes Service (AKS)

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 d’blobfuse ou de NFS (Network File System).

Cet article vous montre comment créer dynamiquement et statiquement des conteneurs de stockage Blob Azure à utiliser par plusieurs pods dans un cluster Azure Kubernetes Service (AKS).

Prerequisites

  • Le pilote CSI de stockage Blob Azure est activé sur votre cluster AKS.

  • Un compte de stockage activé NFS v3 pour pouvoir monter un volume persistant à l’aide du protocole NFS. Vous ne pouvez pas activer NFS v3 sur un compte de stockage existant. Pour plus d’informations, consultez Créer un compte NFS v3.

  • Pour prendre en charge un compte Azure Data Lake Storage lors de l’utilisation du montage blobfuse, effectuez les tâches suivantes :

    • Pour créer un compte Data Lake Storage à l’aide du pilote dans l’approvisionnement dynamique, spécifiez isHnsEnabled: "true" les paramètres de classe de stockage.
    • Pour activer l’accès blobfuse à un compte Data Lake Storage dans l’approvisionnement statique, spécifiez l’option --use-adls=true de montage dans le volume persistant.
    • Si vous activez un compte de stockage avec un espace de noms hiérarchique, les volumes persistants existants doivent être remontés avec l’option de montage --use-adls=true appropriée.
  • Par défaut, le cache blobfuse se trouve dans le /mnt répertoire. Si la référence SKU de machine virtuelle fournit un disque temporaire, le /mnt répertoire est monté sur le disque temporaire. Toutefois, si la référence SKU de machine virtuelle ne fournit pas de disque temporaire, le /mnt répertoire est monté sur le disque du système d’exploitation, vous pouvez définir --tmp-path= l’option de montage pour spécifier un autre répertoire de cache.

Utiliser des classes de stockage intégrées pour créer des PV dynamiques avec le stockage Blob Azure

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. Quand vous utilisez des pilotes de stockage CSI sur AKS, il y a deux autres StorageClasses intégrées qui utilisent le pilote de stockage Azure Blob CSI.

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.

Note

La réduction des volumes persistants n’est pas prise en charge.

Vous pouvez sélectionner l’un des SKU de redondance de stockage Azure suivants pour le paramètre skuname dans la définition de la classe de stockage.

  • Standard_LRS : stockage localement redondant standard
  • Premium_LRS : stockage localement redondant Premium
  • Standard_ZRS : stockage redondant dans une zone standard
  • Premium_ZRS : stockage redondant interzone (ZRS) Premium
  • Standard_GRS : stockage géoredondant standard
  • Standard_RAGRS : Stockage géoredondant avec accès en lecture standard

Créer des classes de stockage personnalisées pour les PV dynamiques avec Stockage Blob Azure

Les classes de stockage par défaut conviennent à la plupart des scénarios. Dans certains cas, vous pouvez avoir votre propre classe de stockage personnalisée avec vos propres paramètres. Dans cette section, nous fournissons deux exemples : l’un utilisant le protocole NFS et l’autre à l’aide de blobfuse.

Exemple de classe de stockage personnalisé utilisant le protocole NFS

Le manifeste de cet exemple monte un conteneur de stockage Blob à l’aide du protocole NFS. Vous pouvez l’utiliser pour ajouter le tags paramètre.

  1. Créez un fichier nommé blob-nfs-sc.yaml et collez-le dans l’exemple de manifeste suivant :

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: blob-nfs
    provisioner: blob.csi.azure.com
    parameters:
      protocol: nfs
      tags: environment=Development
    volumeBindingMode: Immediate
    allowVolumeExpansion: true
    
  2. Créez la classe de stockage à l’aide de la kubectl apply commande :

    kubectl apply -f blob-nfs-sc.yaml
    

    Votre sortie doit ressembler à l’exemple suivant :

    storageclass.storage.k8s.io/blob-nfs created
    

Exemple de classe de stockage personnalisé utilisant blobfuse

Le manifeste dans cet exemple utilise Blobfuse et monte un conteneur de stockage Blob. Vous pouvez l’utiliser pour mettre à jour le skuName paramètre.

  1. Créez un fichier nommé blobfuse-sc.yaml et collez-le dans l’exemple de manifeste suivant :

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: blob-fuse
    provisioner: blob.csi.azure.com
    parameters:
      skuName: Standard_GRS  # available values: Standard_LRS, Premium_LRS, Standard_GRS, Standard_RAGRS
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    allowVolumeExpansion: true
    mountOptions:
      - -o allow_other
      - --file-cache-timeout-in-seconds=120
      - --use-attr-cache=true
      - --cancel-list-on-mount-seconds=10  # prevent billing charges on mounting
      - -o attr_timeout=120
      - -o entry_timeout=120
      - -o negative_timeout=120
      - --log-level=LOG_WARNING  # LOG_WARNING, LOG_INFO, LOG_DEBUG
      - --cache-size-mb=1000  # Default will be 80% of available memory, eviction will happen beyond that.
    
  2. Créez la classe de stockage à l’aide de la kubectl apply commande :

    kubectl apply -f blobfuse-sc.yaml
    

    Votre sortie doit ressembler à l’exemple suivant :

    storageclass.storage.k8s.io/blob-fuse created
    

Paramètres de classe de stockage pour les PV dynamiques avec Stockage Blob Azure

Utilisez les groupes de paramètres suivants pour définir une classe de stockage personnalisée pour vos revendications de volume persistant (PVC) avec Azure Stockage Blob :

  • Compte de stockage : skuName, , locationresourceGroup, subscriptionID, networkEndpointTypetagsstorageAccountrequireInfraEncryptionaccessTierallowBlobPublicAccessallowSharedKeyAccesspublicNetworkAccess.matchTags
  • Conteneur et point de terminaison : protocol, , containerName, useDataPlaneAPIstorageEndpointSuffixserversoftDeleteBlobscontainerNamePrefixsoftDeleteContainerset .enableBlobVersioning
  • BlobFuse : storeAccountKey, , secretNamegetLatestAccountKey, secretNamespace, et isHnsEnabled.
  • NFS : mountPermissions et fsGroupChangePolicy.
  • Réseau virtuel : vnetResourceGroup, , subnetNamevnetNameet vnetLinkName.

Configurer les paramètres de compte de stockage pour les VV dynamiques avec Azure stockage d’objets blob

Utilisez les paramètres suivants pour configurer le compte de stockage Azure pour un pv approvisionné dynamiquement :

Nom Signification Valeurs disponibles Obligatoire Valeur par défaut
skuName Spécifiez un type de compte de stockage Azure (alias : storageAccountType). Standard_LRS, , Premium_LRS, Standard_RAGRSStandard_GRS, , Standard_ZRSPremium_ZRS Non Standard_LRS
location Spécifiez un emplacement Azure. eastus Non Si le paramètre est vide, le pilote utilise le même nom d’emplacement que le cluster actuel.
resourceGroup Spécifiez un nom groupe de ressources Azure. myResourceGroup Non Si le paramètre est vide, le pilote utilise le même nom de groupe de ressources que le cluster actuel.
subscriptionID Spécifiez l’ID d’abonnement Azure dans lequel le répertoire de stockage d’objets blob est créé. ID d’abonnement Azure Non Si le paramètre n’est pas vide, resourceGroup doit être fourni.
storageAccount Spécifiez un type de compte de stockage de Azure. storageAccountName Non Lorsqu’un nom de compte de stockage spécifique n’est pas fourni, le pilote recherche un compte de stockage approprié qui correspond aux paramètres du compte au sein du même groupe de ressources. S’il ne trouve pas de compte de stockage correspondant, il en crée un nouveau. Toutefois, si un nom de compte de stockage est spécifié, le compte de stockage doit déjà exister.
networkEndpointType Spécifiez le type de point de terminaison réseau pour le compte de stockage créé par le pilote. Si vous spécifiez privateEndpoint, le pilote crée un point de terminaison privé pour le compte de stockage. Dans d’autres cas, le pilote crée un point de terminaison de service pour le protocole NFS. "", privateEndpoint Non "". Pour un cluster AKS, ajoutez le nom du cluster AKS au rôle Contributeur dans le groupe de ressources hébergeant le réseau virtuel.
accessTier Spécifiez le niveau d’accès du compte de stockage. Hot, , CoolPremium Non Utilise le niveau par défaut pour le type de compte de stockage sélectionné. Les comptes Premium prennent en charge uniquement Premium.
allowBlobPublicAccess Autoriser ou interdire l’accès public à tous les objets blob ou conteneurs pour un compte de stockage créé par le pilote. true, false Non false
allowSharedKeyAccess Autoriser ou interdire l’accès à clé partagée pour un compte de stockage créé par le pilote. Ce paramètre s’applique aux montages NFS et aux montages BlobFuse qui utilisent l’identité managée. true, false Non true
requireInfraEncryption Exiger une couche secondaire de chiffrement géré par la plateforme pour les données au repos dans un compte de stockage créé par le pilote. true, false Non false
publicNetworkAccess Définissez la propriété d’accès réseau public pour un compte de stockage créé par le pilote. Enabled, , DisabledSecuredByPerimeter Non Utilise la stockage Azure par défaut.
tags Créez des étiquettes sur un nouveau compte de stockage. Format des étiquettes : foo=aaa,bar=bbb Non ""
matchTags Mettre en correspondance les balises lorsque le pilote recherche un compte de stockage approprié. true, false Non false

Configurer des paramètres de conteneur et de point de terminaison pour les VV dynamiques avec Azure stockage Blob

Utilisez les paramètres suivants pour configurer le conteneur, le protocole de montage, le point de terminaison de stockage et les balises d’un pv approvisionné dynamiquement :

Nom Description Valeurs disponibles Obligatoire Valeur par défaut
protocol Spécifiez le montage BlobFuse, BlobFuse2 ou NFS v3. fuse, , fuse2nfs Non fuse
containerName Spécifiez le nom du conteneur (répertoire) existant. container Non S’il est vide, le pilote crée un nom de conteneur, en commençant par pvc-fuse blobfuse ou pvc-nfs pour NFS v3.
containerNamePrefix Spécifiez le préfixe du répertoire de stockage Azure créé par le pilote. Ne peut contenir que des lettres minuscules, des chiffres et des traits d’union et doit comporter moins de 21 caractères. Non
server Spécifiez le nom de domaine du compte de stockage Azure. Nom de domaine DNS du compte de stockage existant, par exemple <storage-account>.blob.core.windows.net. Non S’il est vide, le pilote utilise par défaut <storage-account>.blob.core.windows.net ou d’autres noms de domaine DNS du compte de stockage cloud souverain.
storageEndpointSuffix Spécifiez le suffixe de point de terminaison de stockage Azure. core.windows.net Non S’il est vide, le pilote utilise le suffixe de point de terminaison de stockage par défaut en fonction de l’environnement cloud.
useDataPlaneAPI Utilisez l’API de plan de données stockage Azure pour créer et supprimer des conteneurs. Cette option peut éviter la limitation du fournisseur de ressources de stockage, mais échoue lorsque le pare-feu du compte de stockage ou les règles de réseau virtuel bloquent l’accès au plan de données. true, false Non false
softDeleteBlobs Activez la suppression réversible pour les objets blob et spécifiez la période de rétention en jours. Période de rétention, par exemple 7 Non Désactivé
softDeleteContainers Activez la suppression réversible pour les conteneurs et spécifiez la période de rétention en jours. Période de rétention, par exemple 7 Non Désactivé
enableBlobVersioning Activer le contrôle de version des objets blob. Vous ne pouvez pas activer le contrôle de version lorsque protocol c’est nfs ou isHnsEnabled est true. true, false Non false

Configurer des paramètres BlobFuse pour les VV dynamiques avec Azure stockage Blob

Les paramètres suivants s’appliquent uniquement lorsque vous utilisez BlobFuse pour un pv approvisionné dynamiquement :

Nom Description Valeurs disponibles Obligatoire Valeur par défaut
storeAccountKey Spécifiez la clé de compte de magasin sur le secret Kubernetes.

Remarque :
false signifie que le pilote utilise l’identité kubelet pour obtenir la clé de compte.
true,false Non true
getLatestAccountKey Obtenez la dernière clé de compte de stockage en fonction de son heure de création au lieu d’utiliser la première clé. true, false Non false
secretName Spécifiez le nom du secret pour stocker la clé de compte. Non
secretNamespace Spécifiez l’espace de noms de secret pour stocker la clé de compte. default, kube-system, etc. Non Espace de noms PVC
isHnsEnabled Activer Hierarchical namespace pour un compte Azure Data Lake Storage. true,false Non false

Configurer des paramètres NFS pour les VV dynamiques avec Azure stockage Blob

Le paramètre suivant s’applique uniquement lorsque vous utilisez NFS pour un pv approvisionné dynamiquement :

Nom Description Valeurs disponibles Obligatoire Valeur par défaut
mountPermissions Spécifiez les autorisations de dossiers montés. La valeur par défaut est 0777. Si la valeur est définie à 0, le pilote n’exécute pas chmod après le montage. Non 0777
fsGroupChangePolicy Spécifiez comment le pilote modifie la propriété du volume. Le pilote ignore securityContext.fsGroupChangePolicy dans la spécification du pod. OnRootMismatch, , AlwaysNone Non OnRootMismatch

Configurer des paramètres de réseau virtuel pour les machines virtuelles dynamiques avec Azure stockage d’objets blob

Utilisez les paramètres suivants lorsque le pilote configure l’accès au réseau virtuel pour un pv approvisionné dynamiquement :

Nom Description Valeurs disponibles Obligatoire Valeur par défaut
vnetResourceGroup Spécifiez le groupe de ressources qui contient le réseau virtuel. Nom du groupe de ressources existant Non Utilise la vnetResourceGroup valeur dans la configuration cloud Azure.
vnetName Spécifiez le nom du réseau virtuel. Nom de réseau virtuel existant Non Utilise la vnetName valeur dans la configuration cloud Azure.
subnetName Spécifiez un ou plusieurs sous-réseaux de nœuds AKS existants. Séparez plusieurs noms de sous-réseau par des virgules. Noms de sous-réseaux existants Non Met à jour tous les sous-réseaux du réseau virtuel du cluster.
vnetLinkName Spécifiez la liaison de réseau virtuel associée à la zone DNS privée. Nom de lien de réseau virtuel existant ou nouveau Non <vnetName>-vnetlink

Configurer des points de terminaison privés pour les VV dynamiques avec Azure stockage d’objets blob

Note

Si le compte de stockage est créé par le pilote, vous devez uniquement spécifier le networkEndpointType: privateEndpoint paramètre dans la classe de stockage. Le pilote CSI crée le point de terminaison privé et la zone DNS privée (nommée privatelink.blob.core.windows.net) avec le compte. Si vous apportez votre propre compte de stockage, vous devez créer le point de terminaison privé pour le compte de stockage. Si vous utilisez le stockage Blob Azure dans un cluster isolé réseau, vous devez créer une classe de stockage personnalisée avec « networkEndpointType : privateEndpointpoint ». Vous pouvez utiliser l’exemple de manifeste suivant comme référence :

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: blob-fuse
provisioner: blob.csi.azure.com
parameters:
  skuName: Premium_LRS  # available values: Standard_LRS, Premium_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRS, Premium_ZRS
  protocol: fuse2
  networkEndpointType: privateEndpoint
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true
mountOptions:
  - -o allow_other
  - --file-cache-timeout-in-seconds=120
  - --use-attr-cache=true
  - --cancel-list-on-mount-seconds=10  # prevent billing charges on mounting
  - -o attr_timeout=120
  - -o entry_timeout=120
  - -o negative_timeout=120
  - --log-level=LOG_WARNING  # LOG_WARNING, LOG_INFO, LOG_DEBUG
  - --cache-size-mb=1000  # Default will be 80% of available memory, eviction will happen beyond that.

Créer un PVC pour l’approvisionnement dynamique

Une revendication de volume persistant utilise l’objet de classe de stockage pour provisionner dynamiquement un stockage Blob Azure. Vous pouvez utiliser l’exemple de manifeste YAML dans cette section pour créer un PVC d'une taille de 5 Go avec un accès ReadWriteMany. Pour plus d’informations sur les modes d’accès, consultez les modes d’accès Kubernetes PV.

  1. Créez un fichier nommé blob-nfs-pvc.yaml et collez-le dans le manifeste YAML suivant :

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: azure-blob-storage
    spec:
      accessModes:
      - ReadWriteMany
      storageClassName: azureblob-nfs-premium
      resources:
        requests:
          storage: 5Gi
    
  2. Créez le PVC à l’aide de la kubectl create commande :

    kubectl create -f blob-nfs-pvc.yaml
    
  3. Affichez l’état du PVC avec la kubectl get commande :

    kubectl get pvc azure-blob-storage
    

    Votre sortie doit ressembler à l’exemple de sortie suivant, ce qui montre que le PVC est dans un Bound état :

    NAME                 STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                AGE
    azure-blob-storage   Bound    pvc-aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb   5Gi        RWX            azureblob-nfs-premium       92m
    

Monter un volume de stockage d’objets blob provisionné dynamiquement dans un pod

Le YAML suivant crée un pod qui utilise la réclamation de volume persistant azure-blob-storage pour monter le stockage Blob Azure sur le chemin /mnt/blob.

  1. Créez un fichier nommé blob-nfs-pv et collez le manifeste YAML suivant. Vérifiez que les correspondances avec claimName le PVC que vous avez créé précédemment (azure-blob-storage).

    kind: Pod
    apiVersion: v1
    metadata:
      name: mypod
    spec:
      containers:
      - name: mypod
        image: mcr.microsoft.com/oss/nginx/nginx:1.17.3-alpine
        resources:
          requests:
            cpu: 100m
            memory: 128Mi
          limits:
            cpu: 250m
            memory: 256Mi
        volumeMounts:
        - mountPath: "/mnt/blob"
          name: volume
          readOnly: false
      volumes:
        - name: volume
          persistentVolumeClaim:
            claimName: azure-blob-storage
    
  2. Créez le pod à l’aide de la kubectl apply commande :

    kubectl apply -f blob-nfs-pv.yaml
    
  3. Une fois le pod en cours d’exécution, créez un fichier nommé test.txt à l’aide de la commande suivante :

    kubectl exec mypod -- touch /mnt/blob/test.txt
    
  4. Vérifiez que le disque est correctement monté à l’aide de la commande suivante pour répertorier les fichiers dans le répertoire monté :

    kubectl exec mypod -- ls /mnt/blob
    

    Votre sortie doit ressembler à l’exemple de sortie suivant, qui montre le test.txt fichier que vous avez créé dans le stockage Blob Azure monté :

    test.txt
    

Utiliser un StatefulSet pour gérer le cycle de vie d’un volume avec stockage Blob Azure

Pour conserver un volume de stockage pour votre charge de travail, vous pouvez utiliser un StatefulSet. Cet état permet d’assurer la correspondance entre les volumes existants et les nouveaux modules destinés à remplacer ceux défaillants. Les exemples suivants montrent comment configurer un StatefulSet pour le stockage d’objets blob à l’aide du protocole NFS ou d’Blobfuse.

Note

Si vous utilisez le protocole NFS, l'identité de votre plan de contrôle de cluster AKS (nom de votre cluster AKS) doit être ajoutée au rôle Contributeur sur le réseau virtuel et le groupe de sécurité réseau.

  1. Créez un fichier nommé azure-blob-nfs-ss.yaml et collez-le dans le manifeste 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/azurelinux/base/nginx:1.25
              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 l’objet StatefulSet à l’aide de la kubectl create commande :

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

Créer un PV statique avec Stockage Blob Azure

Les sections suivantes fournissent des instructions pour créer un PV statique avec le stockage Blob Azure. Un pv statique est un volume persistant créé manuellement par un administrateur. Ce PV est disponible pour être utilisé par les pods du cluster. Pour utiliser un PV statique, vous créez un PVC qui fait référence au PV, puis créez un pod qui fait référence au PVC.

Paramètres de volume CSI pour les applications virtuelles statiques avec Azure stockage d’objets blob

Le tableau suivant répertorie les paramètres que vous pouvez utiliser dans la source de volume CSI pour un pv statique avec Azure Stockage Blob :

Nom Signification Valeurs disponibles Obligatoire Valeur par défaut
volumeHandle Spécifiez une valeur que le pilote peut utiliser pour identifier de manière unique le conteneur d’objets blob de stockage dans le cluster. Une méthode recommandée pour produire une valeur unique consiste à combiner le nom du compte de stockage global unique et le nom du conteneur : {account-name}_{container-name}.
Remarque : Les caractères # et / sont réservés à une utilisation interne et ne peuvent pas être utilisés dans un descripteur de volume.
Oui
volumeAttributes.subscriptionID Spécifiez l’ID d’abonnement Azure où se trouve le compte de stockage. ID d’abonnement Azure Non Si le paramètre n’est pas vide, volumeAttributes.resourceGroup doit être fourni.
volumeAttributes.resourceGroup Spécifiez le nom du groupe de ressources Azure. myResourceGroup Non Si le paramètre est vide, le pilote utilise le même nom de groupe de ressources que le cluster actuel.
volumeAttributes.storageAccount Spécifiez un nom de compte de stockage Azure existant. storageAccountName Oui
volumeAttributes.containerName Spécifiez le nom du conteneur existant. container Oui
volumeAttributes.protocol Spécifiez le montage BlobFuse, BlobFuse2 ou NFS v3. fuse, , fuse2nfs Non fuse
volumeAttributes.server Spécifiez l’adresse du serveur de compte de stockage Azure. Adresse du serveur existante, par exemple <storage-account>.blob.core.windows.net Non Utilise l’adresse du serveur par défaut pour l’environnement cloud actuel.
volumeAttributes.storageEndpointSuffix Spécifiez le suffixe de point de terminaison de stockage Azure. core.windows.netou le suffixe d’un autre Azure cloud Non Utilise le suffixe par défaut pour l’environnement cloud actuel.
--- Les paramètres suivants sont uniquement pour blobfuse --- --- ---
volumeAttributes.secretName Nom de secret qui stocke le nom et la clé du compte de stockage (s’applique uniquement à SMB). Non
volumeAttributes.secretNamespace Spécifiez le namespace du secret pour stocker la clé de compte. default Non Espace de noms PVC
volumeAttributes.getLatestAccountKey Obtenez la dernière clé de compte de stockage en fonction de son heure de création au lieu d’utiliser la première clé. true, false Non false
nodeStageSecretRef.name Spécifiez le nom du secret Kubernetes qui contient les informations d’identification pour la mise en lots du volume. Nom de secret Kubernetes existant. Le secret doit contenir l’une des clés suivantes : azurestorageaccountkey, , azurestorageaccountsastoken, msisecretou azurestoragespnclientsecret. Non
nodeStageSecretRef.namespace Spécifiez l’espace de noms du secret. Espace de noms Kubernetes Oui
--- Les paramètres suivants sont uniquement pour le protocole NFS --- --- ---
volumeAttributes.mountPermissions Spécifiez les autorisations de dossiers montés. 0777 Non
volumeAttributes.fsGroupChangePolicy Spécifiez comment le pilote modifie la propriété du volume. Le pilote ignore securityContext.fsGroupChangePolicy dans la spécification du pod. OnRootMismatch, , AlwaysNone Non OnRootMismatch
--- Les paramètres suivants concernent uniquement la fonctionnalité : blobfuse
Authentification de l'identité gérée et du Nom Principal du Service
--- --- ---
volumeAttributes.AzureStorageAuthType Spécifiez le type d’authentification. Key, , SASMSI, ,SPN Non Key
volumeAttributes.AzureStorageIdentityClientID Spécifiez l’ID client d’identité. Non
volumeAttributes.AzureStorageIdentityObjectID Spécifiez l’ID d’objet d’identité. Ce paramètre est déconseillé. Non
volumeAttributes.AzureStorageIdentityResourceID Spécifiez l’ID de ressource d’identité. Non
volumeAttributes.MSIEndpoint Spécifiez le point de terminaison MSI. Non
volumeAttributes.AzureStorageSPNClientID Spécifiez l’ID client du Principal de Service Azure (SPN). Non
volumeAttributes.AzureStorageSPNTenantID Spécifiez l’ID de locataire Azure SPN. Non
volumeAttributes.AzureStorageAADEndpoint Spécifiez le point de terminaison Microsoft Entra. Non
--- Les paramètres suivants sont uniquement pour l’authentification d’identité de charge de travail blobfuse --- --- ---
volumeAttributes.ClientID Spécifiez l’ID client de l’identité managée utilisée pour l’authentification d’identité de charge de travail. ID client d'identité gérée Non
volumeAttributes.mountWithWorkloadIdentityToken Monter BlobFuse avec un jeton d’identité de charge de travail. Cette fonctionnalité est en préversion. Spécifiez la valeur sous forme de chaîne. "true", "false" Non "false"
--- Les paramètres suivants sont uniquement destinés à la fonctionnalité : clé de compte de lecture blobfuse ou jeton SAP à partir du coffre de clés --- --- ---
volumeAttributes.keyVaultURL Spécifiez le nom DNS d’Azure Key Vault. {vault-name}.vault.azure.net Non
volumeAttributes.keyVaultSecretName Spécifiez le nom du secret Azure Key Vault. Nom de secret Azure Key Vault existant. Non
volumeAttributes.keyVaultSecretVersion Version du secret Azure Key Vault. Version existante Non S’il est vide, le pilote utilise la version actuelle.

Créer un conteneur de stockage Blob

Lorsque vous créez une ressource de stockage Blob Azure à utiliser avec AKS, vous pouvez créer la ressource dans le groupe de ressources de nœud. Cette approche permet au cluster AKS d’accéder à la ressource de stockage Blob et de la gérer.

  1. Obtenez le nom du groupe de ressources de nœud de votre cluster AKS en utilisant la commande az aks show avec 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. Si vous créez le compte de stockage dans le groupe de ressources de nœud, utilisez le nom du groupe de ressources de nœud retourné à l’étape précédente (par exemple). MC_myResourceGroup_myAKSCluster_eastus Ensuite, suivez les étapes décrites dans Gérer le stockage d’objets blob pour autoriser l’accès et créer un conteneur dans ce compte de stockage.

Monter le volume

Dans cette section, vous montez le volume persistant à l’aide du protocole NFS ou d’Blobfuse.

Le compte de stockage doit avoir NFS v3 et l’espace de noms hiérarchique activés. Le montage du stockage Blob à l’aide du protocole NFS v3 ne s’authentifie pas à l’aide d’une clé de compte. Le sous-réseau du nœud AKS doit disposer d’un accès réseau au compte de stockage NFS via un réseau virtuel ou un point de terminaison privé sélectionné. Assurez-vous que les groupes de sécurité réseau autorisent le trafic NFS sur les ports 111 et 2048. Pour plus d’informations sur la configuration de l’accès NFS à votre compte de stockage, consultez Mount Stockage Blob à l’aide du protocole NFS (Network File System) 3.0.

L’exemple suivant montre comment monter un conteneur de stockage d’objets blob en tant que volume persistant à l’aide du protocole NFS.

  1. Créez un fichier nommé pv-blob-nfs.yaml et collez le fichier YAML suivant. Sous spec.csi.volumeAttributes, mettez à jour resourceGroup, storageAccountet containerName.

    Note

    volumeHandle la valeur doit être un volumeID unique pour chaque conteneur blob identique dans le cluster. Le caractère # et / sont réservés à une utilisation interne et ne peuvent pas être utilisés.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      annotations:
        pv.kubernetes.io/provisioned-by: blob.csi.azure.com
      name: pv-blob
    spec:
      capacity:
        storage: 1Pi
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain  # If set as "Delete" container would be removed after pvc deletion
      storageClassName: azureblob-nfs-premium
      csi:
        driver: blob.csi.azure.com
        # make sure volumeid is unique for every identical storage blob container in the cluster
        # character `#` and `/` are reserved for internal use and cannot be used in volumehandle
        volumeHandle: account-name_container-name
        volumeAttributes:
          resourceGroup: resourceGroupName
          storageAccount: storageAccountName
          containerName: containerName
          protocol: nfs
    

    Note

    Bien que l'attribut de capacité de l'API Kubernetes soit obligatoire, le pilote CSI de stockage Blob Azure n'utilise pas cette valeur, car vous pouvez écrire des données de manière flexible jusqu'à atteindre la limite de capacité de votre compte de stockage. La valeur est utilisée uniquement pour la correspondance de taille entre les PC et les PC. L’exemple utilise une valeur fictive de 1Pi; cette valeur ne définit pas la capacité du conteneur de stockage d’objets blob.

  2. Créez le PV à l’aide de la kubectl create commande :

    kubectl create -f pv-blob-nfs.yaml
    
  3. Créez un fichier nommé pvc-blob-nfs.yaml et collez-le dans le yaML suivant. Sous volumeName, mettez à jour la valeur pour qu’elle corresponde au nom du pv créé à l’étape précédente.

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc-blob
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 10Gi
      volumeName: pv-blob
      storageClassName: azureblob-nfs-premium
    
  4. Créez le PVC à l’aide de la kubectl create commande :

    kubectl create -f pvc-blob-nfs.yaml
    

Utiliser le volume persistant

Le fichier YAML suivant crée un pod qui utilise le PV ou le PVC nommé pvc-blob, créé précédemment, pour monter le stockage Azure Blob sur le chemin /mnt/blob.

  1. Créez un fichier nommé nginx-pod-blob.yaml et collez-le dans le manifeste YAML suivant. Vérifiez que les correspondances avec claimName le PVC créé précédemment (pvc-blob).

    kind: Pod
    apiVersion: v1
    metadata:
      name: nginx-blob
    spec:
      nodeSelector:
        "kubernetes.io/os": linux
      containers:
        - image: mcr.microsoft.com/oss/nginx/nginx:1.17.3-alpine
          name: nginx-blob
          volumeMounts:
            - name: blob01
              mountPath: "/mnt/blob"
              readOnly: false
      volumes:
        - name: blob01
          persistentVolumeClaim:
            claimName: pvc-blob
    
  2. Créez le pod et montez le PVC à l’aide de la kubectl create commande :

    kubectl create -f nginx-pod-blob.yaml
    
  3. Créez une session shell interactive avec le pod pour vérifier que le stockage Blob est monté correctement à l’aide de la commande suivante kubectl exec :

    kubectl exec -it nginx-blob -- df -h
    

    Votre sortie devrait ressembler à l’exemple de sortie suivant, qui montre que le stockage Blob est monté sur le chemin /mnt/blob :

    Filesystem      Size  Used Avail Use% Mounted on
    ...
    blobfuse         14G   41M   13G   1% /mnt/blob
    ...