Criar e utilizar um volume com Discos do Azure no Azure Kubernetes Service (AKS)
Um volume persistente representa uma parte do armazenamento provisionado para uso com pods do Kubernetes. Você pode usar um volume persistente com um ou vários pods e provisioná-lo dinamicamente ou estaticamente. Este artigo mostra como criar dinamicamente volumes persistentes com Discos do Azure em um cluster do Serviço Kubernetes do Azure (AKS).
Nota
Um disco do Azure só pode ser montado com o tipo de modo de acesso ReadWriteOnce, que o torna disponível para um nó no AKS. Esse 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, consulte Modos de acesso Kubernetes PersistentVolume.
Este artigo mostra-lhe como:
- Trabalhe com um volume persistente dinâmico (PV) instalando o driver CSI (Container Storage Interface) 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 volumes do Kubernetes, consulte Opções de armazenamento para aplicativos no AKS.
Antes de começar
Verifique se você tem a CLI do Azure versão 2.0.59 ou posterior instalada e configurada. Executar
az --version
para localizar a versão. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).O driver CSI do Azure Disk tem um limite de volume por nó. A contagem de volumes muda com base no tamanho do pool de nós/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
Se o limite de volume por nó for um problema para sua carga de trabalho, considere usar o Armazenamento de Contêiner do Azure para volumes persistentes em vez de drivers CSI.
Provisionar dinamicamente um volume
Esta seção fornece orientação para administradores de cluster que desejam provisionar um ou mais volumes persistentes que incluem detalhes do armazenamento em disco do Azure para uso 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 do Azure Disk.
Parâmetros de classe de armazenamento para volumes dinâmicos persistentes
A tabela a seguir inclui parâmetros que você pode usar para definir uma classe de armazenamento personalizada para seu PersistentVolumeClaim.
Nome | Significado | Valor disponível | Obrigatório | Default value |
---|---|---|---|---|
skuName | Tipo de conta de armazenamento do Azure Disks (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 , para btrfs Linux, ntfs para Windows |
Não | ext4 para Linux, ntfs para Windows |
Modo de armazenamento em cache | Azure Data Disk Host Cache Setting(PremiumV2_LRS e UltraSSD_LRS suportam None apenas o modo de cache) |
None , ReadOnly , ReadWrite |
Não | ReadOnly |
resourceGroup | Especificar o grupo de recursos para os Discos do Azure | Nome do grupo de recursos existente | Não | Se estiver vazio, o driver usará o mesmo nome de grupo de recursos do cluster AKS atual |
DiskIOPSReadWrite | Capacidade de disco UltraSSD ou SSD Premium v2 IOPS (mínimo: 2 IOPS/GiB) | 100~160000 | Não | 500 |
DiskMBpsReadWrite | Capacidade de taxa de transferência de disco UltraSSD ou SSD Premium v2 (mínimo: 0,032/GiB) | 1~2000 | Não | 100 |
LogicalSectorSize | Tamanho do setor lógico em bytes para ultra disco. Os valores suportados são 512 ad 4096. 4096 é o padrão. | 512 , 4096 |
Não | 4096 |
etiquetas | Tags de disco do Azure | Formato da etiqueta: 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 defeito), EncryptionAtRestWithPlatformAndCustomerKeys |
Não | "" |
writeAcceleratorEnabled | Acelerador de Escrita em Discos do Azure | true , false |
Não | "" |
networkAccessPolicy | Propriedade NetworkAccessPolicy para impedir a geração do URI 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 só deve ser aplicado ao disco Premium e quando o tamanho > do disco for de 512 GB. Ultra e disco compartilhado não é suportado. O bursting está desativado 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) |
|
ID da subscrição | Especifique a ID da assinatura do Azure onde os Discos do Azure são criados. | Id de subscrição do Azure | Não | Se não estiver vazio, resourceGroup deve ser fornecido. |
--- | Os seguintes parâmetros são apenas para v2 | --- | --- | --- |
maxAções | O número total de montagens de disco compartilhadas permitidas para o disco. Definir o valor como 2 ou mais habilita réplicas de anexo. | Os valores suportados dependem do tamanho do disco. Consulte Partilhar um disco gerido do Azure para obter valores suportados. | Não | 1 |
maxMountReplicaCount | O número de anexos de réplicas a serem mantidos. | Esse valor deve estar no intervalo [0..(maxShares - 1)] |
Não | Se accessMode for ReadWriteMany , o padrão é 0 . Caso contrário, o padrão é maxShares - 1 |
Classes de armazenamento incorporadas
As classes de armazenamento definem como uma unidade de armazenamento é criada dinamicamente com um volume persistente. Para obter mais informações sobre classes de armazenamento do Kubernetes, consulte Classes de armazenamento do Kubernetes.
Cada cluster AKS inclui quatro classes de armazenamento pré-criadas, duas delas configuradas para funcionar com Discos do Azure:
- A classe de armazenamento padrão provisiona um disco do Azure SSD padrão.
- As SSD padrão apoiam o armazenamento padrão e fornecem armazenamento económico e, ao mesmo tempo, proporcionam um desempenho fiável.
- A classe de armazenamento managed-csi-premium provisiona um Disco do Azure premium.
- Discos de alto desempenho e baixa latência baseados em SSD de volta aos discos Premium. 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, que é apoiada
managed-csi
pelo armazenamento localmente redundante (LRS) SSD padrão.
- Discos de alto desempenho e baixa latência baseados em SSD de volta aos discos Premium. 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, que é apoiada
- Em vigor a partir da versão 1.29 do Kubernetes, quando você implanta clusters do Serviço Kubernetes do Azure (AKS) em várias zonas de disponibilidade, o AKS agora utiliza o armazenamento com redundância de zona (ZRS) para criar discos gerenciados dentro de classes de armazenamento internas.
- O ZRS garante a replicação síncrona de seus discos gerenciados do Azure em várias zonas de disponibilidade do Azure na região escolhida. Essa estratégia de redundância aumenta a resiliência de seus aplicativos e protege seus dados contra falhas no datacenter.
- No entanto, é importante observar que o armazenamento com redundância de zona (ZRS) tem um custo mais alto em comparação com o armazenamento com redundância local (LRS). Se a otimização de custos for uma prioridade, você poderá criar uma nova classe de armazenamento com o parâmetro LRS SKU name e usá-la em sua 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 kubectl edit sc
comando ou pode criar sua própria classe de armazenamento personalizada. Por exemplo, se você quiser usar um disco de tamanho 4 TiB, você deve criar uma classe de armazenamento que define cachingmode: None
porque o cache de disco não é suportado para discos de 4 TiB e maiores. Para obter mais informações sobre classes de armazenamento e como criar sua própria classe de armazenamento, consulte Opções de armazenamento para aplicativos no AKS.
Você pode ver as classes de armazenamento pré-criadas usando o kubectl get sc
comando. O exemplo a seguir mostra as classes de armazenamento pré-criadas disponíveis em um cluster 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
Nota
As declarações de volume persistente 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 32GiB para discos S4 ou P4 a 32TiB para discos S80 ou P80 (em 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 AKS. Para obter mais informações, consulte Preço e desempenho de discos gerenciados.
Criar uma declaração de volume persistente
Uma declaração de volume persistente provisiona automaticamente o armazenamento com base em uma classe de armazenamento. Nesse caso, um PVC pode usar uma das classes de armazenamento precriadas para criar um disco gerenciado padrão ou premium do Azure.
Crie um arquivo nomeado
azure-pvc.yaml
e copie no manifesto a seguir. A declaração solicita um disco chamadoazure-managed-disk
que tem 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
Gorjeta
Para criar um disco que usa armazenamento premium, use storageClassName: managed-csi-premium
em vez de managed-csi.
Crie a declaração de volume persistente usando o
kubectl apply
comando 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 Pending
status indica que ele está pronto para ser usado por um pod.
Verifique o status do PVC usando o
kubectl describe pvc
comando.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 nomeado
azure-pvc-disk.yaml
e copie no manifesto a seguir. Esse manifesto 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
kubectl apply
comando.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 seu disco do Azure montado no
/mnt/azure
diretório. Verifique a configuração do pod usando okubectl describe
comando.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" [...]
Utilizar os discos ultra do Azure
Para usar o Ultra Disk do Azure, consulte Usar ultradiscos no Serviço Kubernetes do Azure (AKS).
Usando marcas do Azure
Para obter mais informações sobre como usar marcas do Azure, consulte Usar marcas do Azure no Serviço Kubernetes do Azure (AKS).
Provisionar estaticamente um volume
Esta seção fornece orientação para administradores de cluster que desejam criar um ou mais volumes persistentes que incluem detalhes dos Discos do Azure para uso 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 | Default value |
---|---|---|---|---|
volumeHandle | URI de disco do Azure | /subscriptions/{sub-id}/resourcegroups/{group-name}/providers/microsoft.compute/disks/{disk-id} |
Sim | N/A |
volumeAttributes.fsType | Tipo de sistema de ficheiros | ext4 , ext3 , ext2 , xfs , para btrfs Linux, ntfs para Windows |
Não | ext4 para Linux, ntfs para Windows |
volumeAttributes.partição | Número da partição do disco existente (suportado apenas no Linux) | 1 , 2 , 3 |
Não | Vazio (sem partição) - Certifique-se de que o formato da partição é como -part1 |
volumeAttributes.cachingMode | Configuração do cache do host de disco | None , ReadOnly , ReadWrite |
Não | ReadOnly |
Criar um disco do Azure
Ao criar um disco do Azure para uso com o AKS, você pode criar o recurso de disco no grupo de recursos do nó. Essa abordagem permite que o cluster 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 Serviço Kubernetes do Azure (AKS) para seu cluster a Contributor
função para o grupo de recursos do disco.
Identifique o nome do grupo de recursos usando o
az aks show
comando e adicione 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
Crie um disco usando o
az disk create
comando. Especifique o nome do grupo de recursos do nó e um nome para o recurso de disco, como myAKSDisk. O exemplo a seguir cria um disco de 20GiB e gera a ID do disco depois que ele é criado. Se você precisar criar um disco para uso com contêineres do Windows Server, adicione o--os-type windows
parâmetro para formatar corretamente o disco.az disk create \ --resource-group MC_myResourceGroup_myAKSCluster_eastus \ --name myAKSDisk \ --size-gb 20 \ --query id --output tsv
Nota
Os Discos do Azure são cobrados por SKU para um tamanho específico. Essas SKUs variam de 32GiB para discos S4 ou P4 a 32TiB para discos S80 ou P80 (em 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 AKS. Consulte Preços e desempenho de discos gerenciados.
O ID do recurso de disco é exibido assim que o comando for concluído com êxito, conforme mostrado na saída do exemplo a seguir. Use o ID do disco para montar o disco na próxima seção.
/subscriptions/<subscriptionID>/resourceGroups/MC_myAKSCluster_myAKSCluster_eastus/providers/Microsoft.Compute/disks/myAKSDisk
Montar disco como um volume
Crie um arquivo pv-azuredisk.yaml com um PersistentVolume. Atualize
volumeHandle
com o ID do recurso de disco da etapa anterior. Para 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 um 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 o PersistentVolume e o PersistentVolumeClaim usando o
kubectl apply
comando 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 seu PersistentVolumeClaim foi criado e vinculado ao PersistentVolume usando o
kubectl get pvc
comando.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 fazer referência a seu 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 o
kubectl apply
comando.kubectl apply -f azure-disk-pod.yaml
Clean up resources (Limpar recursos)
Quando terminar de usar os recursos criados neste artigo, você poderá removê-los usando o kubectl delete
comando.
# Remove the pod
kubectl delete -f azure-pvc-disk.yaml
# Remove the persistent volume claim
kubectl delete -f azure-pvc.yaml
Próximos passos
- Para saber como usar o driver CSI para armazenamento de Discos do Azure, consulte Usar o armazenamento de Discos do Azure com driver CSI.
- Para obter as práticas recomendadas associadas, consulte Práticas recomendadas para armazenamento e backups no AKS.
Azure Kubernetes Service