Crie e use um volume com o Armazenamento de Blobs do Azure no AKS (Serviço de Kubernetes do Azure)
Aplicativos baseados em contêiner geralmente precisam acessar e manter dados em um volume de dados externo. Se vários pods precisarem de acesso simultâneo ao mesmo volume de armazenamento, use o Armazenamento de Blobs do Azure para se conectar usando blobfuse ou o NFS (Network File System).
Este artigo mostra como:
- Trabalhe com um PV (volume persistente) dinâmico instalando o driver da CSI (Interface de Armazenamento de Contêiner) e criando dinamicamente um contêiner do Armazenamento de Blobs do Azure para anexar a um pod.
- Trabalhe com um PV estático criando um contêiner de Armazenamento de Blobs do Azure ou use um existente e anexe-o a um pod.
Para obter mais informações sobre o Kubernetes, veja Opções de armazenamento para aplicativos no AKS.
Antes de começar
Habilite o driver da CSI do armazenamento de Blobs no cluster do AKS.
Para dar suporte a uma conta de armazenamento do Azure DataLake Gen2 ao usar a montagem de blobfuse, você precisará fazer o seguinte:
- Para criar uma conta do ADLS usando o driver no provisionamento dinâmico, especifique
isHnsEnabled: "true"
nos parâmetros da classe de armazenamento. - Para habilitar o acesso do blobfuse a uma conta do ADLS no provisionamento estático, especifique a opção de montagem
--use-adls=true
no volume persistente. - Se você quiser habilitar uma conta de armazenamento com Namespace Hierárquico, os volumes persistentes existentes deverão ser remontados com a opção de montagem
--use-adls=true
.
- Para criar uma conta do ADLS usando o driver no provisionamento dinâmico, especifique
Sobre o cache de blobfuse
- Por padrão, o cache de blobfuse está localizado no diretório
/mnt
. Se a SKU da VM fornecer um disco temporário, o diretório/mnt
será montado no disco temporário. No entanto, se a SKU da VM não fornecer um disco temporário, o diretório/mnt
será montado no disco do sistema operacional. Você poderá definir a opção de montagem--tmp-path=
para especificar um diretório de cache diferente
- Por padrão, o cache de blobfuse está localizado no diretório
Provisionar um volume dinamicamente
Esta seção fornece diretrizes para administradores de cluster que desejam provisionar um ou mais volumes persistentes que incluem detalhes do Armazenamento de Blobs do Azure a ser usado por uma carga de trabalho. Uma declaração de volume persistente (PVC) usa o objeto de classe de armazenamento para provisionar dinamicamente um contêiner de armazenamento de Blobs do Azure.
Parâmetros de classe de armazenamento para volumes persistentes dinâmicos
A tabela a seguir inclui parâmetros que você pode usar para definir uma classe de armazenamento personalizada para sua reivindicação de volume persistente.
Nome | Descrição | Exemplo | Obrigatório | Valor padrão |
---|---|---|---|---|
skuName | Especifique um tipo de conta de armazenamento em disco do Azure (alias: storageAccountType ). |
Standard_LRS , Premium_LRS , Standard_GRS , Standard_RAGRS |
Não | Standard_LRS |
local | Especifique uma localização do Azure. | eastus |
No | Se estiver vazio, o driver usará o mesmo nome de local do cluster atual. |
resourceGroup | Especifique o nome do grupo de recursos do Azure. | myResourceGroup | No | Se estiver vazio, o driver usará o mesmo nome de grupo de recursos que o cluster atual. |
storageAccount | Especifique um nome de armazenamento em disco do Azure. | storageAccountName | Não | Quando um nome de conta de armazenamento específico não for fornecido, o driver procurará uma conta de armazenamento adequada que corresponda às configurações da conta no mesmo grupo de recursos. Se ele não encontrar uma conta de armazenamento correspondente, 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 privateEndpoint for especificado, um ponto de extremidade privado é criado para a conta de armazenamento. Para outros casos, um ponto de extremidade de serviço será criado para o protocolo NFS.1 | 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 VNET. |
protocolo | Especifique a montagem de blobfuse ou a montagem de NFSv3. | fuse , nfs |
Não | fuse |
containerName | Especifique o nome do contêiner existente (diretório). | contêiner | No | Se estiver vazio, o driver criará um novo nome de contêiner, começando com pvc-fuse blobfuse ou pvc-nfs para NFS v3. |
containerNamePrefix | Especifique o prefixo do diretório de armazenamento do Azure criado pelo driver. | my | Só pode conter letras minúsculas, números, hifens e comprimento que deve ter menos de 21 caracteres. | Não |
Servidor | 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>.privatelink.blob.core.windows.net . |
No | Se estiver vazio, o driver usará o nome de domínio DNS da conta de armazenamento em nuvem soberana ou padrão <storage-account>.blob.core.windows.net . |
allowBlobPublicAccess | Permitir ou não permitir o acesso público a todos os blobs ou contêineres para a conta de armazenamento criada pelo driver. | true ,false |
Não | false |
storageEndpointSuffix | Especifique o sufixo do ponto de extremidade de armazenamento do Azure. | core.windows.net |
No | Se estiver vazio, o driver usará o sufixo de ponto de extremidade de armazenamento padrão de acordo com o ambiente de nuvem. |
tags | Tags seriam criadas na nova conta de armazenamento. | Formato da tag: 'foo=aaa,bar=bbb' | Não | "" |
matchTags | Corresponder tags quando o driver tentar encontrar uma conta de armazenamento adequada. | true ,false |
Não | false |
--- | Os parâmetros a seguir são apenas para blobfuse | --- | --- | --- |
subscriptionID | Especifique a ID de assinatura do Azure em que o diretório de armazenamento de blobs será criado. | ID de assinatura do Azure | Não | Se não estiver vazio, resourceGroup deverá ser fornecido. |
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 |
secretName | Especifique o nome do segredo para armazenar a chave da conta. | No | ||
secretNamespace | Especifique o namespace do segredo para armazenar a chave da conta. | default ,kube-system , etc. |
No | namespace Pvc |
isHnsEnabled | Habilite Hierarchical namespace para a conta de armazenamento do Azure Data Lake. |
true ,false |
Não | false |
--- | Os parâmetros a seguir são apenas para o protocolo NFS | --- | --- | --- |
mountPermissions | Especifique permissões de pasta montadas. | O padrão é 0777 . Se definido como 0 , o driver não executará chmod após a montagem. |
0777 |
Não |
1 Se a conta de armazenamento for criada pelo driver, você só precisará especificar o parâmetro networkEndpointType: privateEndpoint
na classe de armazenamento. O driver CSI cria o ponto de extremidade privado 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.
Criar uma declaração de volume persistente usando a classe de armazenamento interna
Uma declaração de volume persistente (PVC) usa o objeto de classe de armazenamento para provisionar dinamicamente um contêiner de armazenamento de Blobs do Azure. O YAML a seguir pode ser usado para criar uma declaração de volume persistente de 5 GB de tamanho com acesso do tipo ReadWriteMany. Para obter mais informações sobre os modos de acesso, veja a documentação sobre Volume persistente de Kubernetes.
Crie um arquivo chamado
blob-nfs-pvc.yaml
e copie no YAML a seguir.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azure-blob-storage spec: accessModes: - ReadWriteMany storageClassName: azureblob-nfs-premium resources: requests: storage: 5Gi
Crie a declaração de volume persistente com o comando kubectl create:
kubectl create -f blob-nfs-pvc.yaml
Depois de concluído, o contêiner de armazenamento de Blobs será criado. Use o comando kubectl get para exibir o status do PVC:
kubectl get pvc azure-blob-storage
A saída do comando é semelhante ao seguinte exemplo:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
azure-blob-storage Bound pvc-b88e36c5-c518-4d38-a5ee-337a7dda0a68 5Gi RWX azureblob-nfs-premium 92m
Usar a declaração de volume persistente
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'.
Crie um arquivo chamado
blob-nfs-pv
e copie no YAML a seguir. Certifique-se de que claimName corresponda ao PVC criado na última etapa.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
Crie o pod com o comando kubectl apply:
kubectl apply -f blob-nfs-pv.yaml
Depois que o pod estiver no estado de execução,execute o comando a seguir para criar um arquivo chamado
test.txt
.kubectl exec mypod -- touch /mnt/blob/test.txt
Para validar que o disco está montado corretamente execute o seguinte comando e verifique se está vendo o arquivo
test.txt
na saída:kubectl exec mypod -- ls /mnt/blob
A saída do comando é semelhante ao seguinte exemplo:
test.txt
Criar uma classe de armazenamento personalizada
As classes de armazenamento padrão se adaptam aos cenários mais comuns, mas não a todos. 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. O primeiro usa o protocolo NFS e o segundo usa o Blobfuse.
Classe de armazenamento usando o protocolo NFS
Neste exemplo, o manifesto a seguir configura a montagem de um contêiner de armazenamento de Blobs usando o protocolo NFS. Use-o para adicionar o parâmetro de marcas.
Crie um arquivo chamado
blob-nfs-sc.yaml
e cole de acordo com o manifesto de exemplo a seguir.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: azureblob-nfs-premium provisioner: blob.csi.azure.com parameters: protocol: nfs tags: environment=Development volumeBindingMode: Immediate allowVolumeExpansion: true mountOptions: - nconnect=4
Crie a classe de armazenamento com o comando kubectl apply:
kubectl apply -f blob-nfs-sc.yaml
A saída do comando é semelhante ao seguinte exemplo:
storageclass.storage.k8s.io/blob-nfs-premium created
Classe de armazenamento usando blobfuse
Neste exemplo, o manifesto a seguir configura o uso de blobfuse e monta um contêiner do Armazenamento de Blobs. Use-o para atualizar o parâmetro skuName.
Crie um arquivo chamado
blobfuse-sc.yaml
e cole de acordo com o manifesto de exemplo a seguir.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: azureblob-fuse-premium 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.
Crie a classe de armazenamento com o comando kubectl apply:
kubectl apply -f blobfuse-sc.yaml
A saída do comando é semelhante ao seguinte exemplo:
storageclass.storage.k8s.io/blob-fuse-premium created
Provisionar um volume estaticamente
Esta seção fornece diretrizes para administradores de cluster que desejam criar um ou mais volumes persistentes que incluem detalhes do Armazenamento de Blobs do Azure a ser usado por uma carga de trabalho.
Parâmetros de provisionamento estático para volumes persistentes
A tabela a seguir inclui parâmetros que você pode usar para definir um volume persistente.
Nome | Descrição | Exemplo | Obrigatório | Valor padrão |
---|---|---|---|---|
volumeHandle | Especifique um valor que o driver possa usar para identificar exclusivamente o contêiner de blob de armazenamento no cluster. | Uma maneira recomendada de produzir um valor exclusivo é combinar o nome globalmente exclusivo da conta de armazenamento e o nome do contêiner: {account-name}_{container-name} .Observação: os caracteres # e / são reservados para uso interno e não podem ser usados em um identificador de volume. |
Sim | |
volumeAttributes.resourceGroup | Especifique o nome do grupo de recursos do Azure. | myResourceGroup | No | Se estiver vazio, o driver usa 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 | Sim | |
volumeAttributes.protocol | Especifique a montagem de blobfuse ou a montagem de NFS v3. | fuse , nfs |
Não | fuse |
--- | 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). | No | ||
volumeAttributes.secretNamespace | Especifique o namespace do segredo para armazenar a chave da conta. | default |
No | namespace Pvc |
nodeStageSecretRef.name | Especifique o nome do segredo que armazena um dos seguintes:azurestorageaccountkey azurestorageaccountsastoken msisecret azurestoragespnclientsecret . |
Não | Nome do segredo do Kubernetes existente | |
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 |
No | |
--- | Os parâmetros a seguir são apenas para o Configuração de rede virtual do NFS | --- | --- | --- |
vnetResourceGroup | Especifique o grupo de recursos da VNet que hospeda a rede virtual. | myResourceGroup | No | Se estiver vazio, o driver usará o valor vnetResourceGroup especificado no arquivo de configuração de nuvem do Azure. |
vnetName | Especifique o nome da rede virtual. | aksVNet | No | Se estiver vazio, o driver usará o valor vnetName especificado no arquivo de configuração de nuvem do Azure. |
subnetName | Especifique o nome da sub-rede existente do nó do agente. | aksSubnet | No | Se estiver vazio, o driver usará o valor subnetName no arquivo de configuração de nuvem do Azure. |
--- | Os parâmetros a seguir são apenas para o recurso: blobfuse Autenticação de identidade gerenciada e Nome da Entidade de Serviço |
--- | --- | --- |
volumeAttributes.AzureStorageAuthType | Especifique o tipo de autenticação. | Key , SAS , MSI , SPN |
No | Key |
volumeAttributes.AzureStorageIdentityClientID | Especifique a ID do Cliente de Identidade. | Não | ||
volumeAttributes.AzureStorageIdentityResourceID | Especifique a ID do Recurso de Identidade. | No | ||
volumeAttributes.MSIEndpoint | Especifique o ponto de extremidade do MSI. | No | ||
volumeAttributes.AzureStorageSPNClientID | Especifique a ID do cliente SPN (Nome da Entidade de Serviço do Azure). | No | ||
volumeAttributes.AzureStorageSPNTenantID | Especifique a ID do Locatário do SPN do Azure. | No | ||
volumeAttributes.AzureStorageAADEndpoint | Especifique o ponto de extremidade do Microsoft Entra. | Não | ||
--- | 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 | No | |
volumeAttributes.keyVaultSecretName | Especifique o nome do segredo do Azure Key Vault. | Nome do segredo do Azure Key Vault existente. | No | |
volumeAttributes.keyVaultSecretVersion | Versão do segredo do Azure Key Vault. | Versão existente | No | Se estiver vazio, o driver usará a versão atual. |
Crie 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.
Neste artigo, crie o contêiner no grupo de recursos do nó. Primeiro, obtenha o nome do grupo de recursos com o comando az aks show e adicione o parâmetro de consulta --query nodeResourceGroup
. O exemplo a seguir recebe o grupo de recursos do nó para o cluster do AKS chamado myAKSCluster no grupo de recursos chamado myResourceGroup:
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
Em seguida, crie um contêiner para armazenar blobs seguindo as etapas no Gerenciamento do armazenamento de blobs para autorizar o acesso e, em seguida, criar o contêiner.
Montar volume
Nesta seção, você monta o volume persistente usando o protocolo NFS ou o Blobfuse.
A montagem do armazenamento de Blobs usando o protocolo NFS v3 não se autentica usando uma chave de conta. Seu cluster do AKS precisa residir na mesma rede virtual ou rede virtual emparelhada como o nó do agente. A única maneira de proteger os dados em sua conta de armazenamento é usando uma rede virtual e outras configurações de segurança de rede. Para obter mais informações sobre como configurar o acesso NFS à sua conta de armazenamento, consulte oArmazenamento de Blobs de Montagem 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.
Crie um arquivo chamado
pv-blob-nfs.yaml
e copie no YAML a seguir. EmstorageClass
, atualizarresourceGroup
,storageAccount
econtainerName
.Observação
O valor
volumeHandle
deve ser um volumeID exclusivo para cada contêiner de blob de armazenamento idêntico no cluster. Os caracteres#
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 mountOptions: - nconnect=4 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 capacity da API do Kubernetes seja obrigatório, esse valor não é usado pelo driver da CSI do Armazenamento de Blobs do Azure porque você pode gravar dados de modo flexível até atingir o limite de capacidade de sua conta de armazenamento. O valor do atributo
capacity
é usado apenas para correspondência de tamanho entre PersistentVolumes e PersistentVolumeClaims. É recomendável usar um valor alto fictício. O pod vê um volume montado com um tamanho fictício de 5 Petabytes.Execute o seguinte comando para criar o volume persistente usando o comando kubectl create que faz referência ao arquivo YAML criado anteriormente:
kubectl create -f pv-blob-nfs.yaml
Crie um arquivo
pvc-blob-nfs.yaml
com um PersistentVolumeClaim. Por exemplo:kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-blob spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi volumeName: pv-blob storageClassName: azureblob-nfs-premium
Execute o seguinte comando para criar a declaração de volume persistente usando o comando kubectl create que faz referência ao arquivo YAML criado anteriormente:
kubectl create -f pvc-blob-nfs.yaml
Usar o volume persistente
O YAML a seguir cria um pod que usa o volume persistente ou a declaração de volume persistente denominada pvc-blob criada anteriormente para montar o Armazenamento de Blobs do Azure no caminho /mnt/blob
.
Crie um arquivo chamado
nginx-pod-blob.yaml
e copie no YAML a seguir. Verifique se o claimName corresponde ao PVC criado na etapa anterior ao criar um volume persistente para o NFS ou Blobfuse.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
Execute o seguinte comando para criar o pod e montar o PVC usando o comando kubectl create que faz referência ao arquivo YAML criado anteriormente:
kubectl create -f nginx-pod-blob.yaml
Execute o seguinte comando para criar uma sessão de shell interativa com o pod para verificar o armazenamento de Blobs montado:
kubectl exec -it nginx-blob -- df -h
A saída do comando é semelhante ao seguinte exemplo:
Filesystem Size Used Avail Use% Mounted on ... blobfuse 14G 41M 13G 1% /mnt/blob ...
Próximas etapas
- Para saber como usar o driver CSI para armazenamento de BLOBs do Azure, confira Usar o Armazenamento de BLOBs do Azure com driver da CSI.
- Para obter as práticas recomendadas associadas, veja Práticas recomendadas para armazenamento e backups no AKS.
Azure Kubernetes Service