Criar e gerir volumes persistentes (PVs) com armazenamento Azure Blob no Azure Kubernetes Service (AKS)

Se vários pods precisarem de acesso simultâneo ao mesmo volume de armazenamento, pode usar o armazenamento Azure Blob para se ligar usando blobfuse ou Network File System (NFS).

Este artigo mostra-lhe como criar dinâmica e estaticamente contentores de armazenamento Azure Blob para utilização por múltiplos pods num cluster Azure Kubernetes Service (AKS).

Pré-requisitos

  • O driver CSI de armazenamento Azure Blob está ativado no seu cluster AKS.

  • Uma conta de armazenamento com NFS v3 para que possas montar um volume persistente usando o protocolo NFS. Não podes ativar o NFS v3 numa conta de armazenamento existente. Para mais informações, consulte Criar uma conta NFS v3.

  • Para suportar uma conta Azure Data Lake Storage ao usar o blobfuso montado, complete 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 permitir o acesso blobfuso a uma conta Data Lake Storage em provisionamento estático, especifique a opção --use-adls=true de montagem no volume persistente.
    • Se for ativar uma conta de armazenamento com Namespace Hierárquico, os volumes persistentes existentes devem ser remontados com a --use-adls=true opção de montagem.
  • Por defeito, a cache do blobfuse está localizada no /mnt diretório. Se o SKU VM fornecer um disco temporário, o /mnt diretório é montado no disco temporário. No entanto, se o SKU da VM não fornecer um disco temporário, o /mnt diretório estiver montado no disco do sistema operativo, podes definir --tmp-path= a opção de montagem para especificar um diretório de cache diferente.

Use classes de armazenamento incorporadas para criar PVs dinâmicos com armazenamento Azure Blob

Uma classe de armazenamento é usada para definir como um contêiner de armazenamento de Blob do Azure é criado. Uma conta de armazenamento é criada automaticamente no grupo de recursos do nó para uso com a classe de armazenamento para armazenar o contêiner de armazenamento de Blob do Azure. Quando usas drivers CSI de armazenamento no AKS, há dois componentes adicionais incorporados que usam o driver CSI de armazenamento Azure Blob.

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

Observação

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

Pode selecionar um dos SKUs de redundância de armazenamento do Azure seguintes para o parâmetro na definição da classe de armazenamento.

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

Criar classes de armazenamento personalizadas para PVs dinâmicos com armazenamento Azure Blob

As classes de armazenamento padrão são adequadas para a maioria dos cenários. Em alguns casos, pode querer personalizar a sua própria classe de armazenamento com os seus próprios parâmetros. Nesta secção, apresentamos dois exemplos: um usando protocolo NFS e outro usando blobfuse.

Exemplo de classe de armazenamento personalizada usando protocolo NFS

O manifesto neste exemplo monta um contentor de armazenamento de blob usando o protocolo NFS. Podes usá-lo para adicionar o tags parâmetro.

  1. Crie um ficheiro com nome 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 semelhante à saída de exemplo a seguir:

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

Exemplo de classe de armazenamento personalizada usando blobfuse

O manifesto neste exemplo utiliza blobfuse e monta um contentor de armazenamento Blob. Podes usá-lo para atualizar o skuName parâmetro.

  1. Crie um ficheiro com nome 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 semelhante à saída de exemplo a seguir:

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

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

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

  • Conta de armazenamento: skuName, location, resourceGroup, subscriptionID, storageAccountnetworkEndpointType, requireInfraEncryptionaccessTierallowSharedKeyAccesspublicNetworkAccessallowBlobPublicAccesstagse .matchTags
  • Contentor e ponto final: protocol, containerName, containerNamePrefix, server, storageEndpointSuffix, useDataPlaneAPI, softDeleteBlobs, , softDeleteContainers, e enableBlobVersioning.
  • BlobFuse: storeAccountKey, getLatestAccountKey, secretName, secretNamespace, e isHnsEnabled.
  • NFS: mountPermissions e fsGroupChangePolicy.
  • Rede virtual: vnetResourceGroup, vnetName, subnetName, e vnetLinkName.

Configurar parâmetros de conta de armazenamento para PVs dinâmicos com armazenamento Azure Blob

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 predefinido
skuName Especifique um tipo de conta de armazenamento Azure (alias: storageAccountType). Standard_LRS, Premium_LRS, Standard_GRS, Standard_RAGRS, Standard_ZRS, Premium_ZRS Não Standard_LRS
location Especifique uma localização Azure. eastus Não Se estiver vazio, o driver usa o mesmo nome de localização do cluster atual.
resourceGroup Especifique um nome de grupo de recursos do Azure. myResourceGroup Não Se estiver vazio, o driver usará o mesmo nome de grupo de recursos do cluster atual.
subscriptionID Especifique o ID de subscrição Azure onde o diretório de armazenamento blob é criado. Id de subscrição do Azure Não Se não estiver vazio, resourceGroup deve ser fornecido.
storageAccount Especifique um nome de conta de armazenamento do Azure. storageAccountName Não Quando não é fornecido um nome específico de conta de armazenamento, o driver procura uma conta de armazenamento adequada que corresponda às definições da conta dentro do mesmo grupo de recursos. Se não encontrar uma conta de armazenamento correspondente, cria uma nova. No entanto, se um nome de conta de armazenamento for especificado, a conta de armazenamento já deverá existir.
networkEndpointType Especifique o tipo de ponto de extremidade de rede para a conta de armazenamento criada pelo driver. Se especificar privateEndpoint, o driver cria um endpoint privado para a conta de armazenamento. Noutros casos, o driver cria um endpoint de serviço para o protocolo NFS. "", privateEndpoint Não "". Para um cluster AKS, adicione o nome do cluster AKS à função de Contribuidor no grupo de recursos que hospeda a rede virtual.
accessTier Especifique o nível de acesso para a conta de armazenamento. Hot, Cool, Premium Não Usa o nível padrão para o tipo de conta de armazenamento selecionado. Contas Premium suportam apenas Premium.
allowBlobPublicAccess Permita ou não o acesso público a todos os blobs ou contentores de uma conta de armazenamento criada pelo driver. true, false Não false
allowSharedKeyAccess Permita ou não permita o acesso a chaves partilhadas para uma conta de armazenamento criada pelo driver. Este parâmetro aplica-se a montagens NFS e montagens BlobFuse que usam identidade gerida. true, false Não true
requireInfraEncryption Exigir uma camada secundária de encriptação gerida pela plataforma para dados em repouso numa 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, Disabled, SecuredByPerimeter Não Usa o padrão do Armazenamento do Azure.
tags Crie etiquetas numa nova conta de armazenamento. Formato da etiqueta: foo=aaa,bar=bbb Não ""
matchTags Compare as etiquetas quando o condutor procura uma conta de armazenamento adequada. true, false Não false

Configure parâmetros de contentores e endpoints para PVs dinâmicos com armazenamento Azure Blob

Use os seguintes parâmetros para configurar o contentor, protocolo de montagem, endpoint de armazenamento e etiquetas para um PV provisionado dinamicamente:

Nome Description Valores disponíveis Obrigatório Valor predefinido
protocol Especifique montagem BlobFuse, BlobFuse2 ou NFS v3. fuse, fuse2, nfs Não fuse
containerName Especifique o nome do contentor (diretório) existente. contentor Não Se estiver vazio, o driver cria um novo nome de contentor, começando por pvc-fuse para blobfuse ou pvc-nfs para NFS v3.
containerNamePrefix Especifique o prefixo do diretório de armazenamento Azure criado pelo driver. Só pode conter letras minúsculas, números e hífens e deve ter menos de 21 caracteres. Não
server Especifique o nome de domínio da conta de armazenamento Azure. Nome de domínio DNS da conta de armazenamento existente, <storage-account>.blob.core.windows.netpor exemplo. Não Se estiver vazio, o driver usa o nome de domínio DNS padrão da conta de armazenamento na nuvem ou de outra conta de armazenamento na 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 Armazenamento do Azure data plane para criar e eliminar contentores. Esta opção pode evitar a limitação do fornecedor de recursos de armazenamento, mas falha quando o firewall da conta de armazenamento ou as regras da rede virtual bloqueiam o acesso ao plano de dados. true, false Não false
softDeleteBlobs Ativa a eliminação suave para blobs e especifica o período de retenção em dias. Um período de retenção, por exemplo 7 Não Disabled
softDeleteContainers Ative a eliminação suave para contentores e especifique o período de retenção em dias. Um período de retenção, por exemplo 7 Não Disabled
enableBlobVersioning Ative a versão de blob. Não podes ativar a versão quando protocol é nfs ou isHnsEnabled é true. true, false Não false

Configure parâmetros BlobFuse para PVs dinâmicos com armazenamento Azure Blob

Os seguintes parâmetros aplicam-se apenas quando usar o BlobFuse para um PV provisionado dinamicamente:

Nome Description Valores disponíveis Obrigatório Valor predefinido
storeAccountKey Especifique a chave da conta da loja no Kubernetes Secret.

Nota:
false significa que o driver utiliza a identidade do 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 momento de criação em vez de usar a primeira chave. true, false Não false
secretName Especifique o nome secreto 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 Espaço de nomes em PVC
isHnsEnabled Ativar Hierarchical namespace uma conta Azure Data Lake Storage. true,false Não false

Configure parâmetros NFS para PVs dinâmicos com armazenamento Azure Blob

O seguinte parâmetro aplica-se apenas quando se usa NFS para um PV provisionado dinamicamente:

Nome Description Valores disponíveis Obrigatório Valor predefinido
mountPermissions Especifique as permissões de pasta montada. A predefinição é 0777. Se estiver definido para 0, o driver não executará chmod após a montagem. Não 0777
fsGroupChangePolicy Especifique como o driver altera a posse do volume. O driver ignora securityContext.fsGroupChangePolicy na especificação do pod. OnRootMismatch, Always, None Não OnRootMismatch

Configure parâmetros de rede virtual para PVs dinâmicos com armazenamento Azure Blob

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

Nome Description Valores disponíveis Obrigatório Valor predefinido
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 cloud do Azure.
vnetName Especifique o nome da rede virtual. Nome da rede virtual existente Não Usa o vnetName valor na configuração cloud do Azure.
subnetName Especifique uma ou mais sub-redes de nós AKS existentes. Separe vários nomes de subredes com vírgulas. Nomes de sub-redes existentes Não Atualiza todas as subredes da rede virtual do cluster.
vnetLinkName Especifique o link de rede virtual associado à zona DNS privada. Nome de ligação de rede virtual existente ou novo Não <vnetName>-vnetlink

Configure endpoints privados para PVs dinâmicos com armazenamento Azure Blob

Observação

Se a conta de armazenamento for criada pelo driver, então só precisas de especificar networkEndpointType: privateEndpoint o parâmetro na classe de armazenamento. O driver CSI cria o ponto de extremidade privado e a zona DNS privada (chamada privatelink.blob.core.windows.net) juntamente com a conta. Se trouxeres a tua própria conta de armazenamento, precisarás de criar o ponto de extremidade privado para a conta de armazenamento. Se estiver a usar armazenamento Azure Blob num cluster isolado em rede, deve criar uma classe de armazenamento personalizada com "networkEndpointType: privateEndpoint". Pode usar o seguinte exemplo de manifesto 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 provisão dinâmica

Um PVC utiliza o objeto da classe de armazenamento para provisionar dinamicamente um armazenamento do Azure Blob. Pode usar o manifesto YAML de exemplo nesta sessão para criar um PVC de 5 GB com acesso ReadWriteMany. Para mais informações sobre modos de acesso, veja Modos de acesso PV do Kubernetes.

  1. Crie um ficheiro com o nome 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. Veja o estado do PVC com o kubectl get comando:

    kubectl get pvc azure-blob-storage
    

    A sua saída deve assemelhar-se ao seguinte exemplo de saída, que mostra que o PVC está num 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 blob provisionado dinamicamente num pod

O YAML seguinte cria um pod que utiliza a reivindicação de volume persistente azure-blob-storage para montar o armazenamento Azure Blob no caminho /mnt/blob.

  1. Crie um arquivo chamado blob-nfs-pv e cole o seguinte manifesto YAML. Certifique-se de que corresponde claimName ao PVC que 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. Quando o pod estiver a correr com sucesso, crie um novo ficheiro nomeado test.txt usando o seguinte comando:

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

    kubectl exec mypod -- ls /mnt/blob
    

    A sua saída deve assemelhar-se ao seguinte exemplo de saída, que mostra o ficheiro test.txt que criou no armazenamento Azure Blob montado.

    test.txt
    

Use um StatefulSet para gerir o ciclo de vida de um volume com armazenamento Azure Blob

Para que um volume de armazenamento persista para sua carga de trabalho, você pode usar um StatefulSet. Este estado facilita a correspondência de volumes existentes com novos pods que substituem os que falharam. Os exemplos seguintes demonstram como configurar um StatefulSet para armazenamento Blob usando o protocolo NFS ou Blobfuse.

Observação

Se estiver a usar o protocolo NFS, a identidade do plano de controlo do seu cluster AKS (nome do seu cluster AKS) precisa de ser atribuída ao papel Contribuidor na rede virtual e ao grupo de segurança de rede.

  1. Crie um ficheiro com o nome 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
    

Crie um PV estático com armazenamento em Blob do Azure

As secções seguintes fornecem instruções para criar um PV estático com armazenamento Azure Blob. Um PV estático é um volume persistente que um administrador cria manualmente. Este PV está disponível para uso em cápsulas no cluster. Para usar um PV estático, cria-se um PVC que faz referência ao PV e depois cria-se um pod que faz referência ao PVC.

Parâmetros de volume CSI para PVs estáticos com armazenamento Azure Blob

A tabela seguinte lista parâmetros que pode usar na fonte de volume CSI para um PV estático com armazenamento Azure Blob:

Nome Meaning Valores disponíveis Obrigatório Valor predefinido
volumeHandle Especifique um valor que o driver pode usar para identificar de forma única o contentor de blob de armazenamento no cluster. Uma forma recomendada de produzir um valor único é combinar o nome da conta de armazenamento globalmente único e o nome do contentor: {account-name}_{container-name}.
Nota: Os caracteres #, / são reservados para uso interno e não podem ser utilizados num identificador de volume.
Yes
volumeAttributes.subscriptionID Especifique o ID de subscrição do Azure onde a conta de armazenamento está localizada. Id de subscrição do Azure Não Se não estiver vazio, volumeAttributes.resourceGroup deve ser fornecido.
volumeAttributes.resourceGroup Especificar o nome do grupo de recursos Azure. myResourceGroup Não Se estiver vazio, o driver usará o mesmo nome de grupo de recursos do cluster atual.
volumeAttributes.storageAccount Especifique um nome de conta de armazenamento do Azure existente. storageAccountName Yes
volumeAttributes.containerName Especifique o nome do contentor existente. contentor Yes
volumeAttributes.protocol Especifique montagem BlobFuse, BlobFuse2 ou NFS v3. fuse, fuse2, nfs Não fuse
volumeAttributes.server Especifique o endereço do servidor da conta de armazenamento do Azure. Endereço de servidor existente, por exemplo <storage-account>.blob.core.windows.net Não Usa o endereço padrão do servidor para o ambiente cloud atual.
volumeAttributes.storageEndpointSuffix Especifique o sufixo endpoint de armazenamento Azure. core.windows.netou o sufixo para outra nuvem Azure Não Usa o sufixo padrão para o ambiente cloud atual.
--- Os seguintes parâmetros são apenas para blobfuse --- --- ---
volumeAttributes.secretName Nome secreto que armazena o nome da conta de armazenamento e a chave (aplica-se apenas a SMB). Não
volumeAttributes.secretNamespace Especifique o namespace do segredo para armazenar a chave da conta. default Não Espaço de nomes em PVC
volumeAttributes.getLatestAccountKey Obtenha a chave de conta de armazenamento mais recente com base no momento de criação em vez de usar a primeira chave. true, false Não false
nodeStageSecretRef.name Especifique o nome do segredo Kubernetes que contém as credenciais para a encenação do volume. Nome secreto existente do Kubernetes. O segredo deve conter uma das seguintes chaves: azurestorageaccountkey, azurestorageaccountsastoken, msisecret, ou azurestoragespnclientsecret. Não
nodeStageSecretRef.namespace Especifique o namespace do secreto. Namespace do Kubernetes Yes
--- Os seguintes parâmetros são apenas para o protocolo NFS --- --- ---
volumeAttributes.mountPermissions Especifique as permissões de pasta montada. 0777 Não
volumeAttributes.fsGroupChangePolicy Especifique como o driver altera a posse do volume. O driver ignora securityContext.fsGroupChangePolicy na especificação do pod. OnRootMismatch, Always, None Não OnRootMismatch
--- Os seguintes parâmetros são apenas para a funcionalidade: blobfuse
Autenticação de Identidade Gerida e Autenticação por Nome Principal de Serviço
--- --- ---
volumeAttributes.AzureStorageAuthType Especifique o tipo de autenticação. Key, SAS, MSI, SPN Não Key
volumeAttributes.AzureStorageIdentityClientID Especifique o ID do cliente. Não
volumeAttributes.AzureStorageIdentityObjectID Especifique o ID do objeto identidade. Este parâmetro foi preterido. Não
volumeAttributes.AzureStorageIdentityResourceID Especifique o ID do Recurso de Identidade. Não
volumeAttributes.MSIEndpoint Especifique o endpoint MSI. Não
volumeAttributes.AzureStorageSPNClientID Especifique o ID do cliente Azure Service Principal Name (SPN). Não
volumeAttributes.AzureStorageSPNTenantID Especifique o ID do Tenant do Azure SPN. Não
volumeAttributes.AzureStorageAADEndpoint Especifique o endpoint do Microsoft Entra. Não
--- Os seguintes parâmetros referem-se apenas à autenticação da identidade da carga de trabalho do blobfuse. --- --- ---
volumeAttributes.ClientID Especifique o ID do cliente da identidade gerida usada para a autenticação da identidade da carga de trabalho. ID de cliente de identidade gerida Não
volumeAttributes.mountWithWorkloadIdentityToken Monte o BlobFuse com um token de identidade de carga de trabalho. Esta capacidade encontra-se em versão preliminar. Especifique o valor como uma cadeia. "true", "false" Não "false"
--- Os seguintes parâmetros são apenas para a funcionalidade: ler a chave da conta ou token SAS com o blobfuse a partir do cofre de chaves --- --- ---
volumeAttributes.keyVaultURL Especificar o nome DNS Azure Key Vault. {nome-cofre}.vault.azure.net Não
volumeAttributes.keyVaultSecretName Especifique o nome do segredo no Azure Key Vault. Nome secreto existente do Azure Key Vault. Não
volumeAttributes.keyVaultSecretVersion Versão secreta do Azure Key Vault. Versão existente Não Se estiver vazio, o driver usa a versão atual.

Criar um contentor de armazenamento Blob

Quando crias um recurso de armazenamento Azure Blob para usar com o AKS, podes criar o recurso no grupo de recursos de nós. Esta abordagem permite ao cluster AKS aceder e gerir o recurso de armazenamento de blobs.

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

    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 criar a conta de armazenamento no grupo de recursos de nós, use o nome do grupo de recursos de nós devolvido no passo anterior (por exemplo, MC_myResourceGroup_myAKSCluster_eastus). Depois, siga os passos em Gerir armazenamento de blobs para autorizar o acesso e crie um contentor nessa conta de armazenamento.

Volume de montagem

Nesta secção, monta o volume persistente usando o protocolo NFS ou Blobfuse.

A conta de armazenamento deve ter o NFS v3 e o namespace hierárquico ativados. Montar armazenamento Blob usando o protocolo NFS v3 não autentica usando uma chave de conta. A sub-rede do nó AKS deve ter acesso à rede à conta de armazenamento habilitada pelo NFS através de uma rede virtual selecionada ou ponto final privado. Certifique-se de que os grupos de segurança de rede permitem tráfego NFS nas portas 111 e 2048. Para mais informações sobre como configurar o acesso NFS à sua conta de armazenamento, consulte Mount Armazenamento de Blobs utilizando o protocolo Network File System (NFS) 3.0.

O exemplo seguinte demonstra como montar um contentor de armazenamento Blob como um volume persistente usando o protocolo NFS.

  1. Crie um ficheiro com o nome pv-blob-nfs.yaml e cole o seguinte YAML. Em spec.csi.volumeAttributes, atualizar resourceGroup, storageAccounte containerName.

    Observação

    volumeHandle value deve ser um volumeID único para cada container de armazenamento blob idêntico no cluster. O carácter # 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 capacidadeda API Kubernetes seja obrigatório, o driver CSI de armazenamento Azure Blob não usa este valor porque pode escrever dados de forma flexível até atingir o limite de capacidade da sua conta de armazenamento. O valor é usado apenas para a correspondência de tamanho entre PVs e PVCs. O exemplo usa um valor fictício de 1Pi; este valor não define a capacidade do contentor de armazenamento Blob.

  2. Crie o PV usando o kubectl create comando:

    kubectl create -f pv-blob-nfs.yaml
    
  3. Crie um ficheiro nomeado pvc-blob-nfs.yaml e cole o YAML seguinte. Em volumeName, atualize o valor para corresponder ao nome do PV criado no passo 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
    

Utilize o volume persistente

O YAML seguinte cria um pod que utiliza o PV ou PVC nomeado pvc-blob criado anteriormente para montar o armazenamento Azure Blob no caminho /mnt/blob.

  1. Crie um ficheiro com nome nginx-pod-blob.yaml e cole no seguinte manifesto YAML. Certifique-se de que 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 a cápsula e monte o PVC usando o kubectl create comando:

    kubectl create -f nginx-pod-blob.yaml
    
  3. Crie uma sessão interativa de shell com o pod para verificar se o armazenamento Blob está corretamente montado usando o seguinte kubectl exec comando:

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

    A sua saída deve assemelhar-se ao seguinte exemplo de saída, que mostra que o Armazenamento Blob está montado no caminho /mnt/blob.

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