Criar e gerenciar volumes persistentes com os Armazenamento de Blobs do Azure no Serviço de Kubernetes do Azure (AKS)

Se vários pods precisarem de acesso simultâneo ao mesmo volume de armazenamento, você poderá usar o Armazenamento de Blobs do Azure para se conectar usando blobfuse ou NFS (Sistema de Arquivos de Rede).

Este artigo mostra como criar dinamicamente e estaticamente contêineres de Armazenamento de Blobs do Azure para uso por vários pods em um cluster do AKS (Serviço de Kubernetes do Azure).

Pré-requisitos

  • O driver de CSI do Armazenamento de Blobs do Azure habilitado no seu cluster do AKS.

  • Uma conta de armazenamento habilitada para NFS v3 para que você possa montar um volume persistente usando o protocolo NFS. Você não pode habilitar o NFS v3 em uma conta de armazenamento existente. Para obter mais informações, consulte Criar uma conta NFS v3.

  • Para dar suporte a uma conta Azure Data Lake Storage ao usar a montagem de blobfuse, conclua as seguintes tarefas:

    • Para criar uma conta Data Lake Storage usando o driver no provisionamento dinâmico, especifique isHnsEnabled: "true" nos parâmetros da classe de armazenamento.
    • Para habilitar o acesso de blobfuse a uma conta Data Lake Storage no provisionamento estático, especifique a opção --use-adls=true de montagem no volume persistente.
    • Se você for habilitar uma conta de armazenamento com Namespace Hierárquico, os volumes persistentes (PVs) existentes deverão ser remontados com a opção de montagem --use-adls=true.
  • Por padrão, o cache de blobfuse está localizado no /mnt diretório. Se o SKU da VM fornecer um disco temporário, o /mnt diretório será montado no disco temporário. No entanto, se o SKU da VM não fornecer um disco temporário, o /mnt diretório será montado no disco do sistema operacional, você poderá definir --tmp-path= a opção de montagem para especificar um diretório de cache diferente.

Usar classes de armazenamento integradas para criar PVs dinâmicos com o Armazenamento de Blobs do Azure

Uma classe de armazenamento é usada para definir como um contêiner de Armazenamento de Blobs do Azure é criado. Uma conta de armazenamento é criada automaticamente no grupo de recursos do nó para uso com a classe de armazenamento para reter o contêiner de armazenamento de blobs do Azure. Ao usar drivers CSI de armazenamento no AKS, existem outros dois drivers adicionais integrados StorageClasses que utilizam o driver de CSI do Armazenamento de Blobs do Azure.

A política de recuperação em ambas as classes de armazenamento garante que o armazenamento de blobs subjacente do Azure seja excluído quando o respectivo PV for excluído. As classes de armazenamento também configuram o contêiner para ser expansível por padrão, pois o parâmetro set allowVolumeExpansion é definido como true.

Observação

Não há suporte para redução de volumes persistentes.

Você pode selecionar um dos seguintes SKUs de redundância de armazenamento do Azure para o parâmetro skuname na definição da classe de armazenamento:

  • Standard_LRS: Armazenamento com redundância local padrão
  • Premium_LRS: Armazenamento com redundância local Premium
  • Standard_ZRS: armazenamento com redundância de zona Standard
  • Premium_ZRS: armazenamento com redundância de zona Premium
  • Standard_GRS: Armazenamento com redundância geográfica padrão
  • Standard_RAGRS: Armazenamento com redundância geográfica de acesso de leitura padrão

Criar classes de armazenamento personalizadas para volumes persistentes dinâmicos (PVs) com o Azure Blob Storage

As classes de armazenamento padrão são adequadas para a maioria dos cenários. Em alguns casos, talvez você queira ter sua própria classe de armazenamento personalizada com seus próprios parâmetros. Nesta seção, fornecemos dois exemplos: um usando o protocolo NFS e outro usando blobfuse.

Exemplo de classe de armazenamento personalizada usando o protocolo NFS

O manifesto neste exemplo monta um contêiner de armazenamento de blobs usando o protocolo NFS. Você pode usá-lo para adicionar o tags parâmetro.

  1. Crie um arquivo nomeado blob-nfs-sc.yaml e cole no seguinte manifesto de exemplo:

    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. Crie a classe de armazenamento usando o kubectl apply comando:

    kubectl apply -f blob-nfs-sc.yaml
    

    Sua saída deve ser parecida com o seguinte exemplo de saída:

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

Exemplo de classe de armazenamento personalizada usando blobfuse

O manifesto neste exemplo usa blobfuse e monta um contêiner de armazenamento Blob. Você pode usá-lo para atualizar o skuName parâmetro.

  1. Crie um arquivo nomeado blobfuse-sc.yaml e cole no seguinte manifesto de exemplo:

    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. Crie a classe de armazenamento usando o kubectl apply comando:

    kubectl apply -f blobfuse-sc.yaml
    

    Sua saída deve ser parecida com o seguinte exemplo de saída:

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

Parâmetros de classe de armazenamento para PVs dinâmicos com armazenamento de Blob do Azure

Use os seguintes grupos de parâmetros para definir uma classe de armazenamento personalizada para suas PVCs (declarações de volume persistente) com Azure Armazenamento de Blobs:

  • Conta de armazenamento: skuName, , location, resourceGroup, subscriptionID, storageAccount, networkEndpointType, accessTier, , allowBlobPublicAccess, allowSharedKeyAccess, requireInfraEncryption, , publicNetworkAccess, , e tagsmatchTags.
  • Contêiner e ponto de extremidade: protocol, , containerName, containerNamePrefix, server, storageEndpointSuffix, , useDataPlaneAPI, softDeleteBlobs, e softDeleteContainersenableBlobVersioning.
  • BlobFuse: storeAccountKey, , getLatestAccountKey, secretName, secretNamespacee isHnsEnabled.
  • NFS: mountPermissions e fsGroupChangePolicy.
  • Rede virtual: vnetResourceGroup, , vnetNamee subnetNamevnetLinkName.

Configurar parâmetros de conta de armazenamento para PVs dinâmicas com Azure Armazenamento de Blobs

Use os seguintes parâmetros para configurar a conta de armazenamento Azure para um PV provisionado dinamicamente:

Nome Meaning Valores disponíveis Obrigatório Valor padrão
skuName Especifique um tipo de conta de armazenamento do Azure (alias: storageAccountType). Standard_LRS, Premium_LRS, Standard_GRS, Standard_RAGRS, , Standard_ZRSPremium_ZRS Não Standard_LRS
location Especifique um local do Azure. eastus Não Se estiver vazio, o driver usará o mesmo nome de local que o cluster atual.
resourceGroup Especifique o nome do grupo de recursos do Azure. myResourceGroup Não Se estiver vazio, o driver usará o mesmo nome de grupo de recursos que o cluster atual está usando.
subscriptionID Especifique a ID da assinatura do Azure em que o diretório de armazenamento de blobs é criado. ID de assinatura do Azure Não Se não estiver vazio, resourceGroup deverá ser fornecido.
storageAccount Especifique um nome de armazenamento em disco do Azure. storageAccountName Não Quando um nome de conta de armazenamento específico não é fornecido, o driver procura uma conta de armazenamento adequada que corresponda às configurações da conta no mesmo grupo de recursos. Se não encontrar uma conta de armazenamento correspondente, ela criará uma nova. No entanto, se um nome de conta de armazenamento for especificado, a conta de armazenamento já deve existir.
networkEndpointType Especifique o tipo de ponto de extremidade de rede para a conta de armazenamento criada pelo driver. Se você especificar privateEndpoint, o driver criará um ponto de extremidade privado para a conta de armazenamento. Para outros casos, o driver cria um ponto de extremidade de serviço para o protocolo NFS. "", privateEndpoint Não "". Para um cluster do AKS, adicione o nome do cluster do AKS à função Colaborador no grupo de recursos que hospeda a rede virtual.
accessTier Especifique a camada de acesso para a conta de armazenamento. Hot, , CoolPremium Não Usa a camada padrão para o tipo de conta de armazenamento selecionado. Somente Premiumas contas Premium dão suporte .
allowBlobPublicAccess Permitir ou desautorizar o acesso público a todos os blobs ou contêineres de uma conta de armazenamento criada pelo driver. true, false Não false
allowSharedKeyAccess Permitir ou desautorizar o acesso de chave compartilhada para uma conta de armazenamento criada pelo driver. Esse parâmetro se aplica a montagens NFS e montagens do BlobFuse que usam identidade gerenciada. true, false Não true
requireInfraEncryption Exigir uma camada secundária de criptografia gerenciada por plataforma para dados inativos em uma conta de armazenamento criada pelo driver. true, false Não false
publicNetworkAccess Defina a propriedade de acesso à rede pública para uma conta de armazenamento criada pelo driver. Enabled, , DisabledSecuredByPerimeter Não Usa o padrão de Armazenamento do Azure.
tags Crie marcas em uma nova conta de armazenamento. Formato de marca: foo=aaa,bar=bbb Não ""
matchTags Corresponda às marcas quando o driver procura uma conta de armazenamento adequada. true, false Não false

Configurar parâmetros de contêiner e ponto de extremidade para PVs dinâmicas com Azure Armazenamento de Blobs

Use os seguintes parâmetros para configurar o contêiner, o protocolo de montagem, o ponto de extremidade de armazenamento e as marcas para um PV provisionado dinamicamente:

Nome Description Valores disponíveis Obrigatório Valor padrão
protocol Especifique a montagem de BlobFuse, BlobFuse2 ou NFS v3. fuse, , fuse2nfs Não fuse
containerName Especifique o nome do contêiner (diretório) existente. contêiner Não Se estiver vazio, o driver criará um novo nome de contêiner, começando pvc-fuse com blobfuse ou pvc-nfs para NFS v3.
containerNamePrefix Especifique o prefixo do diretório de armazenamento do Azure criado pelo driver. Só pode conter letras minúsculas, números e hifens e deve ter menos de 21 caracteres. Não
server Especifique o nome de domínio da conta de armazenamento do Azure. Nome de domínio DNS da conta de armazenamento existente, por exemplo <storage-account>.blob.core.windows.net. Não Se estiver vazio, o driver usará o <storage-account>.blob.core.windows.net padrão ou o nome de domínio DNS da conta de armazenamento em nuvem soberana.
storageEndpointSuffix Especifique o sufixo do ponto de extremidade de armazenamento do Azure. core.windows.net Não Se estiver vazio, o driver usa o sufixo de ponto de extremidade de armazenamento padrão de acordo com o ambiente de nuvem.
useDataPlaneAPI Use a API do plano de dados Armazenamento do Azure para criar e excluir contêineres. Essa opção pode evitar a limitação do provedor de recursos de armazenamento, mas falha quando o firewall da conta de armazenamento ou as regras de rede virtual bloqueiam o acesso ao plano de dados. true, false Não false
softDeleteBlobs Habilite a exclusão reversível para blobs e especifique o período de retenção em dias. Um período de retenção, por exemplo 7 Não Desactivado
softDeleteContainers Habilite a exclusão reversível para contêineres e especifique o período de retenção em dias. Um período de retenção, por exemplo 7 Não Desactivado
enableBlobVersioning Habilitar o controle de versão de blob. Você não pode habilitar o controle de versão quando protocol está nfs ou isHnsEnabled está true. true, false Não false

Configurar parâmetros do BlobFuse para PVs dinâmicas com Azure Armazenamento de Blobs

Os seguintes parâmetros se aplicam somente quando você usa o BlobFuse para um PV provisionado dinamicamente:

Nome Description Valores disponíveis Obrigatório Valor padrão
storeAccountKey Especifique a chave da conta de repositório para o segredo do Kubernetes.

Observação:
false significa que o driver usa a identidade kubelet para obter a chave da conta.
true,false Não true
getLatestAccountKey Obtenha a chave de conta de armazenamento mais recente com base no tempo de criação, em vez de usar a primeira chave. true, false Não false
secretName Especifique o nome do segredo para armazenar a chave da conta. Não
secretNamespace Especifique o namespace do segredo para armazenar a chave da conta. default, kube-system, etc. Não Namespace do PVC
isHnsEnabled Habilite Hierarchical namespace para uma conta Azure Data Lake Storage. true,false Não false

Configurar parâmetros NFS para PVs dinâmicas com Azure Armazenamento de Blobs

O parâmetro a seguir só se aplica quando você usa o NFS para um PV provisionado dinamicamente:

Nome Description Valores disponíveis Obrigatório Valor padrão
mountPermissions Especifique permissões de pasta montadas. O padrão é 0777. Se definido como 0, o driver não realizará chmod após a montagem. Não 0777
fsGroupChangePolicy Especifique como o driver altera a propriedade do volume. O driver ignora securityContext.fsGroupChangePolicy na especificação do pod. OnRootMismatch, , AlwaysNone Não OnRootMismatch

Configurar parâmetros de rede virtual para PVs dinâmicas com armazenamento de Blobs Azure

Use os seguintes parâmetros quando o driver configurar o acesso à rede virtual para um PV provisionado dinamicamente:

Nome Description Valores disponíveis Obrigatório Valor padrão
vnetResourceGroup Especifique o grupo de recursos que contém a rede virtual. Nome do grupo de recursos existente Não Usa o vnetResourceGroup valor na configuração de nuvem Azure.
vnetName Especifique o nome da rede virtual. Nome da rede virtual existente Não Usa o vnetName valor na configuração de nuvem Azure.
subnetName Especifique uma ou mais sub-redes de nó do AKS existentes. Separe vários nomes de sub-rede com vírgulas. Nomes de sub-rede existentes Não Atualiza todas as sub-redes na rede virtual do cluster.
vnetLinkName Especifique o link de rede virtual associado à zona DNS privada. Nome do link de rede virtual existente ou novo Não <vnetName>-vnetlink

Configurar pontos de extremidade privados para PVs dinâmicas com Azure Armazenamento de Blobs

Observação

Se a conta de armazenamento for criada pelo driver, você só precisará especificar networkEndpointType: privateEndpoint o parâmetro na classe de armazenamento. O driver CSI cria o ponto de extremidade privado e a zona DNS privada (nomeada privatelink.blob.core.windows.net) junto com a conta. Se você trouxer sua própria conta de armazenamento, precisará criar o ponto de extremidade privado para a conta de armazenamento. Se você estiver usando o Armazenamento de Blobs do Azure em um cluster isolado de rede, deverá criar uma classe de armazenamento personalizada com "networkEndpointType: privateEndpoint". Você pode usar o seguinte manifesto de exemplo como referência:

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.

Criar um PVC para provisionamento dinâmico

Um PVC usa o objeto da classe de armazenamento para provisionar dinamicamente um Armazenamento de Blobs do Azure. Você pode usar o manifesto YAML de exemplo nesta seção para criar um PVC com 5 GB de tamanho com acesso ReadWriteMany. Para obter mais informações sobre os modos de acesso, consulte os modos de acesso PV do Kubernetes.

  1. Crie um arquivo nomeado blob-nfs-pvc.yaml e cole no seguinte manifesto YAML:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: azure-blob-storage
    spec:
      accessModes:
      - ReadWriteMany
      storageClassName: azureblob-nfs-premium
      resources:
        requests:
          storage: 5Gi
    
  2. Crie o PVC usando o kubectl create comando:

    kubectl create -f blob-nfs-pvc.yaml
    
  3. Exiba o status do PVC com o kubectl get comando:

    kubectl get pvc azure-blob-storage
    

    Sua saída deve ser semelhante à seguinte saída de exemplo, que mostra que o PVC está em um Bound estado:

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

Montar um volume de armazenamento de blobs provisionado dinamicamente em um pod

O YAML a seguir cria um pod que usa a declaração de volume persistente azure-blob-storage para montar o Armazenamento de Blobs do Azure no caminho /mnt/blob.

  1. Crie um arquivo chamado blob-nfs-pv e cole o manifesto YAML a seguir. Verifique se o claimName PVC que você criou anteriormente (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. Crie o pod usando o kubectl apply comando:

    kubectl apply -f blob-nfs-pv.yaml
    
  3. Depois que o pod estiver em execução com êxito, crie um novo arquivo nomeado test.txt usando o seguinte comando:

    kubectl exec mypod -- touch /mnt/blob/test.txt
    
  4. Valide se o disco foi montado corretamente usando o seguinte comando para listar os arquivos no diretório montado:

    kubectl exec mypod -- ls /mnt/blob
    

    Sua saída deve ser semelhante à seguinte saída de exemplo, que mostra o arquivo test.txt que você criou no Armazenamento de Blobs do Azure montado:

    test.txt
    

Usar um StatefulSet para gerenciar o ciclo de vida de um volume com o armazenamento de blobs do Azure

Um StatefulSet pode ser usado para que um volume de armazenamento persista para sua carga de trabalho. Este estado facilita a correspondência de volumes existentes com novos pods que substituem os que falharam. Os exemplos a seguir demonstram como configurar um StatefulSet para Armazenamento de Blobs usando o protocolo NFS ou Blobfuse.

Observação

Se você estiver usando o protocolo NFS, a identidade do plano de controle do cluster AKS (ou seja, o nome do cluster AKS) precisará ser adicionada à função Colaborador na rede virtual e no grupo de segurança de rede.

  1. Crie um arquivo nomeado azure-blob-nfs-ss.yaml e cole no seguinte manifesto YAML:

    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. Crie o StatefulSet usando o kubectl create comando:

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

Criar um PV estático usando o Azure Blob Storage

As seções a seguir fornecem instruções para configurar um PV estático com o armazenamento de Blobs do Azure. Um PV estático é um volume persistente que um administrador cria manualmente. Esse PV está disponível para uso por pods no cluster. Para usar um PV estático, você cria um PVC que faz referência ao PV e, em seguida, cria um pod que faz referência ao PVC.

Parâmetros de volume csi para PVs estáticas com armazenamento de Blobs Azure

A tabela a seguir lista os parâmetros que você pode usar na fonte de volume CSI para um PV estático com Azure Armazenamento de Blobs:

Nome Meaning Valores disponíveis Obrigatório Valor padrão
volumeHandle Especifique um valor que o driver pode usar para identificar exclusivamente o contêiner de blob de armazenamento no cluster. Uma maneira recomendada de produzir um valor exclusivo é combinar o nome da conta de armazenamento global exclusivo e o nome do contêiner: {account-name}_{container-name}.
Observação: os caracteres #, / são reservados para uso interno e não podem ser usados em um identificador de volume.
Yes
volumeAttributes.subscriptionID Especifique a ID da assinatura Azure em que a conta de armazenamento está localizada. ID de assinatura do Azure Não Se não estiver vazio, volumeAttributes.resourceGroup deverá ser fornecido.
volumeAttributes.resourceGroup Especifique o nome do grupo de recursos do Azure. myResourceGroup Não Se estiver vazio, o driver usará o mesmo nome de grupo de recursos que o cluster atual está usando.
volumeAttributes.storageAccount Especifique o nome de uma conta de armazenamento do Azure existente. storageAccountName Yes
volumeAttributes.containerName Especifique o nome do contêiner existente. contêiner Yes
volumeAttributes.protocol Especifique a montagem de BlobFuse, BlobFuse2 ou NFS v3. fuse, , fuse2nfs Não fuse
volumeAttributes.server Especifique o endereço do servidor da conta de armazenamento do Azure. Endereço do servidor existente, por exemplo <storage-account>.blob.core.windows.net Não Usa o endereço do servidor padrão para o ambiente de nuvem atual.
volumeAttributes.storageEndpointSuffix Especifique o sufixo do ponto de extremidade de armazenamento Azure. core.windows.netou o sufixo para outro Azure nuvem Não Usa o sufixo padrão para o ambiente de nuvem atual.
--- Os parâmetros a seguir são apenas para blobfuse --- --- ---
volumeAttributes.secretName Nome secreto que armazena o nome e a chave da conta de armazenamento (aplica-se apenas ao SMB). Não
volumeAttributes.secretNamespace Especifique o namespace do segredo para armazenar a chave da conta. default Não Namespace do PVC
volumeAttributes.getLatestAccountKey Obtenha a chave de conta de armazenamento mais recente com base no tempo de criação, em vez de usar a primeira chave. true, false Não false
nodeStageSecretRef.name Especifique o nome do segredo do Kubernetes que contém credenciais para preparar o volume. Nome do segredo do Kubernetes existente. O segredo deve conter uma das seguintes chaves: azurestorageaccountkey, , azurestorageaccountsastokenou msisecretazurestoragespnclientsecret. Não
nodeStageSecretRef.namespace Especifique o namespace do segredo. Namespace do Kubernetes Yes
--- Os parâmetros a seguir são apenas para o protocolo NFS --- --- ---
volumeAttributes.mountPermissions Especifique permissões de pasta montadas. 0777 Não
volumeAttributes.fsGroupChangePolicy Especifique como o driver altera a propriedade do volume. O driver ignora securityContext.fsGroupChangePolicy na especificação do pod. OnRootMismatch, , AlwaysNone Não OnRootMismatch
--- Os seguintes parâmetros são apenas para o recurso: blobfuse
Autenticação de Identidade Gerenciada e Nome Principal do Serviço
--- --- ---
volumeAttributes.AzureStorageAuthType Especifique o tipo de autenticação. Key, SAS, , MSISPN Não Key
volumeAttributes.AzureStorageIdentityClientID Especifique o ID do Cliente de Identidade. Não
volumeAttributes.AzureStorageIdentityObjectID Especifique a ID do objeto de identidade. Esse parâmetro foi preterido. Não
volumeAttributes.AzureStorageIdentityResourceID Especifique o identificador do recurso de identidade. Não
volumeAttributes.MSIEndpoint Especifique o ponto de extremidade MSI. Não
volumeAttributes.AzureStorageSPNClientID Especifique a ID de Cliente do Principal de Serviço (SPN) do Azure. Não
volumeAttributes.AzureStorageSPNTenantID Especifique a ID do locatário do Azure SPN. Não
volumeAttributes.AzureStorageAADEndpoint Especifique o endpoint do Microsoft Entra. Não
--- Os parâmetros a seguir são apenas para autenticação de identidade de carga de trabalho de blobfuse --- --- ---
volumeAttributes.ClientID Especifique a ID do cliente da identidade gerenciada usada para autenticação de identidade de carga de trabalho. ID do cliente de identidade gerenciada Não
volumeAttributes.mountWithWorkloadIdentityToken Monte o BlobFuse com um token de identidade de carga de trabalho. Esta capacidade está em pré-visualização. Especifique o valor como uma cadeia de caracteres. "true", "false" Não "false"
--- Os seguintes parâmetros são apenas para o recurso: blobfuse lê a chave da conta ou o token SAS do cofre de chaves --- --- ---
volumeAttributes.keyVaultURL Especifique o nome DNS do Azure Key Vault. {vault-name}.vault.azure.net Não
volumeAttributes.keyVaultSecretName Especifique o nome do segredo do Azure Key Vault. Nome da chave secreta existente do Azure Key Vault. Não
volumeAttributes.keyVaultSecretVersion Versão do segredo do Azure Key Vault. Versão existente Não Se estiver vazio, o driver usará a versão atual.

Criar um contêiner de armazenamento de Blob

Ao criar um recurso de armazenamento de Blobs do Azure para uso com o AKS, pode criar o recurso no grupo de recursos nó. Essa abordagem permite que o cluster do AKS acesse e gerencie o recurso de armazenamento de blobs.

  1. Obtenha o nome do grupo de recursos do nó do cluster do AKS usando o comando az aks show com o parâmetro --query nodeResourceGroup.

    az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv
    

    A saída do comando é semelhante ao seguinte exemplo:

    MC_myResourceGroup_myAKSCluster_eastus
    
  2. Se você criar a conta de armazenamento no grupo de recursos do nó, use o nome do grupo de recursos do nó retornado na etapa anterior (por exemplo, MC_myResourceGroup_myAKSCluster_eastus). Em seguida, siga as etapas em Gerenciar armazenamento de blobs para autorizar o acesso e criar um contêiner nessa conta de armazenamento.

Montar volume

Nesta seção, você montará o volume persistente usando o protocolo NFS ou Blobfuse.

A conta de armazenamento deve ter o NFS v3 e o namespace hierárquico habilitados. Montar o Armazenamento de Blobs usando o protocolo NFS v3 não é autenticado usando uma chave de conta. A sub-rede de nó do AKS deve ter acesso de rede à conta de armazenamento habilitada para NFS por meio de uma rede virtual selecionada ou ponto de extremidade privado. Verifique se os grupos de segurança de rede permitem o tráfego NFS nas portas 111 e 2048. Para obter mais informações sobre como configurar o acesso NFS à sua conta de armazenamento, consulte Montar Armazenamento de Blobs usando o protocolo NFS (Sistema de Arquivos de Rede) 3.0.

O exemplo a seguir demonstra como montar um contêiner de Armazenamento de Blobs como um volume persistente usando o protocolo NFS.

  1. Crie um arquivo nomeado pv-blob-nfs.yaml e cole o YAML a seguir. Emspec.csi.volumeAttributes, atualizar resourceGroup, storageAccount e containerName.

    Observação

    volumeHandle O valor deve ser um volumeID exclusivo para cada contêiner de blob de armazenamento idêntico no cluster. O caractere # e / são reservados para uso interno e não podem ser usados.

    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
    

    Observação

    Embora o atributo de capacidade da API do Kubernetes seja obrigatório, o driver csi de armazenamento de blobs do Azure não usa esse valor porque você pode gravar dados de forma flexível até atingir o limite de capacidade da sua conta de armazenamento. O valor é usado apenas para correspondência de tamanho entre PVs e PVCs. O exemplo usa um valor fictício de 1Pi; esse valor não define a capacidade do contêiner de Armazenamento de Blobs.

  2. Crie o PV usando o kubectl create comando:

    kubectl create -f pv-blob-nfs.yaml
    
  3. Crie um arquivo nomeado pvc-blob-nfs.yaml e cole no YAML a seguir. Em volumeName, atualize o valor para que corresponda ao nome do PV criado na etapa anterior.

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: pvc-blob
    spec:
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 10Gi
      volumeName: pv-blob
      storageClassName: azureblob-nfs-premium
    
  4. Crie o PVC usando o kubectl create comando:

    kubectl create -f pvc-blob-nfs.yaml
    

Usar o volume persistente

O seguinte arquivo YAML cria um pod que usa o PV ou PVC chamado pvc-blob, criado anteriormente para montar o Armazenamento de Blobs do Azure no caminho /mnt/blob especificado.

  1. Crie um arquivo nomeado nginx-pod-blob.yaml e cole no manifesto YAML a seguir. Verifique se corresponde claimName ao PVC criado anteriormente (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. Crie o pod e monte o PVC usando o kubectl create comando:

    kubectl create -f nginx-pod-blob.yaml
    
  3. Crie uma sessão de shell interativa com o pod para verificar o armazenamento de Blobs montado usando o comando kubectl exec:

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

    Sua saída deve ser semelhante ao exemplo de saída a seguir, que mostra que o armazenamento de Blob está montado no caminho /mnt/blob.

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