Opções de armazenamento para aplicativos no Serviço Kubernetes do Azure (AKS)
Os aplicativos em execução no Serviço Kubernetes do Azure (AKS) podem precisar armazenar e recuperar dados. Enquanto algumas cargas de trabalho de aplicativos podem usar armazenamento local e rápido em nós vazios desnecessários, outras exigem armazenamento que persiste em volumes de dados mais regulares na plataforma Azure.
Vários pods podem precisar:
- Partilhe os mesmos volumes de dados.
- Reanexe volumes de dados se o pod for reagendado em um nó diferente.
Também pode ser necessário coletar e armazenar dados confidenciais ou informações de configuração do aplicativo em pods.
Este artigo apresenta os principais conceitos que fornecem armazenamento para seus aplicativos no AKS:
Dimensionamento de disco padrão do sistema operacional
Quando você cria um novo cluster ou adiciona um novo pool de nós a um cluster existente, o número de vCPUs por padrão determina o tamanho do disco do sistema operacional. O número de vCPUs é baseado na SKU da VM. A tabela a seguir lista o tamanho padrão do disco do sistema operacional para cada SKU de VM:
Núcleos de SKU de VM (vCPUs) | Camada de disco padrão do sistema operacional | IOPS Aprovisionadas | Taxa de transferência provisionada (Mbps) |
---|---|---|---|
1 - 7 | P10/128G | 500 | 100 |
8 - 15 | P15/256G | 1100 | 125 |
16 - 63 | P20/512G | 2300 | 150 |
64+ | P30/1024G | 5000 | 200 |
Importante
O dimensionamento de disco padrão do sistema operacional só é usado em novos clusters ou pools de nós quando os discos do sistema operacional efêmero não são suportados e um tamanho de disco do sistema operacional padrão não é especificado. O tamanho padrão do disco do sistema operacional pode afetar o desempenho ou o custo do cluster. Não é possível alterar o tamanho do disco do sistema operacional após a criação do cluster ou do pool de nós. Esse dimensionamento de disco padrão afeta clusters ou pools de nós criados em julho de 2022 ou posterior.
Disco de SO efémero
Por padrão, o Azure replica automaticamente o disco do sistema operacional de uma máquina virtual para o Armazenamento do Azure para evitar a perda de dados quando a VM é realocada para outro host. No entanto, como os contêineres não são projetados para que o estado local persista, esse comportamento oferece valor limitado enquanto fornece algumas desvantagens. Essas desvantagens incluem, mas não estão limitadas a, provisionamento de nó mais lento e latência de leitura/gravação mais alta.
Por outro lado, os discos efêmeros do sistema operacional são armazenados apenas na máquina host, assim como um disco temporário. Com essa configuração, você obtém menor latência de leitura/gravação, juntamente com escalonamento de nó mais rápido e atualizações de cluster.
Nota
Quando você não solicita explicitamente discos gerenciados do Azure para o sistema operacional, o AKS assume como padrão o sistema operacional efêmero, se possível, para uma determinada configuração de pool de nós.
Requisitos de tamanho e recomendações para discos de SO efêmeros estão disponíveis na documentação da VM do Azure. A seguir estão algumas considerações gerais de dimensionamento:
Se você optar por usar o tamanho padrão da VM AKS Standard_DS2_v2 SKU com o tamanho de disco padrão do sistema operacional de 100 GiB, o tamanho padrão da VM suporta SO efêmero, mas tem apenas 86 GiB de tamanho de cache. Essa configuração seria padrão para discos gerenciados se você não a especificar explicitamente. Se você solicitar um sistema operacional efêmero, receberá um erro de validação.
Se você solicitar o mesmo Standard_DS2_v2 SKU com um disco de sistema operacional de 60 GiB, essa configuração será padrão para o sistema operacional efêmero. O tamanho solicitado de 60 GiB é menor do que o tamanho máximo de cache de 86 GiB.
Se você selecionar o Standard_D8s_v3 SKU com disco de 100 GB de sistema operacional, esse tamanho de VM suporta sistema operacional efêmero e tem 200 GiB de espaço em cache. Se você não especificar o tipo de disco do sistema operacional, o pool de nós receberá um sistema operacional efêmero por padrão.
A última geração da série VM não tem um cache dedicado, mas apenas armazenamento temporário. Por exemplo, se você selecionou o tamanho Standard_E2bds_v5 VM com o tamanho de disco padrão do sistema operacional de 100 GiB, ele suporta discos efêmeros do sistema operacional, mas tem apenas 75 GB de armazenamento temporário. Essa configuração seria padrão para discos de sistema operacional gerenciado se você não a especificar explicitamente. Se você solicitar um disco efêmero do sistema operacional, receberá um erro de validação.
Se você solicitar o mesmo tamanho Standard_E2bds_v5 VM com um disco de sistema operacional de 60 GiB, essa configuração será padronizada para discos de sistema operacional efêmeros. A dimensão solicitada de 60 GiB é inferior ao armazenamento temporário máximo de 75 GiB.
Se você selecionar Standard_E4bds_v5 SKU com disco de sistema operacional de 100 GiB, esse tamanho de VM suporta sistema operacional efêmero e tem 150 GiB de armazenamento temporário. Se você não especificar o tipo de disco do sistema operacional, por padrão, o Azure provisiona um disco efêmero do sistema operacional para o pool de nós.
Chaves geridas pelo cliente
Você pode gerenciar a criptografia para seu disco efêmero do sistema operacional com suas próprias chaves em um cluster AKS. Para obter mais informações, consulte Usar a chave gerenciada pelo cliente com o disco do Azure no AKS.
Volumes
O Kubernetes normalmente trata pods individuais como recursos efêmeros e descartáveis. Os aplicativos têm diferentes abordagens disponíveis para o uso e persistência de dados. Um volume representa uma maneira de armazenar, recuperar e persistir dados em pods e durante o ciclo de vida do aplicativo.
Os volumes tradicionais são criados como recursos do Kubernetes apoiados pelo Armazenamento do Azure. Você pode criar manualmente volumes de dados para serem atribuídos a pods diretamente ou fazer com que o Kubernetes os crie automaticamente. Os volumes de dados podem usar: Disco do Azure, Arquivos do Azure, Arquivos NetApp do Azure ou Blobs do Azure.
Nota
Dependendo da SKU da VM que você está usando, o driver CSI do Disco do Azure pode ter um limite de volume por nó. Para algumas VMs de alto desempenho (por exemplo, 16 núcleos), o limite é de 64 volumes por nó. Para identificar o limite por SKU de VM, revise a coluna Máximo de discos de dados para cada SKU de VM oferecida. Para obter uma lista de SKUs de VM oferecidas e seus limites de capacidade detalhados correspondentes, consulte Tamanhos de máquinas virtuais de uso geral.
Para ajudar a determinar o melhor ajuste para sua carga de trabalho entre Arquivos do Azure e Arquivos NetApp do Azure, revise as informações fornecidas no artigo Comparação de Arquivos do Azure e Arquivos NetApp do Azure.
Disco do Azure
Use o Disco do Azure para criar um recurso Kubernetes DataDisk . Os tipos de discos incluem:
- SSDs Premium (recomendado para a maioria das cargas de trabalho)
- Discos Ultra
- SSDs Standard
- Discos HDD Standard
Gorjeta
Para a maioria das cargas de trabalho de produção e desenvolvimento, use SSDs Premium.
Como um disco do Azure é montado como ReadWriteOnce, ele só está disponível para um único nó. Para volumes de armazenamento acessíveis por pods em vários nós simultaneamente, use os Arquivos do Azure.
Ficheiros do Azure
Use os Arquivos do Azure para montar um compartilhamento SMB (Server Message Block) versão 3.1.1 ou um compartilhamento NFS (Network File System) versão 4.1. Os Arquivos do Azure permitem compartilhar dados entre vários nós e pods e podem usar:
- Armazenamento Premium do Azure apoiado por SSDs de alto desempenho
- Armazenamento padrão do Azure apoiado por HDDs normais
Azure NetApp Files
- Armazenamento Ultra
- Armazenamento Premium
- Armazenamento Standard
Armazenamento de Blobs do Azure
Use o Armazenamento de Blobs do Azure para criar um contêiner de armazenamento de blob e montá-lo usando o protocolo NFS v3.0 ou BlobFuse.
- Blobs de blocos
Tipos de volume
Os volumes do Kubernetes representam mais do que apenas um disco tradicional para armazenar e recuperar informações. Os volumes do Kubernetes também podem ser usados como uma maneira de injetar dados em um pod para uso por seus contêineres.
Os tipos de volume comuns no Kubernetes incluem:
emptyDir
Comumente usado como espaço temporário para um pod. Todos os contêineres dentro de um pod podem acessar os dados no volume. Os dados gravados nesse tipo de volume persistem apenas durante a vida útil do pod. Depois de excluir o pod, o volume é excluído. Esse volume normalmente usa o armazenamento em disco do nó local subjacente, embora também possa existir apenas na memória do nó.
segredo
Você pode usar volumes secretos para injetar dados confidenciais em pods, como senhas.
- Crie um segredo usando a API do Kubernetes.
- Defina seu pod ou implantação e solicite um segredo específico.
- Os segredos são fornecidos apenas a nós com um pod agendado que os exija.
- O segredo é armazenado no tmpfs, não gravado no disco.
- Quando você exclui o último pod em um nó que requer um segredo, o segredo é excluído do tmpfs do nó.
- Os segredos são armazenados dentro de um determinado namespace e só são acessados por pods dentro do mesmo namespace.
configMap
Você pode usar configMap para injetar propriedades de par chave-valor em pods, como informações de configuração do aplicativo. Defina as informações de configuração do aplicativo como um recurso do Kubernetes, facilmente atualizado e aplicado a novas instâncias de pods à medida que são implantados.
Como usar um segredo:
- Crie um ConfigMap usando a API do Kubernetes.
- Solicite o ConfigMap ao definir um pod ou implantação.
- ConfigMaps são armazenados dentro de um determinado namespace e só são acessados por pods dentro do mesmo namespace.
Volumes persistentes
Os volumes definidos e criados como parte do ciclo de vida do pod só existem até que você exclua o pod. Os pods geralmente esperam que seu armazenamento permaneça se um pod for reprogramado em um host diferente durante um evento de manutenção, especialmente em StatefulSets. Um volume persistente (PV) é um recurso de armazenamento criado e gerenciado pela API do Kubernetes que pode existir além do tempo de vida de um pod individual.
Você pode usar os seguintes serviços de Armazenamento do Azure para fornecer o volume persistente:
Conforme observado na seção Volumes , a escolha de Discos do Azure ou Arquivos do Azure geralmente é determinada pela necessidade de acesso simultâneo aos dados ou à camada de desempenho.
Um administrador de cluster pode criar estaticamente um volume persistente ou um volume pode ser criado dinamicamente pelo servidor de API do Kubernetes. Se um pod estiver agendado e solicitar armazenamento que não está disponível no momento, o Kubernetes poderá criar o disco ou armazenamento de arquivos do Azure subjacente e anexá-lo ao pod. O provisionamento dinâmico usa uma classe de armazenamento para identificar que tipo de recurso precisa ser criado.
Importante
Volumes persistentes não podem ser compartilhados por pods Windows e Linux devido a diferenças no suporte ao sistema de arquivos entre os dois sistemas operacionais.
Se você quiser uma solução totalmente gerenciada para acesso de nível de bloco aos dados, considere usar o Armazenamento de Contêiner do Azure em vez de drivers CSI. O Armazenamento de Contêineres do Azure integra-se ao Kubernetes, permitindo o provisionamento dinâmico e automático de volumes persistentes. O Armazenamento de Contêiner do Azure dá suporte a Discos do Azure, Discos Efémeros e SAN Elástica do Azure (visualização) como armazenamento de backup, oferecendo flexibilidade e escalabilidade para aplicativos com monitoração de estado executados em clusters Kubernetes.
Classes de armazenamento
Para especificar diferentes níveis de armazenamento, como premium ou standard, você pode criar uma classe de armazenamento.
Uma classe de armazenamento também define uma política de recuperação. Quando você exclui o volume persistente, a política de recuperação controla o comportamento do recurso de Armazenamento do Azure subjacente. O recurso subjacente pode ser excluído ou mantido para uso com um pod futuro.
Para clusters que usam o Armazenamento de Contêiner do Azure, você verá uma classe de armazenamento adicional chamada acstor-<storage-pool-name>
. Uma classe de armazenamento interno também é criada.
Para clusters que usam drivers CSI (Container Storage Interface), as seguintes classes de armazenamento adicionais são criadas:
Classe de armazenamento | Description |
---|---|
managed-csi |
Usa o armazenamento localmente redundante (LRS) do SSD padrão do Azure para criar um disco gerenciado. A política de recuperação garante que o Disco do Azure subjacente seja excluído quando o volume persistente que o usou for excluído. A classe de armazenamento também configura os volumes persistentes para serem expansíveis. Você pode editar a declaração de volume persistente para especificar o novo tamanho. Em vigor a partir da versão 1.29 do Kubernetes, nos clusters do Serviço Kubernetes do Azure (AKS) implantados em várias zonas de disponibilidade, essa classe de armazenamento utiliza o armazenamento com redundância de zona (ZRS) do SSD padrão do Azure para criar discos gerenciados. |
managed-csi-premium |
Usa o armazenamento localmente redundante (LRS) do Azure Premium para criar um disco gerenciado. A política de recuperação novamente garante que o Disco do Azure subjacente seja excluído quando o volume persistente que o usou for excluído. Da mesma forma, essa classe de armazenamento permite que volumes persistentes sejam expandidos. Em vigor a partir da versão 1.29 do Kubernetes, nos clusters do Serviço Kubernetes do Azure (AKS) implantados em várias zonas de disponibilidade, essa classe de armazenamento utiliza o ZRS (Armazenamento com Redundância de Zona Premium) do Azure Premium para criar discos gerenciados. |
azurefile-csi |
Usa o armazenamento padrão do Azure para criar um compartilhamento de arquivos do Azure. A política de recuperação garante que o compartilhamento de arquivos subjacente do Azure seja excluído quando o volume persistente que o usou for excluído. |
azurefile-csi-premium |
Usa o armazenamento Premium do Azure para criar um compartilhamento de arquivos do Azure. A política de recuperação garante que o compartilhamento de arquivos subjacente do Azure seja excluído quando o volume persistente que o usou for excluído. |
azureblob-nfs-premium |
Usa o armazenamento Premium do Azure para criar um contêiner de armazenamento de Blob do Azure e conectar-se usando o protocolo NFS v3. A política de recuperação garante que o contêiner de armazenamento de Blob do Azure subjacente seja excluído quando o volume persistente que o usou for excluído. |
azureblob-fuse-premium |
Usa o armazenamento Premium do Azure para criar um contêiner de armazenamento de Blob do Azure e conectar-se usando BlobFuse. A política de recuperação garante que o contêiner de armazenamento de Blob do Azure subjacente seja excluído quando o volume persistente que o usou for excluído. |
A menos que você especifique uma classe de armazenamento para um volume persistente, a classe de armazenamento padrão é usada. Certifique-se de que os volumes usem o armazenamento apropriado de que você precisa ao solicitar volumes persistentes.
Importante
A partir do Kubernetes versão 1.21, o AKS usa drivers CSI por padrão, e a migração CSI está habilitada. Embora os volumes persistentes existentes na árvore continuem a funcionar, a partir da versão 1.26, o AKS não suportará mais volumes criados usando driver na árvore e armazenamento provisionado para arquivos e disco.
A default
classe será a mesma que managed-csi
.
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 skuname
parâmetro definido como LRS. Em seguida, você pode usar a nova classe de armazenamento em sua Reivindicação de Volume Persistente (PVC).
Você pode criar uma classe de armazenamento para outras necessidades usando kubectl
o . O exemplo a seguir usa discos gerenciados premium e especifica que o disco do Azure subjacente deve ser mantido quando você exclui o pod:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: managed-premium-retain
provisioner: disk.csi.azure.com
parameters:
skuName: Premium_ZRS
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
Nota
O AKS reconcilia as classes de armazenamento padrão e substituirá quaisquer alterações feitas nessas classes de armazenamento.
Para obter mais informações sobre classes de armazenamento, consulte StorageClass no Kubernetes.
Afirmações de volumes persistentes
Uma declaração de volume persistente (PVC) solicita armazenamento de uma determinada classe de armazenamento, modo de acesso e tamanho. O servidor de API do Kubernetes pode provisionar dinamicamente o recurso de Armazenamento do Azure subjacente se nenhum recurso existente puder atender à declaração com base na classe de armazenamento definida.
A definição do pod inclui a montagem do volume uma vez que o volume tenha sido conectado ao pod.
Depois que um recurso de armazenamento disponível tiver sido atribuído ao pod que solicita armazenamento, o volume persistente será vinculado a uma declaração de volume persistente. Os volumes persistentes são mapeados para declarações em um mapeamento 1:1.
O exemplo de manifesto YAML a seguir mostra uma declaração de volume persistente que usa a classe de armazenamento premium gerenciado e solicita um disco do Azure com tamanho 5Gi :
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: azure-managed-disk
spec:
accessModes:
- ReadWriteOnce
storageClassName: managed-premium-retain
resources:
requests:
storage: 5Gi
Ao criar uma definição de pod, você também especifica:
- A reivindicação de volume persistente para solicitar o armazenamento desejado.
- A montagem de volume para seus aplicativos lerem e gravarem dados.
O exemplo de manifesto YAML a seguir mostra como a declaração de volume persistente anterior pode ser usada para montar um volume em /mnt/azure:
kind: Pod
apiVersion: v1
metadata:
name: nginx
spec:
containers:
- name: myfrontend
image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
volumeMounts:
- mountPath: "/mnt/azure"
name: volume
volumes:
- name: volume
persistentVolumeClaim:
claimName: azure-managed-disk
Para montar um volume em um contêiner do Windows, especifique a letra da unidade e o caminho. Por exemplo:
...
volumeMounts:
- mountPath: "d:"
name: volume
- mountPath: "c:\k"
name: k-dir
...
Próximos passos
Para obter as práticas recomendadas associadas, consulte Práticas recomendadas para armazenamento e backups em Considerações sobre armazenamento AKS e AKS.
Para obter mais informações sobre o Armazenamento de Contêiner do Azure, consulte os seguintes artigos:
- O que é o Armazenamento de Contêineres do Azure?
- Usar o Armazenamento de Contêiner do Azure com o AKS
Para obter mais informações sobre como usar drivers CSI, consulte os seguintes artigos:
- Drivers da Interface de Armazenamento de Contêiner (CSI) para o Disco do Azure, Arquivos do Azure e armazenamento de Blob do Azure no Serviço Kubernetes do Azure
- Usar o driver CSI do Azure Disk no Serviço Kubernetes do Azure
- Usar o driver CSI do Azure Files no Serviço Kubernetes do Azure
- Usar o driver CSI de armazenamento de Blob do Azure no Serviço Kubernetes do Azure
- Configurar arquivos NetApp do Azure com o Serviço Kubernetes do Azure
Para obter mais informações sobre os principais conceitos de Kubernetes e AKS, consulte os seguintes artigos:
Azure Kubernetes Service