Pular para o conteúdo principal

Armazenamento no AKS

Use Azure Disks para bancos de dados. Azure Files para armazenamento compartilhado. Blob para grandes conjuntos de dados. Todo o resto é caso especial.

Storage classes (integradas)​

O AKS já vem com estas storage classes pré-configuradas. Não crie as suas a menos que precise de parâmetros personalizados.

Storage ClassBackendModo de AcessoCaso de Uso
managed-csiAzure Disks (Premium LRS)ReadWriteOnceBancos de dados, apps stateful com pod único
managed-csi-premiumAzure Disks (Premium LRS)ReadWriteOnceMesmo que acima, premium explícito
azurefile-csiAzure Files (Standard)ReadWriteManyConfigurações compartilhadas, conteúdo CMS
azurefile-csi-premiumAzure Files (Premium)ReadWriteManyArmazenamento compartilhado que precisa de IOPS
azureblob-nfsBlob NFSReadWriteManyGrandes conjuntos de dados, dados de treinamento de ML
Opinião

Use managed-csi (Azure Disks) como padrão para qualquer coisa stateful. Só recorra ao Azure Files quando múltiplos pods precisarem de acesso simultâneo de leitura/escrita aos mesmos dados.

Ciclo de vida do PersistentVolume​

Ciclo de Vida do PersistentVolume

Sempre use provisionamento dinâmico a menos que tenha discos pré-existentes para importar. O provisionamento dinâmico cria o recurso Azure automaticamente quando um PVC é submetido.

Exemplo de provisionamento dinâmico​

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: postgres-data
spec:
accessModes:
- ReadWriteOnce
storageClassName: managed-csi
resources:
requests:
storage: 100Gi

Só isso. O AKS cria um disco gerenciado Premium SSD, anexa ao node que está rodando seu pod e monta. Nenhuma criação manual de disco necessária.

Políticas de recuperação (reclaim policies)​

PolíticaComportamento ao Deletar PVCQuando Usar
DeleteDisco/compartilhamento é destruídoWorkloads efêmeros, dev/test, caches
RetainDisco/compartilhamento é preservado (órfão)Bancos de dados em produção, dados que você não pode perder
aviso

A política de recuperação padrão para managed-csi é Delete. Se você deletar o PVC, seu disco e todos os dados serão perdidos. Para bancos de dados em produção, crie uma StorageClass personalizada com reclaimPolicy: Retain.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: managed-csi-retain
provisioner: disk.csi.azure.com
parameters:
skuName: Premium_LRS
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true

Modos de acesso​

ModoSignificadoSuportado Por
ReadWriteOnce (RWO)Leitura/escrita em node únicoAzure Disks
ReadOnlyMany (ROX)Somente leitura em múltiplos nodesAzure Disks, Azure Files
ReadWriteMany (RWX)Leitura/escrita em múltiplos nodesAzure Files, Blob NFS
informação

Azure Disks são dispositivos de bloco -- eles se conectam fisicamente a um node por vez. Se você precisa que múltiplos pods em nodes diferentes escrevam no mesmo volume, você precisa do Azure Files ou Blob NFS.

Erros comuns​

  1. Usar Azure Files para bancos de dados-- Azure Files tem latência mais alta que Disks. Use Disks para qualquer coisa sensível a IOPS.
  2. Esquecer volumeBindingMode: WaitForFirstConsumer -- Sem isso, o disco pode ser provisionado em uma zona onde nenhum node consegue montá-lo.
  3. Não configurar allowVolumeExpansion: true -- Você vai precisar redimensionar discos. Habilite isso desde o início.
  4. Usar política de recuperação Delete para dados de produção -- Um kubectl delete pvc acidental destrói seu banco de dados.

Recursos​