Projetar e configurar clusters do GKE para otimização de custos

Este documento ajuda você a navegar pela documentação do Google Kubernetes Engine (GKE) para encontrar diretrizes e recomendações de otimização de custos. O GKE oferece recursos abrangentes de escalonamento automático e programação que podem ser usados para minimizar o custo do cluster e manter a estabilidade do aplicativo.

Para uma visão geral consolidada de todas as práticas recomendadas do GKE, consulte Práticas recomendadas para o GKE.

Você já precisa conhecer os seguintes conceitos:

Visão geral

Ao implementar o GKE, é preciso considerar diferentes aspectos técnicos para se alinhar aos requisitos de aplicativos e negócios. Além de definir rede, segurança, armazenamento e outros aspectos técnicos, é preciso avaliar custo e desempenho para atender às necessidades da empresa. Em vez de tratar custo e desempenho como entidades distintas, é preciso integrá-los desde os estágios iniciais do planejamento da infraestrutura para definir uma relação unificada que determine a confiabilidade e os gastos com a nuvem. Espera-se baixo custo e alta confiabilidade, mas, à medida que você escalona, a complexidade de gerenciar essa compensação aumenta.

Para reduzir os custos e garantir a estabilidade do aplicativo, defina ou ajuste os seguintes recursos do GKE:

  • Configuração do GKE
  • Configuração da carga de trabalho
  • Referência e visibilidade de custos

Você também pode descobrir e implementar práticas recomendadas de otimização de custos usando o Compute Advisor (prévia). Para mais informações, consulte Usar o Compute Advisor.

Usar o Autopilot do GKE

Para pequenos ambientes de sandbox ou desenvolvimento, selecione clusters do Autopilot. No Autopilot, o GKE gerencia os nós de forma dinâmica, e você só recebe cobranças pela capacidade de pod solicitada, o que ajuda a evitar cobranças de VM, sistema operacional do nó e overhead do sistema.

Para mais informações, consulte a visão geral do Autopilot do GKE.

Entender como o escalonamento automático funciona

Os controladores de escalonamento automático do GKE ajustam dinamicamente os recursos à medida que as solicitações de tráfego mudam.

Adicionar e remover pods com base em métricas de utilização

Um HorizontalPodAutoscaler (HPA) adiciona e remove pods com base em métricas de CPU ou personalizadas.

Para entender e configurar o escalonamento automático horizontal de pods, consulte a seguinte documentação do GKE:

Configure um limite de utilização desejada (por exemplo, 70% ou 80%) para manter um buffer que processe picos de tráfego enquanto outros pods de réplica são iniciados.

Escalonar seus pods com base nas métricas de utilização

Use o VerticalPodAutoscaler (VPA) para dimensionar dinamicamente as solicitações de CPU e memória do contêiner para cargas de trabalho que não usam o escalonamento automático horizontal de pods ou quando as cargas de trabalho de pico são desconhecidas.

Para entender e configurar o escalonamento automático vertical de pods, consulte a seguinte documentação do GKE:

Mantenha o VPA no modo Off (somente recomendação) por pelo menos 24 horas (idealmente uma semana) em ambientes semelhantes aos de produção para capturar padrões de tráfego representativos. Para evitar ajustes de tamanho irregulares, especifique limites mínimos e máximos explícitos no objeto VerticalPodAutoscaler antes de ativar os modos Initial ou Auto.

Automatizar o escalonamento da infraestrutura usando o escalonador automático de cluster

Para escalonar os nós de computação subjacentes com base em uma simulação de programação ativa em vez de cargas de métricas, ative o escalonador automático de cluster nos pools de nós do GKE Standard. Especifique os parâmetros mínimos de nós para oferecer suporte à capacidade noturna básica.

Sempre configure um objeto PodDisruptionBudget (PDB) para pods de sistema e de aplicativo. Essa configuração ajuda a garantir que o escalonador automático de cluster não cause interrupções acidentais no serviço ao consolidar ou reduzir escala vertical pools de nós subutilizados.

Para entender e configurar o escalonador automático de cluster, consulte a seguinte documentação do GKE:

Implante pools de nós dinâmicos usando a criação automática de pool de nós

Ative a criação automática de pool de nós para gerar automaticamente pools de nós personalizados do GKE com formatos, contagens de CPU ou limites de memória que se ajustem com precisão aos parâmetros de programação dos pods pendentes. Esse recurso minimiza os recursos restantes em nós superdimensionados.

Para entender e configurar a criação automática de pool de nós, consulte a seguinte documentação do GKE:

Lista de verificação de escalonamento automático

Características da infraestrutura

Alinhe o hardware, a localização e as regras de rede do nó do cluster com as prioridades de otimização de custos.

Selecionar os tipos de máquina adequados

Selecione os tipos de máquina adequados para seu cluster com base na localização dos usuários e dos dados que o cluster precisa acessar.

Para mais informações, consulte o Guia de comparação e recursos para famílias de máquinas.

Implantar cargas de trabalho tolerantes a falhas em VMs spot

Use VMs spot para executar cargas de trabalho sem estado, tolerantes a falhas ou em lote com um desconto de até 91% em comparação com instâncias de VM sob demanda.

Para mais informações, consulte a seguinte documentação do GKE:

Mapear famílias de máquinas eficientes e configurações do sistema operacional

Personalize as configurações de máquina do pool de nós com perfis de instância econômicos (por exemplo, arquiteturas de VM E2).

Para mais informações sobre como dimensionar nós, configurar tempos de preempção de VM spot e configurar configurações de kernel, consulte Sobre pools de nós.

Selecionar a região apropriada

Quando a latência não afeta seus usuários, execute cargas de trabalho de cluster em regiões do Compute Engine com custos operacionais mais baixos.

Para mais informações, consulte Práticas recomendadas para a seleção de regiões do Compute Engine.

Inscrever-se no CUD

Compre descontos por compromisso de uso (CUDs) para garantir preços com grandes descontos (até 70%) para recursos de computação de valor de referência durante um período de um ou três anos.

Para mais informações, consulte Descontos por compromisso de uso com base em recursos.

Considerar os custos de rede

Os clusters regionais e multizonais do GKE melhoram a confiabilidade dos aplicativos, mas podem gerar custos internos de saída de rede entre zonas.

Para minimizar e controlar os custos de rede, considere o seguinte:

  • Transferências de dados entre zonas:embora os clusters regionais aumentem a disponibilidade ao distribuir cargas de trabalho entre zonas, há custos associados aos dados transferidos entre elas.

Para mais informações, consulte Todos os preços de rede.

Implantar clusters de zona única para ambientes que não sejam de produção

Em ambientes que não são de produção, para evitar cobranças de rede entre zonas e reduzir a sobrecarga de VMs, implante clusters de zona única em vez de clusters regionais ou multizonais.

Para mais informações, consulte Sobre as opções de configuração de cluster.

Otimizar caminhos de resolução de DNS do cluster e tráfego de entrada

Para otimizar a resolução de DNS do cluster e o tráfego de entrada, implante o NodeLocal DNSCache e os grupos de endpoints de rede (NEGs).

Quando você executa cargas de trabalho com uso intenso de DNS, o NodeLocal DNSCache executa um daemon de DNS local em cada nó. Essa configuração impede que cargas de consulta altas esgotem o CoreDNS, evitando a necessidade de escaloná-lo e reduzindo os custos gerais do GKE.

Para o tráfego de entrada, o balanceamento de carga nativo de contêineres por NEGs encaminha o tráfego diretamente para endereços IP de pod em vez de grupos de instâncias. Esse roteamento direto facilita o redirecionamento de tráfego sem problemas durante as ações de escalonamento de pods.

Para mais informações, consulte:

Aplicar cotas de recursos por namespace

Implante objetos ResourceQuota padrão do Kubernetes por namespace em clusters multilocatários para bloquear os limites de forma de CPU e memória e impedir que equipes individuais programem cargas de trabalho não compatíveis que acionam cobranças inesperadas de computação.

Para mais informações, consulte Namespaces na documentação do Kubernetes.

Implementar auditorias do Controlador de Políticas

Implante o Controlador de Políticas para auditar e aplicar dinamicamente a conformidade do cluster com os padrões corporativos. O Controlador de Políticas usa o controle de admissão para rejeitar recursos mal configurados.

Para ver mais informações, consulte os seguintes tópicos:

Bloquear manifestos não compatíveis em pipelines de CI/CD

Valide a conformidade com a política de custos no início do ciclo de vida de desenvolvimento. Integre scripts de validação (como a análise de kpt) em verificações de pré-commit ou solicitação de pull para auditar e bloquear manifestos não compatíveis antes que eles cheguem ao cluster.

Para mais informações, consulte Validar apps em relação às políticas da empresa em um pipeline de CI.

Lista de verificação da infraestrutura

Otimização de aplicativos e cargas de trabalho

Configure suas cargas de trabalho para usar os recursos de maneira eficiente e reduzir a sobrecarga operacional.

Especificar solicitações e limites de memória correspondentes

Especifique solicitações precisas de CPU e memória do contêiner antes da implantação. Para a CPU, configure solicitações para atender aos objetivos de nível de serviço (SLOs), mas deixe os limites irrestritos. Para memória, verifique se a alocação solicitada corresponde ao limite de memória.

Para mais informações, consulte Redimensionar recursos de CPU e memória atribuídos a contêineres na documentação do Kubernetes.

Acelerar os horários de início do contêiner

Crie imagens de contêiner o menor possível para minimizar o tempo de download.

Configurar PDBs

Especifique um objeto PodDisruptionBudget (PDB) para réplicas de aplicativos e limite interrupções voluntárias e garanta a estabilidade quando o GKE reduzir escala vertical ou quando ocorrerem upgrades de nós.

Para mais informações, consulte Como especificar um orçamento de interrupção para seu aplicativo.

Definir sondagens de prontidão e atividade significativas

Configure sondagens de atividade e prontidão para todos os contêineres e ajude a garantir que o GKE roteie o tráfego apenas para pods prontos e reinicie instâncias com falha, evitando a perda de tráfego durante o escalonamento automático.

Para mais informações, consulte Configurar sondagens de atividade, prontidão e inicialização.

Configurar o encerramento completo do aplicativo

Prepare os contêineres para o encerramento otimizado detectando o sinal SIGTERM, finalizando as solicitações em andamento antes de sair ou configurando os hooks preStop.

Para mais informações, consulte Encerramento e encerramento completo de VMs preemptivas.

Implementar novas tentativas com espera exponencial

Implemente novas tentativas de espera exponencial no nível do aplicativo ou da malha de serviço para lidar com falhas temporárias ou possíveis preempções de VM spot.

Para mais informações, consulte Retries na documentação do Istio.

Lista de verificação de otimização de aplicativos e cargas de trabalho

Referência e visibilidade de custos

Para otimizar os custos, primeiro você precisa ter visibilidade dos gastos do GKE e de como eles são alocados. Essa visibilidade ajuda a atribuir custos às equipes e unidades de negócios que os geram.

A documentação do GKE a seguir descreve como estabelecer uma visibilidade profunda do faturamento, do consumo de recursos e das métricas de referência do GKE.

Ativar a alocação de custos do GKE

Ative a alocação de custos do GKE para ter visibilidade das solicitações de recursos da carga de trabalho e dos custos associados. A alocação de custos atribui os custos do cluster a namespaces e rótulos do Kubernetes das suas cargas de trabalho.

Exporte esses detalhes para o BigQuery para analisar os dados no Cloud Billing. Use essa análise para identificar quais cargas de trabalho causam picos de faturamento, realizar estornos e otimizar solicitações de recursos.

Para mais informações, consulte Receber insights importantes sobre gastos para a alocação de recursos do GKE e os custos do cluster.

Analisar os volumes de ingestão de registros e métricas

Ativar o Cloud Logging e o Cloud Monitoring para seus clusters gera custos. Altos volumes de ingestão de registros e métrica personalizada podem resultar em cobranças inesperadas. Audite centralmente quais níveis de registro e métricas personalizadas são ingeridos.

Para mais informações sobre como resolver problemas de uso excessivo da API Logging ou de tempos limite de gravação de registros, consulte:

Monitorar a integridade do Metrics Server

Monitore a integridade da implantação do Metrics Server, porque os controladores de escalonamento automático integrados do GKE dependem dele para recuperar métricas de CPU e memória.

Para mais informações, consulte Solucionar problemas do escalonamento automático horizontal de pods.

Promover uma cultura de economia de custos

Ofereça aos desenvolvedores acesso a painéis de gastos na nuvem e estabeleça um treinamento de FinOps para alinhar as decisões de arquitetura com os orçamentos de custos comerciais.

Para mais informações sobre a cultura de eficiência de custos organizacionais, consulte Disseminar a cultura de economia de custos.

Lista de verificação de visibilidade e valor de referência de custo

Usar o Compute Advisor

O Compute Advisor é uma interface com tecnologia de IA no console Google Cloud , com tecnologia do Gemini, que ajuda você a projetar arquiteturas resilientes e econômicas para o GKE.

O Compute Advisor fornece orientações de disponibilidade quase em tempo real para VMs flex-start e VMs spot, além de verificar as políticas e cotas de recursos da sua organização antes da implantação. O Compute Advisor não oferece orientação de disponibilidade para cargas de trabalho que exigem recursos sob demanda.

Para acessar o Gemini no console do Google Cloud , siga estas etapas:

  1. No console Google Cloud , acesse a página Visão geral.

    Ir para Visão geral

  2. Na seção Projetar sua infraestrutura com o Compute Advisor, envie um comando. O Gemini começa a gerar uma resposta.

  3. Para gerar recomendações de arquitetura, execute um dos exemplos de comandos a seguir no Compute Advisor. Quando você clica nos botões Executar comando no Compute Advisor, o console do Google Cloud pode levar mais de 15 segundos para carregar:

  • Escalonamento automático e empacotamento:

    Caso de uso:para maximizar o empacotamento e minimizar a sobrecarga de CPU ociosa, use este comando para configurar uma estratégia de escalonamento automático de cluster do GKE e pools de nós.

      Configure a GKE cluster to use autoscaler and node pool strategy
      to maximize bin packing and minimize idle CPU overhead.
    

    Executar comando no Compute Advisor

  • Governança de multilocação:

    Caso de uso:para manter os namespaces de desenvolvimento dentro dos limites de orçamento, use este comando para criar uma política de ResourceQuota para um cluster do GKE multilocatário.

      Draft a ResourceQuota policy for a multi-tenant GKE
      cluster to keep development namespaces within budget bounds.
    

    Executar comando no Compute Advisor

  • Otimização de cargas de trabalho:

    Caso de uso:para ajudar você a decidir se é melhor usar o modo Autopilot ou Standard do GKE para uma carga de trabalho em lote com demandas de recursos variáveis, use este comando para receber uma recomendação:

      Recommend whether to use GKE Autopilot or Standard mode for a batch processing workload with highly variable resource demands.
    

    Executar comando no Compute Advisor

A seguir

Para mais informações sobre os princípios arquitetônicos e a cultura organizacional necessários para a eficiência de custos, consulte Práticas recomendadas para executar aplicativos do Kubernetes otimizados para custo no GKE.