O blog da AWS
Modifique os volumes do Amazon EBS no Kubernetes com classes de atributos de volume
Este post foi escrito em conjunto por Kevin Liu (Senior PMT), Jens-Uwe Walther (Senior STAM-Containers) e Drew Sirenko (Software Dev Engineer).
Introdução
Neste post, exploramos como modificar os volumes do Amazon Elastic Block Store (Amazon EBS) no Kubernetes sem indisponibilizar a aplicação. Aprenda a usar a API VolumeAttributesClass junto com o driver Amazon EBS Container Storage Interface (CSI) para ajustar o desempenho provisionado, migrar para volumes gp3 e automatizar seus fluxos de trabalho de backup de dados.
Aplicativos modernos em contêineres que usam armazenamento persistente, como análise de dados, bancos de dados ou codificação e decodificação de vídeo, precisam de uma ampla variedade de características de armazenamento, como baixa latência, alto rendimento ou mais recursos. O Amazon EBS é uma boa opção para essas cargas de trabalho. Os volumes do EBS oferecem diferentes tipos de armazenamento, atributos de armazenamento configuráveis, como IOPS e taxa de transferência, e a capacidade de modificar essas propriedades sem indisponibilizar a aplicação.
Ao implantar cargas de trabalho de contêineres com estado no Kubernetes, você pode utilizar o driver CSI do Amazon EBS para automatizar o provisionamento e gerenciamento dos volumes EBS. O Kubernetes, em conjunto com o driver CSI do Amazon EBS, gerencia automaticamente todo o processo quando você cria recursos Persistent Volume Claim (PVC) – desde a criação e anexação até a formatação dos volumes EBS – baseando-se no tamanho especificado e na classe de armazenamento (Storage Class) definida.
Alterar as características de armazenamento dos volumes no Kubernetes costumava ser uma ação off-line, exigindo que os operadores de cluster criassem outro SC e migrassem para novos recursos de PVC e Volume Persistente (PV). Esse processo exige a interrupção da aplicação e afeta a disponibilidade. É por isso que, em 2023, a AWS lançou o volume-modifier-for-k8s sidecar, permitindo atualizações on-line dos tipos e características de desempenho dos volumes aplicando anotações aos PVCs. Embora fosse importante fornecer uma solução aos usuários, a AWS trabalhou com outros provedores de armazenamento para criar uma solução de modificação de volume que estava disponível como uma API nativa do Kubernetes. No ano passado, a AWS trabalhou com a comunidade Kubernetes para lançar o VolumeAttributesClass Kubernetes Enhancement, que chegou à versão beta no Kubernetes 1.31. Embora o recurso esteja desativado por padrão no Kubernetes upstream, ele é habilitado automaticamente para você em seus clusters do Amazon Elastic Kubernetes Service (Amazon EKS) 1.31.
A partir do Amazon EKS 1.31, você pode usar o recurso VolumeAttributesClass (VAC) para modificar o tipo de volume, o IOPS ou a taxa de transferência dos seus volumes do EBS sem o sidecar volume-modifier-for-k8s . Além disso, você pode usar VACs para adicionar, editar e remover tags de recursos da AWS dos seus volumes. O driver CSI do Amazon EBS ativa esse recurso por padrão quando você atualiza para a versão 1.35.0 ou posterior.
Usando o Amazon EKS 1.31 e o driver CSI 1.35.0 do Amazon EBS, você já pode começar a usar VACs em vez de anotações em PVC. Nas próximas duas seções, apresentaremos o VolumeAttributesClasses e mostraremos como habilitar o recurso em seu cluster. Em seguida, analisamos três fluxos de trabalho comuns para modificar seus volumes com VACs:
- Ajustando as características de desempenho das operações de entrada/saída por segundo (IOPS) de seus volumes.
- Migração para volumes gp3 do EBS por um preço até 20% menor por GB em comparação aos volumes gp2.
- Modificar suas tags de recursos de volume do EBS para automatizar seu fluxo de trabalho de backup de dados com o Amazon Data Lifecycle Manager.
Visão geral da solução
Os operadores de cluster podem contar com o driver CSI do Amazon EBS para gerenciar declarativamente seus volumes persistentes. Você pode solicitar armazenamento persistente para suas cargas de trabalho criando recursos de PVC com um tamanho específico, SC e VAC.
Um VAC é composto por seu nome, o nome do driver CSI e uma lista de parâmetros mutáveis específicos para um provedor de armazenamento, como o Amazon EBS.
Parâmetros de volume mutáveis do EBS, como taxa de transferência, IOPS, tipos de volume e tags de recursos da AWS, podem ser especificados nos recursos do VAC:
Você pode adicionar um VAC a um PVC usando o campo spec.volumeAttributesClassName:
O volume é provisionado com os parâmetros especificados no VAC e no SC, com os parâmetros do VAC tendo precedência sobre quaisquer parâmetros conflitantes. O VAC de um PVC também substitui todas as modificações e futuras modificações baseadas em anotações.
Esse recurso VAC separado beneficia organizações que dividem responsabilidades entre as equipes que operam o cluster e as equipes que implantam aplicativos nele. Os operadores de cluster podem criar objetos SC e VAC em todo o cluster, que então podem ser consumidos pelos desenvolvedores de aplicativos em seus recursos de PVC com namespace específico.
Pré-requisitos
No Amazon EKS 1.31 ou posterior, o recursos beta VolumeAttributesClass e o grupo de API storage.k8s.io/v1beta1 são habilitados automaticamente nos componentes do Control Plane do seu cluster. Além disso, você deve usar o driver CSI do Amazon EBS versão v1.35.0 ou posterior, que é instalado pelo complemento (add-on) Amazon EKS Managed v1.35.0-eksbuild.2 ou pelo Helm chart v2.35.1.
Se você opera um cluster Kubernetes v1.31 autogerenciado (por exemplo, kOps), deve habilitar o recurso VolumeAttributesClass no kube-apiserver, kube-scheduler e kube-controller-manager, bem como ativar o grupo de API storage.k8s.io/v1beta1 por meio do kube-apiserver runtime-config.
Consulte a documentação do Kubernetes VolumeAttributesClass para ver a lista completa dos requisitos.
Para modificar as tags de recursos do Amazon EBS por meio de VACs, certifique-se de anexar a seguinte política do AWS Identity and Access Management (IAM) à função usada pelo seu driver CSI do Amazon EBS:
Passo a passo
As etapas a seguir orientam você nessa solução.
Provisione um volume e aumente seu desempenho
O Amazon EKS 1.31 não vem com um SC por padrão. Devemos criar o seguinte SC:
Aqui estão dois exemplos de recursos de VAC, cada um com diferentes parâmetros de qualidade de serviço de volume:
Provisione um volume com o VAC de desempenho padrão:
Para obter maior desempenho, você pode alterar o PVC para apontar para o novo VAC ebs-blog-gp3-increased-performance:
O driver Amazon EBS CSI observa que os VACs atuais e desejados do PVC são diferentes, modifica o volume EBS e atualiza o recurso PV para o novo VAC.
Você só pode realizar uma modificação de volume por período de seis horas, de acordo com a documentação do Amazon EBS. Portanto, você deve mesclar os aumentos do tamanho do armazenamento do PVC com as alterações do VAC em um patch do Kubernetes:
Caso contrário, você observará o seguinte evento de falha no recurso de PVC:
Economize custos migrando para volumes gp3
VolumeAttributesClasses pode ser usado com PersistentVolumeClaims existentes criados sem um VAC. Isso é especialmente útil para migrar dos volumes gp2 para gp3. Os volumes gp3 do EBS permitem que você provisione IOPS e taxa de transferência, independentemente do tamanho do armazenamento. Você pode migrar para volumes gp3 em qualquer caso de uso em que volumes gp2 tenham sido usados e poderá obter economias de até 20% devido a essa independência. Se você está procurando um desempenho ainda maior, pode escalar os volumes gp3 em até 1.000 MiB/s, quatro vezes mais do que a taxa de transferência máxima dos volumes gp2.
Aqui, criamos uma carga de trabalho com estado que inicialmente depende de um volume gp2:
Para migrar esse volume para gp3, primeiro aplique o recurso VAC ao seu cluster:
Em seguida, corrija o PVC associado:
Observe que, a partir da versão 1.31 do Kubernetes, você não pode modificar volumes que fazem referência a um SC via VAC. Certifique-se de que o SC associado ao volume que você está modificando faça referência ao provisionador ebs.csi.aws.com, não ao kubernetes.io/aws-ebs.
Fluxo de trabalho: modificar tags
Para facilitar o gerenciamento de seus volumes do EBS, você pode usar tags. As tags são pares de chave-valores que você atribui aos seus recursos da AWS, permitindo categorizá-los por finalidade, proprietário ou ambiente. Se você tiver muitos volumes em sua conta, as tags podem ajudá-lo a identificar um volume específico ou um grupo de recursos relacionados. O driver CSI do Amazon EBS permite que você adicione, substitua e apague tags de recursos de volume por meio do parâmetro VAC tagSpecification.
Além da organização, as tags de volume podem ser usadas com as políticas do Amazon Data Lifecycle Manager para fazer backup seguro de seus volumes do EBS. Os snapshots do Amazon EBS capturam o estado de um volume em um momento específico, permitindo a recuperação em caso de perda ou corrupção de dados. Para automatizar a criação, retenção e exclusão desses snapshots, você pode criar uma política de volume do Amazon Data Lifecycle Manager direcionada a volumes com tags de recursos específicas.
Por exemplo, a política a seguir cria um snapshot diário de qualquer volume associado ao VAC ebs-blog-daily-backup:
Aqui está um exemplo de VAC que define tags de recursos para a tag de destino da política:
Limpando
Para evitar custos adicionais, exclua qualquer exemplo de recurso do Kubernetes e da AWS que você provisionou para esses exemplos.
Exclua os recursos de exemplo de carga de trabalho com estado:
Você pode confirmar a exclusão dos volumes do EBS por meio do console Amazon Elastic Compute Cloud (Amazon EC2).
Conclusão
Neste post, exploramos como modificar os volumes do Amazon EBS no Kubernetes com VolumeAttributesClasses. Esse novo recurso ajuda você a ajustar as características de desempenho de suas cargas de trabalho com estado atualizando o tipo de volume, o IOPS e a taxa de transferência sem indisponibilizar a aplicação. Além disso, automatize seus fluxos de trabalho de backup de dados modificando as tags de recursos para corresponder às suas políticas do Amazon Data Lifecycle Manager.
Visite a página do produto Amazon EBS, a página do produto Amazon EKS e o projeto de código aberto no GitHub para saber mais sobre o uso de volumes do EBS para suas cargas de trabalho com estado.
Para obter mais informações sobre as interações entre modificações baseadas em anotações, VACs e SCs, leia as perguntas frequentes sobre o driver CSI do Amazon EBS.
Obrigado por ler esta postagem e não hesite em deixar perguntas na seção de comentários ou enviar solicitações de recursos em nosso projeto no GitHub.
Este blog é uma tradução do blog original em inglês (link aqui).
Tradutores
![]() |
Marcelo Moras é Arquiteto de Soluções na AWS atendendo clientes Enterprise com foco em mercado financeiro. Com mais de 17 anos de experiência atuando com infraestrutura, administração de sistemas, redes, containers e segurança. |
![]() |
Karine Ferrari é arquiteta de soluções na AWS com experiência em clientes SMB e Financial Services. Com 15 anos de experiência na área de tecnologia da informação atuando em instituições de grande porte e nos últimos 4 anos atua com arquitetura para projetos em nuvem e modernização de aplicações. |