Práticas recomendadas para otimização de 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:
- Acompanhamento holístico e práticas de FinOps.
- Seleção estratégica de infraestruturas.
- Direitos dinâmicos e dimensionamento automático.
- Aproveitar os descontos do Azure para obter economias substanciais.
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 tem vários projetos notáveis, como o FinOps Framework e a FOCUS Specification.
Para obter mais informações, consulte O que é 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 máquina virtual (VM):
Família SKU | Description | Caso de utilização |
---|---|---|
Máquinas Virtuais do Azure Spot | A escala da máquina virtual spot do Azure retrocede aos pools de nós spot e implantada em um único domínio de falha sem garantias de alta disponibilidade ou contrato de nível de serviço (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 Arm64 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 otimizado para computação, memória otimizada, armazenamento otimizado ou até mesmo SKUs de VM otimizadas 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.
Consultar as opções de armazenamento
Para obter mais informações sobre opções de armazenamento e considerações de custo relacionadas, consulte os seguintes artigos:
- Práticas recomendadas para armazenamento e backups no Serviço Kubernetes do Azure (AKS)
- Opções de armazenamento para aplicativos no Serviço Kubernetes do Azure (AKS)
Usar configurações predefinidas de cluster
Pode ser difícil escolher o SKU de VM certo, regiões, número de nós e outras opções de configuração. 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, você pode compartilhar clusters e infraestrutura 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, é necessário mais planejamento 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 acelera os tempos de implantação e aumenta a eficiência das operações de dimensionamento. O Streaming de Artefactos no AKS permite-lhe transmitir imagens de contentor a partir 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, isso impede que namespaces individuais consumam mais recursos do que os alocados. As cotas de recursos são úteis para clusters multilocatários onde as equipes estão compartilhando infraestrutura.
Usar start/stop de cluster
Quando deixados sem supervisão, pequenos clusters de desenvolvimento/teste podem acumular custos desnecessários. Você pode desativar clusters que não precisam ser executados o tempo todo usando o recurso de início e parada do cluster. Esse recurso desliga todos os pools de nós do sistema e do usuário para que você não pague por computação extra. O estado do cluster e dos objetos é mantido quando você inicia 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 está 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 métricos por meio do Container insights, recomendamos migrar para o Prometheus gerenciado, 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.
Para obter mais informações, consulte Práticas recomendadas do Azure Monitor e gerenciamento de custos para insights de contêiner.
Log Analytics
Para logs de plano de controle, considere desabilitar as categorias de que não precisa e/ou usar a API de Logs Básicos quando aplicável para reduzir os custos do Log Analytics. Para obter mais informações, consulte Logs de plano/recurso de controle do Serviço Kubernetes do Azure (AKS). Para logs de plano de dados ou logs de aplicativos, considere ajustar as configurações de otimização de custos.
Otimize cargas de trabalho por meio do dimensionamento automático
Estabelecer uma linha de base
Antes de definir suas configurações de dimensionamento automático, você pode usar o Teste de Carga do Azure para estabelecer uma linha de base para seu aplicativo. O teste de carga ajuda você a entender como seu aplicativo se comporta sob diferentes condições de tráfego e identificar gargalos de desempenho. Depois de ter uma linha de base, você pode definir as configurações de dimensionamento automático para garantir que seu aplicativo possa lidar com a carga esperada.
Habilitar o dimensionamento automático de aplicativos
Dimensionamento automático de pods verticais
Solicitações e limites superiores ao 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 métricas observadas, 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 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 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 controlado por eventos do Kubernetes
O complemento Kubernetes Event-driven Autoscaler (KEDA) oferece flexibilidade extra 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 da 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 têm pods em execução, o Cluster Autoscaler reduz o número de nós. As configurações de perfil do Autoscaler de cluster aplicam-se a todos os pools de nós habilitados para autoscaler em um cluster. Para obter mais informações, consulte Práticas recomendadas e considerações sobre o Autoscaler de cluster.
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 a configuração ideal da VM com base nos requisitos de recursos de pod pendentes para executar cargas de trabalho da maneira mais eficiente e econômica.
Nota
Para obter mais informações sobre práticas recomendadas de dimensionamento, consulte Desempenho e dimensionamento para cargas de trabalho pequenas e médias no Serviço Kubernetes do Azure (AKS) e Práticas recomendadas de desempenho e dimensionamento para grandes cargas de trabalho no Serviço Kubernetes do Azure (AKS).
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 data center.
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 extra. 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.
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:
Azure Kubernetes Service