Criar e usar um volume com Discos do Azure no AKS (Serviço de Kubernetes do Azure)
Um volume persistente representa uma parte do armazenamento que foi provisionada para uso com pods do Kubernetes. Você pode usar um volume persistente com um ou muitos pods e ele pode ser provisionado dinamicamente ou estaticamente. Este artigo mostra como criar dinamicamente volumes persistentes com o Azure Disks em um cluster do Serviço de Kubernetes do Azure (AKS).
Observação
Um disco do Azure só pode ser montado com o modo de aceso do tipo ReadWriteOnce, que o torna disponível para apenas um único nó no AKS. Este modo de acesso ainda permite que vários pods acessem o volume quando os pods são executados no mesmo nó. Para obter mais informações, confira Modos de acesso ao PersistentVolume do Kubernetes.
Este artigo mostra como:
- Trabalhe com um volume persistente (PV) dinâmico instalando o driver da Interface de Armazenamento de Contêiner (CSI) e criando dinamicamente um ou mais discos gerenciados do Azure para anexar a um pod.
- Trabalhe com um PV estático criando um ou mais discos gerenciados 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
Certifique-se de possuir a CLI do Azure versão 2.0.59 ou posterior instalada e configurada. Execute
az --version
para encontrar a versão. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure.O driver CSI do Disco do Azure tem um limite de volume por nó. A contagem de volumes é alterada com base no tamanho do nó/pool de nós. Execute o comando kubectl get para determinar o número de volumes que podem ser alocados por nó:
kubectl get CSINode <nodename> -o yaml
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 Disco do Azure a ser usado por uma carga de trabalho. Uma PVC (declaração de volume persistente) usa o objeto de classe de armazenamento para provisionar dinamicamente um contêiner de armazenamento de Disco do Azure.
Parâmetros de classe de armazenamento para PersistentVolumes dinâmicos
A tabela a seguir inclui parâmetros que você pode usar para definir uma classe de armazenamento customizada para seu PersistentVolumeClaim.
Nome | Significado | Valor disponível | Obrigatório | Valor padrão |
---|---|---|---|---|
skuName | Tipo de conta de armazenamento para Discos do Azure (alias: storageAccountType ) |
Standard_LRS , Premium_LRS , StandardSSD_LRS , PremiumV2_LRS , UltraSSD_LRS , Premium_ZRS , StandardSSD_ZRS |
Não | StandardSSD_LRS |
fsType | Tipo de Sistema de Arquivos | ext4 , ext3 , ext2 , xfs e btrfs para Linux, ntfs para Windows |
Não | ext4 para Linux, ntfs para Windows |
cachingMode | Configuração do Cache de Host do Disco de Dados do Azure (PremiumV2_LRS e UltraSSD_LRS só dão suporte ao modo de cache None ) |
None , ReadOnly , ReadWrite |
Não | ReadOnly |
resourceGroup | Especifique o grupo de recursos para os Discos do Azure. | Nome do grupo de recursos existente | Não | Se estiver vazio, o driver usa o mesmo nome de grupo de recursos que o cluster do AKS atual está usando. |
DiskIOPSReadWrite | Disco UltraSSD ou Premium SSD v2 Capacidade IOPS (mínimo: 2 IOPS/GiB) | 100~160000 | Não | 500 |
DiskMBpsReadWrite | Disco UltraSSD ou Premium SSD v2 Capacidade de taxa de transferência (mínimo: 0,032/GiB) | 1~2000 | Não | 100 |
LogicalSectorSize | Tamanho do setor lógico em bytes para disco ultra. Os valores compatíveis são 512 e 4096. O padrão é 4096. | 512 , 4096 |
Não | 4096 |
marcas | Marcas do Disco do Azure | Formato de marca: key1=val1,key2=val2 |
Não | "" |
diskEncryptionSetID | ResourceId do conjunto de criptografia de disco a ser usado para habilitar a criptografia em repouso | formato: /subscriptions/{subs-id}/resourceGroups/{rg-name}/providers/Microsoft.Compute/diskEncryptionSets/{diskEncryptionSet-name} |
Não | "" |
diskEncryptionType | Tipo de criptografia do conjunto de criptografia de disco. | EncryptionAtRestWithCustomerKey (por padrão),EncryptionAtRestWithPlatformAndCustomerKeys |
Não | "" |
writeAcceleratorEnabled | Acelerador de Gravação nos Discos do Azure | true , false |
Não | "" |
networkAccessPolicy | Propriedade NetworkAccessPolicy para impedir que a geração de URI de SAS para um disco ou um instantâneo | AllowAll , DenyAll , AllowPrivate |
Não | AllowAll |
diskAccessID | ID do Recurso do Azure do recurso DiskAccess para usar pontos de extremidade privados em discos | Não | `` | |
enableBursting | Habilite o bursting sob demanda além do destino de desempenho provisionado do disco. O bursting sob demanda deve ser aplicado somente em disco Premium e quando o tamanho do disco > for 512 GB. Não há suporte para disco Ultra e compartilhado. O bursting está desabilitado por padrão. | true , false |
Não | false |
useragent | Agente de usuário usado para atribuição de uso do cliente | Não | Useragent gerado formatado driverName/driverVersion compiler/version (OS-ARCH) |
|
subscriptionID | Especificar a ID da assinatura do Azure em que os Discos do Azure são criados. | ID de assinatura do Azure | Não | Se não estiver vazio, resourceGroup deverá ser fornecido. |
--- | Os parâmetros a seguir são apenas para a v2 | --- | --- | --- |
maxShares | O número total de montagens de disco compartilhado permitidas para o disco. Definir o valor como 2 ou mais habilita réplicas de anexo. | Os valores com suporte dependem do tamanho do disco. Confira Compartilhar um disco gerenciado do Azure para obter os valores com suporte. | Não | 1 |
maxMountReplicaCount | O número de anexos de réplicas a serem mantidos. | Esse valor deve estar no intervalo [0..(maxShares - 1)] |
No | Se accessMode for ReadWriteMany , o padrão será 0 . Caso contrário, o padrão será maxShares - 1 |
Classes de armazenamento internas
Uma classe de armazenamento é usada para definir como uma unidade de armazenamento é criada dinamicamente com um volume persistente. Para obter mais informações sobre classes de armazenamento Kubernetes, confira Classes de Armazenamento Kubernetes.
Cada cluster do AKS inclui quatro classes de armazenamento criadas previamente, com duas delas configuradas para funcionar com os discos do Azure:
- A classe de armazenamento padrão provisiona um disco SSD padrão do Azure.
- O armazenamento padrão tem o suporte de SSDs padrão e fornece armazenamento econômico e desempenho confiável.
- A classe de armazenamento managed-csi-premium provisiona um disco Premium do Azure.
- Apoiados por disco de baixa latência e alto desempenho baseado em SSD. Eles são ideais para VMs que executam cargas de trabalho de produção. Ao usar o driver CSI do Disco do Azure no AKS, você também pode usar a classe de armazenamento
managed-csi
, que é suportada pelo armazenamento SSD Standard com redundância local (LRS).
- Apoiados por disco de baixa latência e alto desempenho baseado em SSD. Eles são ideais para VMs que executam cargas de trabalho de produção. Ao usar o driver CSI do Disco do Azure no AKS, você também pode usar a classe de armazenamento
- A partir do Kubernetes versão 1.29, ao implantar clusters do AKS (Serviço de Kubernetes do Azure) em várias zonas de disponibilidade, o AKS agora utiliza o ZRS (armazenamento com redundância de zona) para criar discos gerenciados em classes de armazenamento internas.
- O ZRS garante a replicação síncrona dos discos gerenciados do Azure em várias zonas de disponibilidade do Azure na região escolhida. Essa estratégia de redundância melhora a resiliência dos aplicativos e protege os dados contra falhas de datacenter.
- No entanto, é importante observar que o ZRS (armazenamento com redundância de zona) tem um custo mais alto em comparação ao LRS (armazenamento com redundância local). Se a otimização de custo for uma prioridade, você poderá criar uma nova classe de armazenamento com o parâmetro de nome de SKU do LRS e usá-la em sua PVC (Declaração de Volume Persistente).
A redução do tamanho de um PVC não é suportada devido ao risco de perda de dados. Você pode editar uma classe de armazenamento existente usando o comando kubectl edit sc
ou criar sua própria classe de armazenamento personalizada. Por exemplo, para usar um disco de tamanho 4 TiB, você precisa criar uma classe de armazenamento que defina cachingmode: None
, pois o cache de disco não tem suporte em discos 4 TIB ou maiores. Para obter mais informações sobre classes de armazenamento e como criar a sua, consulte Opções de armazenamento para aplicativos no AKS.
Você pode ver as classes de armazenamento pré-criadas por meio do comando kubectl get sc
. O exemplo a seguir mostra as classes de armazenamento criadas previamente disponíveis dentro de um cluster do AKS:
kubectl get sc
A saída do comando é semelhante ao seguinte exemplo:
NAME PROVISIONER AGE
default (default) disk.csi.azure.com 1h
managed-csi disk.csi.azure.com 1h
Observação
Declarações de volume persistentes são especificadas em GiB, mas os discos gerenciados do Azure são cobrados por SKU para um tamanho específico. Essas SKUs variam de 32 GiB para discos S4 ou P4 a 32 TiB para discos S80 ou P80 (na visualização). A taxa de transferência e o desempenho de IOPS de um disco gerenciado Premium dependem da SKU e do tamanho da instância dos nós no cluster do AKS. Para saber mais, confira Preços e desempenho dos discos gerenciados.
Criar uma declaração de volume persistente
Uma declaração de volume persistente (PVC) é usado para provisionar automaticamente o armazenamento com base em uma classe de armazenamento. Nesse caso, uma PVC pode usar uma das classes de armazenamento pré-criadas para criar um disco gerenciado standard ou premium do Azure.
Crie um arquivo chamado
azure-pvc.yaml
e copie-o para o manifesto a seguir. A declaração solicita um disco chamadoazure-managed-disk
que tenha 5 GB de tamanho com acesso ReadWriteOnce. A classe de armazenamento managed-csi é especificada como a classe de armazenamento.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: azure-managed-disk spec: accessModes: - ReadWriteOnce storageClassName: managed-csi resources: requests: storage: 5Gi
Dica
Para criar um disco que use o armazenamento Premium, use storageClassName: managed-csi-premium
em vez de managed-csi.
Crie a declaração de volume persistente por meio do comando
kubectl apply
e especifique seu arquivo azure-pvc.yaml.kubectl apply -f azure-pvc.yaml
A saída do comando é semelhante ao seguinte exemplo:
persistentvolumeclaim/azure-managed-disk created
Usar o volume persistente
Depois de criar a declaração de volume persistente, você deve verificar se ela tem um status de Pending
. O status Pending
indica que está pronto para ser usado por um pod.
Verifique o status do pod por meio do comando
kubectl describe pvc
.kubectl describe pvc azure-managed-disk
A saída do comando é semelhante ao seguinte exemplo condensado:
Name: azure-managed-disk Namespace: default StorageClass: managed-csi Status: Pending [...]
Crie um arquivo chamado
azure-pvc-disk.yaml
e copie-o para o manifesto a seguir. O manifesto a seguir cria um pod NGINX básico que usa a declaração de volume persistente chamada azure-managed-disk para montar o disco do Azure no caminho/mnt/azure
. Para contêineres do Windows Server, especifique um mountPath usando a convenção de caminho do Windows, como “D:” .kind: Pod apiVersion: v1 metadata: name: mypod spec: containers: - name: mypod image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - mountPath: "/mnt/azure" name: volume readOnly: false volumes: - name: volume persistentVolumeClaim: claimName: azure-managed-disk
Crie o pod usando o comando
kubectl apply
.kubectl apply -f azure-pvc-disk.yaml
A saída do comando é semelhante ao seguinte exemplo:
pod/mypod created
Agora você tem um pod em execução com o disco do Azure montado no diretório
/mnt/azure
. Verifique a configuração do pod por meio do comandokubectl describe
.kubectl describe pod mypod
A saída do comando é semelhante ao seguinte exemplo:
[...] Volumes: volume: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: azure-managed-disk ReadOnly: false default-token-smm2n: Type: Secret (a volume populated by a Secret) SecretName: default-token-smm2n Optional: false [...] Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 2m default-scheduler Successfully assigned mypod to aks-nodepool1-79590246-0 Normal SuccessfulMountVolume 2m kubelet, aks-nodepool1-79590246-0 MountVolume.SetUp succeeded for volume "default-token-smm2n" Normal SuccessfulMountVolume 1m kubelet, aks-nodepool1-79590246-0 MountVolume.SetUp succeeded for volume "pvc-faf0f176-8b8d-11e8-923b-deb28c58d242" [...]
Usar os Discos Ultra do Azure
Para usar o disco ultra do Azure, consulte Usar discos ultra no AKS (Serviço de Kubernetes do Azure).
Uso de marcas do Azure
Para mais informações como usar as marcas do Azure, confira Usar as marcas do Azure no AKS (Serviço de Kubernetes do Azure).
Provisionar um volume estaticamente
Essa secção fornece orientação para administradores de cluster que pretendem criar um ou mais volumes persistentes que incluam detalhes de Discos Azure para utilização por uma carga de trabalho.
Parâmetros de provisionamento estático para um volume persistente
A tabela a seguir inclui parâmetros que você pode usar para definir um volume persistente.
Nome | Significado | Valor disponível | Obrigatório | Valor padrão |
---|---|---|---|---|
volumeHandle | URI do disco do Azure | /subscriptions/{sub-id}/resourcegroups/{group-name}/providers/microsoft.compute/disks/{disk-id} |
Sim | N/D |
volumeAttributes.fsType | Tipo do sistema de arquivos | ext4 , ext3 , ext2 , xfs e btrfs para Linux, ntfs para Windows |
Não | ext4 para Linux, ntfs para Windows |
volumeAttributes.partition | Número de partição do disco existente (com suporte apenas no Linux) | 1 , 2 , 3 |
Não | Vazio (sem partição) – Verifique se o formato da partição é semelhante a -part1 |
volumeAttributes.cachingMode | Configuração do cache do host de disco | None , ReadOnly , ReadWrite |
Não | ReadOnly |
Criar um disco do Azure
Quando você cria um disco do Azure para uso com o AKS, pode criar o recurso de disco no grupo de recursos nó. Essa abordagem permite que o cluster do AKS acesse e gerencie o recurso de disco. Se, em vez disso, você criar o disco em um grupo de recursos separado, deverá conceder à identidade gerenciada do AKS (Serviço de Kubernetes do Azure) para seu cluster a função Contributor
para o grupo de recursos do disco.
Identifique o nome do grupo de recursos com o comando
az aks show
e adicione 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
Crie um disco usando o comando
az disk create
. Especifique o nome do grupo de recursos do nó obtido no comando anterior e, em seguida, um nome para o recurso de disco, como myAKSDisk. O exemplo a seguir cria um disco de 20 GiB e gera a ID do disco após a criação. Se você precisar criar um disco para usar com contêineres do Windows Server, adicione o parâmetro--os-type windows
para formatar corretamente o disco.az disk create \ --resource-group MC_myResourceGroup_myAKSCluster_eastus \ --name myAKSDisk \ --size-gb 20 \ --query id --output tsv
Observação
Os Discos do Azure são cobrados por SKU de um tamanho específico. Essas SKUs variam de 32GiB para discos S4 ou P4 a 32TiB para discos S80 ou P80 (na versão prévia). A taxa de transferência e o desempenho de IOPS de um disco gerenciado Premium dependem da SKU e do tamanho da instância dos nós no cluster do AKS. Confira Preços e desempenho do Managed Disks.
A ID de recurso de disco é exibida depois que o comando foi concluído com êxito, conforme mostra o seguinte exemplo de saída. Essa ID do disco é usada para montar o disco na próxima seção.
/subscriptions/<subscriptionID>/resourceGroups/MC_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk
Montar o disco como um volume
Crie um arquivo pv-azuredisk.yaml com um PersistentVolume. Atualize
volumeHandle
com a ID do recurso de disco da etapa anterior. No caso de contêineres do Windows Server, especifique ntfs para o parâmetro fsType.apiVersion: v1 kind: PersistentVolume metadata: annotations: pv.kubernetes.io/provisioned-by: disk.csi.azure.com name: pv-azuredisk spec: capacity: storage: 20Gi accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain storageClassName: managed-csi csi: driver: disk.csi.azure.com volumeHandle: /subscriptions/<subscriptionID>/resourceGroups/MC_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk volumeAttributes: fsType: ext4
Crie um arquivo pvc-azuredisk.yaml com uma PersistentVolumeClaim que usa o PersistentVolume.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-azuredisk spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi volumeName: pv-azuredisk storageClassName: managed-csi
Crie PersistentVolume e PersistentVolumeClaim pode meio do comando
kubectl apply
e faça referência aos dois arquivos YAML que você criou.kubectl apply -f pv-azuredisk.yaml kubectl apply -f pvc-azuredisk.yaml
Verifique se o PersistentVolumeClaim foi criado e associado ao PersistentVolume por meio do comando
kubectl get pvc
.kubectl get pvc pvc-azuredisk
A saída do comando é semelhante ao seguinte exemplo:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-azuredisk Bound pv-azuredisk 20Gi RWO 5s
Crie um arquivo azure-disk-pod.yaml para referenciar a PersistentVolumeClaim. Para contêineres do Windows Server, especifique um mountPath usando a convenção de caminho do Windows, como “D:” .
apiVersion: v1 kind: Pod metadata: name: mypod spec: nodeSelector: kubernetes.io/os: linux containers: - image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine name: mypod resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi volumeMounts: - name: azure mountPath: /mnt/azure volumes: - name: azure persistentVolumeClaim: claimName: pvc-azuredisk
Aplique a configuração e monte o volume usando por meio do comando
kubectl apply
.kubectl apply -f azure-disk-pod.yaml
Limpar os recursos
Quando terminar os recursos criados neste artigo, você poderá removê-los por meio do comando kubectl delete
.
# Remove the pod
kubectl delete -f azure-pvc-disk.yaml
# Remove the persistent volume claim
kubectl delete -f azure-pvc.yaml
Próximas etapas
- Para saber como usar o driver CSI para armazenamento de Discos do Azure, confira Usar o armazenamento de Discos do Azure com driver CSI.
- Para obter as práticas recomendadas associadas, veja Práticas recomendadas para armazenamento e backups no AKS.
Azure Kubernetes Service