Otimizar custos no Serviço Kubernetes do Azure (AKS)

A otimização de custos consiste em maximizar o valor dos recursos e, ao mesmo tempo, minimizar despesas desnecessárias em seu ambiente de nuvem. Esse processo envolve a identificação de opções de configuração econômicas e a implementação de práticas recomendadas para melhorar a eficiência operacional. Um ambiente AKS pode ser otimizado para minimizar os custos, levando em consideração os requisitos de desempenho e confiabilidade.

Neste artigo, você aprende sobre:

  • Seleção estratégica de infraestruturas
  • Direitos dinâmicos e dimensionamento automático
  • Aproveitar os descontos do Azure para obter economias substanciais
  • Monitoramento holístico e práticas de FinOps

Preparar o ambiente do aplicativo

Avalie a família SKU

É importante avaliar os requisitos de recursos do seu aplicativo antes da implantação. Pequenas cargas de trabalho de desenvolvimento têm necessidades de infraestrutura diferentes das grandes cargas de trabalho prontas para produção. Embora uma combinação de configurações de CPU, memória e capacidade de rede influencie fortemente a relação custo-benefício de uma SKU, considere os seguintes tipos de VM:

  • Os pools de nós spot de máquinas - virtuais do Azure Spot são apoiados por conjuntos de dimensionamento de máquinas virtuais do Azure Spot e implantados em um único domínio de falha sem alta disponibilidade ou garantias de SLA. As VMs spot permitem que você aproveite a capacidade não utilizada do Azure com descontos significativos (até 90% em comparação com os preços pré-pagos). Se o Azure precisar de capacidade de volta, a infraestrutura do Azure removerá os nós Spot. Ideal para ambientes de desenvolvimento/teste, cargas de trabalho que podem lidar com interrupções, como trabalhos de processamento em lote, e cargas de trabalho com tempo de execução flexível.
  • Processadores baseados em Ampere Altra Arm (ARM64) - As VMs ARM64 são eficientes em termos de energia e econômicas, mas não comprometem o desempenho. Com o suporte ao pool de nós AMR64 no AKS, você pode criar nós de agente do Ubuntu ARM64 e até mesmo misturar nós de arquitetura Intel e ARM dentro de um cluster. Essas VMs ARM são projetadas para executar com eficiência cargas de trabalho dinâmicas e escaláveis e podem oferecer um desempenho de preço até 50% melhor do que VMs comparáveis baseadas em x86 para cargas de trabalho escaláveis. Ideal para servidores Web ou de aplicativos, bancos de dados de código aberto, aplicativos nativos da nuvem, servidores de jogos e muito mais.
  • SKUs otimizados para GPU - Dependendo da natureza da sua carga de trabalho, considere o uso de SKUs de VM otimizados para computação, memória otimizada, armazenamento otimizado ou até mesmo SKUs de VM otimizados para unidade de processamento gráfico (GPU). Os tamanhos de VM de GPU são VMs especializadas que estão disponíveis com GPUs únicas, múltiplas e fracionárias. Os pools de nós Linux habilitados para GPU no AKS são melhores para cargas de trabalho de computação intensiva, como renderização gráfica, treinamento de modelos grandes e inferência.

Nota

O custo da computação varia entre as regiões. Ao escolher uma região menos dispendiosa para executar cargas de trabalho, esteja ciente do impacto potencial da latência, bem como dos custos de transferência de dados. Para saber mais sobre SKUs de VM e suas características, consulte Tamanhos para máquinas virtuais no Azure.

Usar configurações predefinidas de cluster

Escolher o SKU de VM certo, regiões, número de nós e outras opções de configuração pode ser difícil antecipadamente. As configurações predefinidas de cluster no portal do Azure descarregam esse desafio inicial, fornecendo configurações recomendadas para diferentes ambientes de aplicativos que são conscientes dos custos e do desempenho. A predefinição Desenvolvimento/Teste é melhor para desenvolver novas cargas de trabalho ou testar cargas de trabalho existentes. A predefinição de Economia de Produção é melhor para atender ao tráfego de produção de forma consciente dos custos se suas cargas de trabalho puderem tolerar interrupções. Os recursos não críticos estão desativados por padrão e os valores predefinidos podem ser modificados a qualquer momento.

Considere a multilocação

O AKS oferece flexibilidade na forma como você executa clusters multilocatários e isola recursos. Para uma multilocação amigável, clusters e infraestrutura podem ser compartilhados entre equipes e unidades de negócios por meio do isolamento lógico. Os namespaces do Kubernetes formam o limite de isolamento lógico para cargas de trabalho e recursos. O compartilhamento da infraestrutura reduz a sobrecarga de gerenciamento de cluster e, ao mesmo tempo, melhora a utilização de recursos e a densidade de pods dentro do cluster. Para saber mais sobre multilocação no AKS e determinar se ela é adequada às suas necessidades organizacionais, consulte Considerações sobre AKS para multilocação e Projetar clusters para multilocação.

Aviso

Os ambientes Kubernetes não são totalmente seguros para multilocação hostil. Se algum locatário na infraestrutura compartilhada não puder ser confiável, será necessário um planejamento adicional para evitar que os locatários afetem a segurança de outros serviços.

Considere os limites do isolamento físico. Nesse modelo, equipes ou cargas de trabalho são atribuídas ao seu próprio cluster. A gestão adicional e as despesas gerais financeiras serão uma compensação.

Criar aplicações nativas da cloud

Torne o seu contentor o mais enxuto possível

Um contêiner enxuto refere-se à otimização do tamanho e da pegada de recursos do aplicativo conteinerizado. Verifique se a imagem base é mínima e contém apenas as dependências necessárias. Remova todas as bibliotecas e pacotes desnecessários. Uma imagem de contêiner menor acelerará os tempos de implantação e aumentará a eficiência da operação de dimensionamento. Indo um passo além, o Artifact Streaming no AKS permite que você transmita imagens de contêiner do Azure Container Registry (ACR). Ele puxa apenas a camada necessária para a inicialização inicial do pod, reduzindo o tempo de tração para imagens maiores de minutos para segundos.

Impor cotas de recursos

As cotas de recursos fornecem uma maneira de reservar e limitar recursos em uma equipe de desenvolvimento ou projeto. As cotas são definidas em um namespace e podem ser definidas em recursos de computação, recursos de armazenamento e contagens de objetos. Quando você define cotas de recursos, namespaces individuais são impedidos de consumir mais recursos do que os alocados. Isso é particularmente importante para clusters multilocatários em que as equipes estão compartilhando infraestrutura.

Usar a parada de início do cluster

Pequenos clusters de desenvolvimento e teste, quando deixados sem supervisão, podem realizar grandes quantidades de gastos desnecessários. Desative os clusters que não precisam ser executados o tempo todo usando o início e a parada do cluster. Isso desliga todos os pools de nós do sistema e do usuário para que você não pague por computação extra. Todos os objetos e o estado do cluster serão mantidos quando você iniciar o cluster novamente.

Utilizar reservas de capacidade

As reservas de capacidade permitem reservar capacidade de computação em uma região do Azure ou Zona de Disponibilidade por qualquer período de tempo. A capacidade reservada estará disponível para uso imediato até que a reserva seja excluída. Associar um grupo de reserva de capacidade existente a um pool de nós garante a capacidade alocada para seu pool de nós e ajuda a evitar possíveis picos de preços sob demanda durante períodos de alta demanda de computação.

Monitore seu ambiente e gastos

Aumente a visibilidade com o Microsoft Cost Management

O Microsoft Cost Management oferece um amplo conjunto de recursos para ajudar com orçamento, previsão e visibilidade de custos dentro e fora do cluster. A visibilidade adequada é essencial para decifrar tendências de gastos, identificar oportunidades de otimização e aumentar a responsabilidade entre desenvolvedores de aplicativos e equipes de plataforma. Habilite o complemento AKS Cost Analysis para detalhamento granular de custos de cluster por construções do Kubernetes junto com as categorias Computação, Rede e Armazenamento do Azure.

Azure Monitor

Se você estiver ingerindo dados de métricas por meio do Container insights, recomendamos migrar para métricas gerenciadas do Prometheus, o que oferece uma redução significativa de custos. Você pode desabilitar as métricas do Container insights usando a regra de coleta de dados (DCR) e implantar o complemento Prometheus gerenciado, que dá suporte à configuração por meio do Azure Resource Manager, da CLI do Azure, do portal do Azure e do Terraform.

Se você confia na ingestão de logs, também recomendamos o uso da API de logs básicos para reduzir os custos do Log Analytics. Para saber mais, consulte Práticas recomendadas do Azure Monitor e gerenciamento de custos para insights de contêiner.

Otimize cargas de trabalho por meio do dimensionamento automático

Habilitar o dimensionamento automático de aplicativos

Dimensionamento automático de pods verticais

Solicitações e limites significativamente maiores do que o uso real podem resultar em cargas de trabalho provisionadas em excesso e recursos desperdiçados. Por outro lado, solicitações e limites muito baixos podem resultar em problemas de limitação e carga de trabalho devido à falta de memória. O Vertical Pod Autoscaler (VPA) permite ajustar os recursos de CPU e memória exigidos pelos seus pods. O VPA fornece valores recomendados para solicitações e limites de CPU e memória com base no histórico de uso do contêiner, que você pode definir manualmente ou atualizar automaticamente. Ideal para aplicações com demandas de recursos flutuantes.

Dimensionamento automático horizontal do pod

O Horizontal Pod Autoscaler (HPA) dimensiona dinamicamente o número de réplicas de pods com base em uma métrica observada, como a utilização da CPU ou da memória. Durante períodos de alta demanda, a HPA é dimensionada, adicionando mais réplicas de pod para distribuir a carga de trabalho. Durante períodos de baixa demanda, o HPA é dimensionado, reduzindo o número de réplicas para conservar recursos. Ideal para aplicações com exigências de recursos previsíveis.

Aviso

Você não deve usar o VPA em conjunto com o HPA nas mesmas métricas de CPU ou memória. Essa combinação pode levar a conflitos, já que ambos os autoscalers tentam responder a mudanças na demanda usando as mesmas métricas. No entanto, você pode usar o VPA para CPU ou memória em conjunto com o HPA para métricas personalizadas para evitar sobreposições e garantir que cada dimensionador automático se concentre em aspetos distintos do dimensionamento da carga de trabalho.

Dimensionamento automático orientado a eventos do Kubernetes

O complemento Kubernetes Event-driven Autoscaler (KEDA) oferece flexibilidade adicional para dimensionamento com base em várias métricas orientadas a eventos que se alinham com o comportamento do seu aplicativo. Por exemplo, para um aplicativo Web, o KEDA pode monitorar o tráfego de solicitação HTTP de entrada e ajustar o número de réplicas de pod para garantir que o aplicativo permaneça responsivo. Para trabalhos de processamento, o KEDA pode dimensionar o aplicativo com base no comprimento da fila de mensagens. O suporte gerenciado é fornecido para todos os Azure Scalers.

Habilitar o dimensionamento automático de infraestrutura

Dimensionamento automático de cluster

Para acompanhar a demanda de aplicativos, o Cluster Autoscaler observa pods que não podem ser agendados devido a restrições de recursos e dimensiona o número de nós no pool de nós de acordo. Quando os nós não tiverem pods em execução, o Cluster Autoscaler reduzirá o número de nós. Observe que as configurações de perfil do Autoscaler de cluster se aplicam a todos os nós habilitados para autoscaler no cluster. Para saber mais, consulte Práticas recomendadas e considerações sobre o Cluster Autoscaler.

Autoprovisionamento de nós

Cargas de trabalho complicadas podem exigir vários pools de nós com diferentes configurações de tamanho de VM para acomodar os requisitos de CPU e memória. A seleção e o gerenciamento precisos de várias configurações de pool de nós adicionam complexidade e sobrecarga operacional. O NODE Autoprovision (NAP) simplifica o processo de seleção de SKU e decide, com base nos requisitos de recursos de pod pendentes, a configuração de VM ideal para executar cargas de trabalho da maneira mais eficiente e econômica.

Poupe com descontos do Azure

Reservas do Azure

Se sua carga de trabalho for previsível e existir por um longo período de tempo, considere comprar uma Reserva do Azure para reduzir ainda mais seus custos de recursos. As Reservas do Azure operam em um período de um ou três anos, oferecendo até 72% de desconto em comparação com os preços pré-pagos para computação. As reservas aplicam-se automaticamente aos recursos correspondentes. Ideal para cargas de trabalho comprometidas com a execução nas mesmas SKUs e regiões durante um longo período de tempo.

Plano de Poupança do Azure

Se você tiver gastos consistentes, mas o uso de recursos diferentes entre SKUs e regiões inviabilizar as Reservas do Azure, considere comprar um Plano de Economia do Azure. Tal como as Reservas do Azure, os Planos de Poupança do Azure operam num período de um ou três anos e aplicam-se automaticamente a quaisquer recursos dentro do âmbito do benefício. Você se compromete a gastar um valor fixo por hora em recursos de computação, independentemente da SKU ou região. Ideal para cargas de trabalho que utilizam diferentes recursos e/ou diferentes regiões de datacenter.

Benefício Híbrido do Azure

O Benefício Híbrido do Azure para o Serviço Kubernetes do Azure (AKS) permite maximizar suas licenças locais sem custo adicional. Use quaisquer licenças locais qualificadas que também tenham um Software Assurance (SA) ativo ou uma assinatura qualificada para obter VMs do Windows no Azure a um custo reduzido.

Adote o FinOps para construir uma cultura de redução de custos

As operações financeiras (FinOps) são uma disciplina que combina responsabilidade financeira com gestão e otimização na nuvem. Ele se concentra em promover o alinhamento entre as equipes de finanças, operações e engenharia para entender e controlar os custos da nuvem. A fundação FinOps lançou vários projetos notáveis:

  • FinOps Framework - um modelo operacional de como praticar e implementar FinOps.
  • Especificação FOCUS - uma especificação técnica e um padrão aberto para dados de uso, custo e faturamento da nuvem em todos os principais serviços de provedores de nuvem.

Próximos passos

A otimização de custos é um esforço contínuo e iterativo. Saiba mais revisando as seguintes recomendações e orientações de arquitetura: