Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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=truede 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=trueopção de montagem.
- Para criar uma conta Data Lake Storage usando o driver no provisionamento dinâmico, especifique
Por defeito, a cache do blobfuse está localizada no
/mntdiretório. Se o SKU VM fornecer um disco temporário, o/mntdiretório é montado no disco temporário. No entanto, se o SKU da VM não fornecer um disco temporário, o/mntdiretó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.
Crie um ficheiro com nome
blob-nfs-sc.yamle 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: trueCrie a classe de armazenamento usando o
kubectl applycomando:kubectl apply -f blob-nfs-sc.yamlSua 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.
Crie um ficheiro com nome
blobfuse-sc.yamle 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.Crie a classe de armazenamento usando o
kubectl applycomando:kubectl apply -f blobfuse-sc.yamlSua 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, eenableBlobVersioning. -
BlobFuse:
storeAccountKey,getLatestAccountKey,secretName,secretNamespace, eisHnsEnabled. -
NFS:
mountPermissionsefsGroupChangePolicy. -
Rede virtual:
vnetResourceGroup,vnetName,subnetName, evnetLinkName.
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.
Crie um ficheiro com o nome
blob-nfs-pvc.yamle cole no seguinte manifesto YAML:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azure-blob-storage spec: accessModes: - ReadWriteMany storageClassName: azureblob-nfs-premium resources: requests: storage: 5GiCrie o PVC usando o
kubectl createcomando:kubectl create -f blob-nfs-pvc.yamlVeja o estado do PVC com o
kubectl getcomando:kubectl get pvc azure-blob-storageA sua saída deve assemelhar-se ao seguinte exemplo de saída, que mostra que o PVC está num
Boundestado: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.
Crie um arquivo chamado
blob-nfs-pve cole o seguinte manifesto YAML. Certifique-se de que correspondeclaimNameao 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-storageCrie o pod usando o
kubectl applycomando:kubectl apply -f blob-nfs-pv.yamlQuando o pod estiver a correr com sucesso, crie um novo ficheiro nomeado
test.txtusando o seguinte comando:kubectl exec mypod -- touch /mnt/blob/test.txtValide que o disco está corretamente montado usando o seguinte comando para listar os ficheiros no diretório montado:
kubectl exec mypod -- ls /mnt/blobA sua saída deve assemelhar-se ao seguinte exemplo de saída, que mostra o ficheiro
test.txtque 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.
Crie um ficheiro com o nome
azure-blob-nfs-ss.yamle 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: 100GiCrie o StatefulSet usando o
kubectl createcomando: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.
Obtenha o nome do grupo de recursos de nós do seu cluster AKS usando o
az aks showcomando com o--query nodeResourceGroupparâmetro.az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsvA saída do comando é semelhante ao seguinte exemplo:
MC_myResourceGroup_myAKSCluster_eastusSe 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.
Crie um ficheiro com o nome
pv-blob-nfs.yamle cole o seguinte YAML. Emspec.csi.volumeAttributes, atualizarresourceGroup,storageAccountecontainerName.Observação
volumeHandlevalue 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: nfsObservaçã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.Crie o PV usando o
kubectl createcomando:kubectl create -f pv-blob-nfs.yamlCrie um ficheiro nomeado
pvc-blob-nfs.yamle cole o YAML seguinte. EmvolumeName, 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-premiumCrie o PVC usando o
kubectl createcomando: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.
Crie um ficheiro com nome
nginx-pod-blob.yamle cole no seguinte manifesto YAML. Certifique-se de que correspondeclaimNameao 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-blobCrie a cápsula e monte o PVC usando o
kubectl createcomando:kubectl create -f nginx-pod-blob.yamlCrie uma sessão interativa de shell com o pod para verificar se o armazenamento Blob está corretamente montado usando o seguinte
kubectl execcomando:kubectl exec -it nginx-blob -- df -hA 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 ...