Ajuste o tamanho das suas cargas de trabalho do GKE em grande escala

Este tutorial mostra como dimensionar corretamente as suas cargas de trabalho do Google Kubernetes Engine (GKE) com recomendações do VPA e métricas de utilização.

Compreenda por que motivo o ajuste de tamanho dos recursos é importante

O aprovisionamento insuficiente pode privar os seus contentores dos recursos necessários para executar as suas aplicações, tornando-as lentas e não fiáveis. O aprovisionamento excessivo não afeta o desempenho das suas aplicações, mas pode aumentar a sua fatura mensal.

A tabela seguinte descreve as implicações do aprovisionamento insuficiente e do aprovisionamento excessivo de CPU e memória:

Recurso Estado da administração de contas Risco Explicação
CPU Over Custo Aumenta o custo das suas cargas de trabalho reservando recursos desnecessários.
Abaixo Desempenho Pode fazer com que as cargas de trabalho abrande ou deixe de responder.
Não definido Fiabilidade A CPU pode ser limitada a 0, o que faz com que as suas cargas de trabalho não respondam.
Memória Over Custo Aumenta o custo das suas cargas de trabalho reservando recursos desnecessários.
Abaixo Fiabilidade Pode fazer com que as aplicações terminem com um erro de falta de memória (OOM).
Não definido Fiabilidade kubelet pode parar os seus Pods em qualquer altura e marcá-los como com falhas.

Objetivos

Neste tutorial, vai aprender a:

  • Implemente uma aplicação de exemplo.
  • Exporte métricas de recomendações do GKE do Monitoring para o BigQuery.
  • Use o BigQuery e o Looker Studio para ver recomendações de contentores do GKE em vários projetos.

Custos

Neste documento, usa os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custos com base na sua utilização prevista, use a calculadora de preços.

Os novos Google Cloud utilizadores podem ser elegíveis para uma avaliação gratuita.

Quando terminar as tarefas descritas neste documento, pode evitar a faturação contínua eliminando os recursos que criou. Para mais informações, consulte o artigo Limpe.

Antes de começar

Configure o seu projeto

O Cloud Shell está pré-instalado com o software necessário para este tutorial, incluindo o Docker, o kubectl, a CLI gcloud e o Terraform. Se não usar o Cloud Shell, tem de instalar a CLI gcloud.

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.

  3. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  4. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  5. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Resource Manager, Google Kubernetes Engine, Cloud Monitoring, BigQuery, Cloud Run, Cloud Build APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable cloudresourcemanager.googleapis.com container.googleapis.com monitoring.googleapis.com bigquery.googleapis.com run.googleapis.com cloudbuild.googleapis.com cloudscheduler.googleapis.com artifactregistry.googleapis.com
  8. Install the Google Cloud CLI.

  9. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  10. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  11. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  12. Verify that billing is enabled for your Google Cloud project.

  13. Enable the Resource Manager, Google Kubernetes Engine, Cloud Monitoring, BigQuery, Cloud Run, Cloud Build APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable cloudresourcemanager.googleapis.com container.googleapis.com monitoring.googleapis.com bigquery.googleapis.com run.googleapis.com cloudbuild.googleapis.com cloudscheduler.googleapis.com artifactregistry.googleapis.com
  14. Grant roles to your user account. Run the following command once for each of the following IAM roles: roles/serviceusage.serviceUsageAdmin, roles/container.clusterAdmin, roles/iam.serviceAccountAdmin, roles/iam.securityAdmin, roles/container.admin

    gcloud projects add-iam-policy-binding PROJECT_ID --member="user:USER_IDENTIFIER" --role=ROLE

    Replace the following:

    • PROJECT_ID: Your project ID.
    • USER_IDENTIFIER: The identifier for your user account. For example, myemail@example.com.
    • ROLE: The IAM role that you grant to your user account.
  15. Configure o seu ambiente

    Para configurar o seu ambiente, siga estes passos

    1. Defina variáveis de ambiente:

      export PROJECT_ID=PROJECT_ID
      export REGION=us-central1
      export ZONE=us-central1-f
      export IMAGE=$REGION-docker.pkg.dev/$PROJECT_ID/main/vpa-recs-image:latest
      

      Substitua PROJECT_ID pelo seu Google Cloud ID do projeto.

    2. Defina as variáveis de ambiente predefinidas:

      gcloud config set project $PROJECT_ID
      gcloud config set compute/region $REGION
      gcloud config set compute/zone $ZONE
      
    3. Clone o repositório de código.

      git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
      
    4. Mude para o diretório de trabalho.

      cd kubernetes-engine-samples/cost-optimization/gke-vpa-recommendations
      

    (Opcional) Configure a aplicação de exemplo

    Esta é uma secção opcional para implementar uma aplicação de exemplo. Para usar um cluster existente, certifique-se de que o Cloud Monitoring está configurado no seu cluster.

    Para simular um ambiente realista, vai usar um script de configuração para implementar a Online Boutique.

    Os passos seguintes instalam a aplicação de exemplo e modificam a configuração predefinida. Por exemplo, as instruções configuram o Horizontal Pod Autoscaler (HPA) para algumas cargas de trabalho e alteram os pedidos e os limites de recursos.

    1. Execute o script de configuração:

      ./scripts/setup.sh
      

      O script de configuração faz o seguinte:

      • Cria um cluster do GKE.
      • Implementa a aplicação de exemplo Online Boutique.
      • Atualiza os pedidos de recursos de CPU e memória do pod.
      • Configura um recurso HorizontalPodAutoscaler para as adservice cargas de trabalho para simular um ambiente realista.

      O script de configuração pode demorar até 10 minutos a ser concluído.

    2. Verifique se a aplicação de exemplo está pronta:

      kubectl get deployment
      

      O resultado é semelhante ao seguinte:

      NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
      adservice               2/2     2            2           4m54s
      cartservice             1/1     1            1           4m55s
      checkoutservice         1/1     1            1           4m56s
      currencyservice         1/1     1            1           4m55s
      emailservice            1/1     1            1           4m56s
      frontend                1/1     1            1           4m55s
      loadgenerator           1/1     1            1           4m55s
      paymentservice          1/1     1            1           4m55s
      productcatalogservice   1/1     1            1           4m55s
      recommendationservice   1/1     1            1           4m56s
      redis-cart              1/1     1            1           4m54s
      shippingservice         1/1     1            1           4m54s
      

    Crie um repositório

    Crie o repositório para armazenar a imagem do exportador de métricas.

    1. Crie um novo repositório do Docker:

      gcloud artifacts repositories create main --repository-format=docker \
          --location=$REGION \
          --description="docker repository"
      
    2. Configure a autenticação para repositórios do Docker:

      gcloud auth configure-docker $REGION-docker.pkg.dev
      
    3. Implemente a imagem executando o seguinte comando:

      gcloud builds submit metrics-exporter --region=$REGION --tag $IMAGE
      

    Implemente a aplicação

    Na secção seguinte, vai usar o Terraform para realizar as seguintes tarefas:

    • Crie uma conta de serviço e atribua as autorizações necessárias para gerir e interagir com os Google Cloud recursos.
    • Conceda as funções de visitante de monitorização, editor de dados do BigQuery, proprietário de dados do BigQuery, utilizador da tarefa do BigQuery e invocador do Cloud Run à conta de serviço.
    • Implemente uma tarefa do Cloud Run que extrai uma imagem Docker do Artifact Registry e a executa com a configuração especificada.
    • Crie uma tarefa do Cloud Scheduler que aciona o serviço do Cloud Run diariamente.
    • Crie um conjunto de dados, uma tabela e uma vista do BigQuery para armazenar dados de métricas e recomendações.

    Configure o Terraform

    1. Defina as variáveis de ambiente de configuração:

      export TF_VAR_BIGQUERY_DATASET=gke_metrics_dataset
      export TF_VAR_BIGQUERY_TABLE=gke_metrics
      export TF_VAR_RECOMMENDATION_WINDOW_SECONDS=1209600
      export TF_VAR_RECOMMENDATION_DISTANCE=86400
      export TF_VAR_LATEST_WINDOW_SECONDS=600
      export TF_VAR_METRIC_WINDOW=259200
      export TF_VAR_METRIC_DISTANCE=600
      

      Este comando inclui o seguinte:

      • TF_VAR_BIGQUERY_DATASET e TF_VAR_BIGQUERY_TABLE: contêm os dados das métricas do GKE.
      • TF_VAR_RECOMMENDATION_WINDOW_SECONDS: o período para as recomendações de VPA. A predefinição é 1 209 600 segundos ou 14 dias.
      • TF_VAR_RECOMMENDATION_DISTANCE: o intervalo ao qual os pontos de dados de recomendações de VPA são devolvidos. A predefinição é 86 400 segundos ou a cada 1 dia.
      • TF_VAR_LATEST_WINDOW_SECONDS: o período para obter os valores de recursos pedidos e de limite mais recentes. A predefinição é 600 segundos ou 10 minutos.
      • METRIC_WINDOW: estabelece o período para as métricas de utilização e utilização do GKE. A predefinição é 259 200 segundos ou 3 dias.
      • METRIC_DISTANCE: o intervalo no qual os pontos de dados são devolvidos. A predefinição é 600 segundos ou a cada 10 minutos.

      Ajuste estes valores com base nas necessidades das suas cargas de trabalho. Por exemplo, para cargas de trabalho em lote que são executadas uma vez por mês, atualize TF_VAR_RECOMMENDATION_WINDOW_SECONDS e METRIC_WINDOW para 2592000 segundos (30 dias).

    Implemente a configuração do Terraform

    1. Inicialize, valide e aplique a configuração:

      terraform -chdir=terraform init
      terraform -chdir=terraform validate
      terraform -chdir=terraform apply -var project_id=$PROJECT_ID -var region=$REGION -var image=$IMAGE
      

      Este comando fornece um plano de execução e pede a sua aprovação antes de fazer alterações. Reveja o plano e, se tudo estiver como esperado, escreva yes para continuar.

      Depois de o comando apply ser concluído com êxito, os seus recursos são criados e geridos pelo Terraform.

    2. Execute manualmente a tarefa do Cloud Scheduler:

      gcloud scheduler jobs run recommendation-schedule --location ${REGION}
      

    Valide a implementação

    1. Selecione o separador Registos na página de detalhes de workload-recommendations.

    2. Verifique se os registos de métricas estão a ser processados na consola do Cloud Run:

      Aceda ao Cloud Run

      Os registos mostram as métricas a serem escritas no BigQuery. O resultado deve ser semelhante ao seguinte:

      INFO - Building Row
      INFO - Successfully wrote 12 rows to BigQuery table [PROJECT_ID].gke_metric_dataset.gke_metrics.
      INFO - Run Completed
      

      Se o resultado não tiver correspondência, aguarde cinco minutos e, em seguida, execute o comando gcloud scheduler jobs run recommendation-schedule --location $REGION.

    Veja a recomendação de contentor no BigQuery

    1. Aceda à página do BigQuery na Google Cloud consola:

      Aceda ao BigQuery

    2. Verifique se os dados estão visíveis na tabela gke_metrics e na vista container_recommendations. Consoante o número de cargas de trabalho, pode demorar alguns minutos a escrever todas as métricas no BigQuery.

    3. No editor de consultas, selecione todas as linhas na vista container_recommendations:

      SELECT * FROM `PROJECT_ID.gke_metrics_dataset.container_recommendations`
      

      Este programa extrai as seguintes métricas do Cloud Monitoring:

      • Detalhes da carga de trabalho: o ID do projeto, o nome do cluster, o controlador e o nome do contentor.

      • Utilização e utilização da CPU/memória: a quantidade de CPU e memória que está a ser usada pela carga de trabalho, bem como a percentagem de CPU e memória que está a ser utilizada.

      • Pedido e limites: a quantidade de CPU e memória pedida para a carga de trabalho, bem como a quantidade máxima de CPU e memória permitida para a carga de trabalho.

      • Recomendações de carga de trabalho de CPU e memória: recomendações sobre a quantidade de CPU e memória que deve ser atribuída à carga de trabalho para garantir que é executada sem problemas, com base nas recomendações do VPA para implementações e na utilização real e nas utilizações de destino para objetos que não sejam de implementação.

    Visualize recomendações no Looker Studio

    O Looker Studio é uma plataforma de Business Intelligence autónoma e sem custo financeiro que lhe permite criar e consumir visualizações de dados, painéis de controlo e relatórios. Com o Looker Studio, pode estabelecer ligação aos seus dados, criar visualizações e partilhar as suas estatísticas com outras pessoas.

    Use o Looker Studio para visualizar dados na vista do BigQuery:container_recommendations

    1. Abra o modelo do painel de controlo de redimensionamento da carga de trabalho
    2. Clique em Usar os meus próprios dados.
    3. Selecione o seu projeto.
    4. Para Conjunto de dados, selecione gke_metric_dataset.
    5. Para Tabela, selecione container_recommendations.
    6. Clique em Adicionar.
    7. Clique em Adicionar ao relatório.

    Detalhes do modelo do Looker Studio

    A página de detalhes do modelo do Looker Studio fornece as seguintes informações:

    • Vista geral do redimensionamento das cargas de trabalho do GKE: fornece uma vista geral dos seus clusters, incluindo:
      • O número de cargas de trabalho de melhor esforço e capacidade de expansão que estão em risco de ter problemas de fiabilidade e desempenho.
      • Potenciais poupanças de recursos de CPU e memória. Os valores positivos indicam um aprovisionamento excessivo, enquanto os valores negativos indicam um aprovisionamento insuficiente.
    • Recomendações de cargas de trabalho: fornece recomendações para pedidos e limites de CPU e memória de cargas de trabalho.
    • Cargas de trabalho do GKE em risco: mostra as cargas de trabalho com o maior risco de ter problemas de fiabilidade e desempenho.
    • Histórico – Ajuste de tamanho da carga de trabalho – Como está o nosso desempenho?: Fornece uma vista do histórico de quão bem o ajuste de tamanho da carga de trabalho e a redução do número de cargas de trabalho de melhor esforço foram implementados.

    Recomendação de contentor de limite e CPU pedida

    Se os valores de CPU pedidos e limite das cargas de trabalho forem iguais, a QoS é considerada Garantida e a recomendação de CPU é definida como o máximo no período de 14 dias. Caso contrário, é usado o percentil 95 da recomendação de CPU pedida no prazo de 14 dias.

    Quando os valores de pedido e limite da CPU são iguais, a recomendação para o limite da CPU é definida como a recomendação de VPA de pedido de CPU máximo apenas para objetos de implementação e a utilização da CPU com uma utilização alvo de 70%. Se o pedido e o limite da carga de trabalho não forem idênticos, é usada a taxa de limite existente.

    Memória pedida e recomendação do contentor de limite

    As recomendações de memória usam a recomendação de VPA máxima apenas para objetos de implementações e a utilização máxima de memória com uma utilização alvo de 80% para garantir a fiabilidade das cargas de trabalho. Pode atualizar os valores de utilização alvo na consulta da vista container_recommendation.

    É uma prática recomendada usar a mesma quantidade de memória para pedidos e limites porque a memória é um recurso não comprimível. Quando a memória se esgota, o Pod tem de ser desativado. Para evitar a desativação dos pods e a desestabilização do seu ambiente, tem de definir a memória pedida para o limite de memória.

    Priorizar recomendações

    É atribuído um valor de prioridade a cada linha para apresentar cargas de trabalho que requerem atenção imediata com base nas recomendações. As unidades de CPU e memória são diferentes. Para normalizar as unidades, a proporção entre a CPU predefinida e a memória do preço a pedido do tipo de máquina E2 é usada como uma aproximação para converter as unidades de memória em unidades de CPU.

    A prioridade é calculada através da seguinte fórmula:

    priority = (CPU requested - CPU recommendation) + ((memory requested -
    memory recommendation) / (vCPUs on-demand pricing /memory on-demand pricing ))
    

    Para o Autopilot, os recursos totais pedidos pela configuração de implementação devem estar dentro dos valores mínimos e máximos suportados.

    Veja recomendações de VPA para vários projetos

    Para ver recomendações de contentores de VPA em vários projetos, use um novo projeto como projeto de âmbito.

    Quando implementar este projeto no seu ambiente de produção, adicione todos os projetos que quer analisar ao âmbito das métricas do novo projeto.

    Limpar

    Para evitar incorrer em custos na sua conta do Google Cloud pelos recursos usados neste tutorial, elimine o projeto que contém os recursos ou mantenha o projeto e elimine os recursos individuais.

    Elimine o projeto

    A forma mais fácil de evitar a faturação é eliminar o projeto que criou para o tutorial.

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

    O que se segue?