Dimensionar as cargas de trabalho do GKE em escala


Neste tutorial, mostramos como dimensionar corretamente suas cargas de trabalho do Google Kubernetes Engine (GKE) com recomendações VPA e métricas de uso.

Entender a importância do redimensionamento de recursos

O subprovisionamento pode prejudicar seus contêineres dos recursos necessários para executar seus aplicativos, o que os torna lentos e não confiáveis. O provisionamento em excesso não afeta o desempenho dos seus aplicativos, mas pode aumentar sua fatura mensal.

A tabela a seguir descreve as implicações do provisionamento e da alocação excessiva de CPU e memória:

Recurso Status do provisionamento Risco Explicação
CPU Mais de Custo Aumenta o custo das suas cargas de trabalho reservando recursos desnecessários.
Menos de Desempenho Pode desacelerar ou parar de responder às cargas de trabalho.
Não definido Confiabilidade A CPU pode ser limitada a 0, fazendo com que suas cargas de trabalho não respondam.
Memória Mais de Custo Aumenta o custo das suas cargas de trabalho reservando recursos desnecessários.
Menos de Confiabilidade Pode fazer com que os aplicativos sejam encerrados com um erro de falta de memória (OOM, na sigla em inglês).
Não definido Confiabilidade kubelet pode interromper seus pods a qualquer momento e marcá-los como falhas.

Objetivos

Neste tutorial, você aprenderá a:

  • Implante um aplicativo de amostra.
  • Exportar métricas de recomendações do GKE do Monitoring para o BigQuery.
  • Use o BigQuery e o Looker Studio para visualizar recomendações de contêineres do GKE em todos os projetos.

Custos

Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

Ao concluir as tarefas descritas neste documento, é possível evitar o faturamento contínuo excluindo os recursos criados. Saiba mais em Limpeza.

Antes de começar

Crie o projeto

O Cloud Shell vem pré-instalado com o software necessário para este tutorial, incluindo Docker, kubectl, gcloud CLI e Terraform. Se você não usa o Cloud Shell, é necessário instalar a gcloud CLI.

  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. To initialize the gcloud CLI, run the following command:

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

    • 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.

  5. Make sure that billing is enabled for your Google Cloud project.

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

    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
  7. Install the Google Cloud CLI.
  8. To initialize the gcloud CLI, run the following command:

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

    • 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.

  10. Make sure that billing is enabled for your Google Cloud project.

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

    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
  12. 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_IDENTIFIER" --role=ROLE
    • Replace PROJECT_ID with your project ID.
    • Replace USER_IDENTIFIER with the identifier for your user account. For example, user:myemail@example.com.

    • Replace ROLE with each individual role.

configurar o ambiente

Para configurar seu ambiente, siga estas etapas:

  1. Defina as 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 ID do projeto do Google Cloud.

  2. Defina as variáveis de ambiente padrão:

    gcloud config set project $PROJECT_ID
    gcloud config set compute/region $REGION
    gcloud config set compute/zone $ZONE
    
  3. Clone o repositório do 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 o aplicativo de amostra

Esta é uma seção opcional para implantar um aplicativo de amostra. Para usar um cluster atual, verifique se o Cloud Monitoring está configurado no cluster.

Para simular um ambiente realista, você usará um script de configuração para implantar o Online Boutique.

Nas etapas a seguir, você instala o aplicativo de amostra e modifica a configuração padrão. Por exemplo, as instruções configuram o Escalonador automático horizontal de pods (HPA, na sigla em inglês) para algumas cargas de trabalho e alteram solicitações e 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.
    • Implanta o aplicativo de amostra Online Boutique.
    • Atualiza solicitações de recursos de memória e CPU do pod.
    • Configura um recurso HorizontalPodAutoscaler para as cargas de trabalho adservice para simular um ambiente realista.

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

  2. Verifique se o aplicativo de amostra está pronto:

    kubectl get deployment
    

    O resultado será assim:

    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
    

Criar 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 nos repositórios do Docker:

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

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

Implantar o aplicativo

Na seção a seguir, use o Terraform para realizar as seguintes tarefas:

  • Crie uma conta de serviço e atribua as permissões necessárias para gerenciar e interagir com os recursos do Google Cloud.
  • Conceda o papel de visualizador de monitoramento, editor de dados do BigQuery, proprietário de dados do BigQuery, usuário de job do BigQuery e papéis de invocador do Cloud Run à conta de serviço.
  • Implante um job do Cloud Run que extraia uma imagem do Docker do Artifact Registry e a execute com a configuração especificada.
  • Crie um job do Cloud Scheduler que acione o serviço do Cloud Run diariamente.
  • Crie um conjunto de dados, uma tabela e uma visualização do BigQuery para armazenar recomendações e dados de métricas.

Configurar o Terraform

  1. Defina as variáveis do 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
    

    Esse comando inclui o seguinte:

    • TF_VAR_BIGQUERY_DATASET e TF_VAR_BIGQUERY_TABLE: contêm os dados da métrica do GKE.
    • TF_VAR_RECOMMENDATION_WINDOW_SECONDS: o período para recomendações de VPA. O padrão é 1.209.600 segundos ou 14 dias.
    • TF_VAR_RECOMMENDATION_DISTANCE: o intervalo em que os pontos de dados de recomendação do VPA são retornados. O padrão é de 86.400 segundos ou a cada 1 dia.
    • TF_VAR_LATEST_WINDOW_SECONDS: o período para conseguir os valores de recurso solicitados e limitados mais recentes. O padrão é 600 segundos ou 10 minutos.
    • METRIC_WINDOW: estabelece o prazo para as métricas de uso e utilização do GKE. O padrão é de 25.9200 segundos ou três dias.
    • METRIC_DISTANCE: o intervalo em que os pontos de dados são retornados. O padrão é 600 segundos ou 10 minutos.

    Ajuste esses valores com base nas necessidades das 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).

Implantar a configuração do Terraform

  1. Inicialize, valide e aplique sua 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
    

    Esse comando fornece um plano de execução e pede sua aprovação antes de fazer qualquer alteração. Revise o plano e, se tudo estiver conforme o esperado, digite yes para continuar.

    Depois que o comando "aplicar" for concluído, os recursos serão criados e gerenciados pelo Terraform.

  2. Execute manualmente o job do Cloud Scheduler:

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

Verificar a implantação

  1. Selecione a guia Registros na página de detalhes do workload-recommendations.

  2. Verifique se os registros de métricas estão sendo processados no console do Cloud Run:

    Acesse o Cloud Run

    Os registros mostram métricas sendo gravadas no BigQuery. A saída será semelhante a esta:

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

    Se a saída não for correspondente, aguarde cinco minutos e execute o comando gcloud scheduler jobs run recommendation-schedule --location $REGION.

Ver a recomendação do contêiner no BigQuery

  1. Acesse a página do BigQuery no Console do Google Cloud.

    Acessar o BigQuery

  2. Verifique se os dados estão visíveis na tabela gke_metrics e na visualização container_recommendations. Dependendo do número de cargas de trabalho, a gravação de todas as métricas no BigQuery pode levar alguns minutos.

  3. No editor de consultas, selecione todas as linhas na visualização container_recommendations:

    SELECT * FROM `PROJECT_ID.gke_metrics_dataset.container_recommendations`
    

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

    • Detalhes da carga de trabalho: o código do projeto, o nome do cluster, o controlador e o nome do contêiner.

    • Uso e utilização da CPU/memória: a quantidade de CPU e memória que está sendo usada pela carga de trabalho, bem como a porcentagem da CPU e da memória que estão sendo utilizadas.

    • Solicitados e limites: a quantidade de CPU e memória solicitada para a carga de trabalho, bem como a quantidade máxima de CPU e memória permitidas 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 precisa ser alocada à carga de trabalho para garantir que ela seja executada corretamente, com base nas recomendações de VPA para implantações e no uso real e meta de utilização para objetos que não sejam de implantação.

Visualizar recomendações no Looker Studio

O Looker Studio é uma plataforma gratuita de autoatendimento de Business Intelligence que permite criar e consumir relatórios, painéis e visualizações de dados. Com o Looker Studio, é possível se conectar aos seus dados, criar visualizações e compartilhar insights com outras pessoas.

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

  1. Abra o modelo do painel de redimensionamento da carga de trabalho
  2. Clique em Usar meus próprios dados.
  3. Selecione o projeto.
  4. Em "Conjunto de dados", selecione gke_metric_dataset.
  5. Em "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:

  • Visão geral do redimensionamento de carga de trabalho do GKE: fornece uma visão geral dos clusters, incluindo:
    • O número de cargas de trabalho com o melhor esforço e Burstable que estão em risco de problemas de confiabilidade e desempenho.
    • Possível economia de recursos de CPU e memória. Valores positivos indicam provisionamento em excesso, enquanto valores negativos indicam provisionamento em excesso.
  • Recomendações de carga de trabalho: oferece recomendações de solicitações e limites de CPU e memória.
  • Cargas de trabalho do GKE em risco: mostra as cargas de trabalho que estão em maior risco de enfrentar problemas de confiabilidade e desempenho.
  • Histórico - Como readaptar a carga de trabalho: Como estamos nos saindo?: Fornece uma visão histórica do redimensionamento da carga de trabalho e da redução do número de cargas de trabalho da Best Effort foram implementadas.

CPU solicitada e limitar recomendação de contêiner

Se a CPU de cargas de trabalho solicitadas e os valores de limite forem iguais, a QoS será considerada garantida, e a recomendação de CPU será definida como o máximo dentro do período de 14 dias. Caso contrário, será usado o 95º percentil da recomendação solicitada pela CPU, em até 14 dias.

Quando a solicitação de CPU e os valores de limite forem iguais, a recomendação para o limite de CPU é definida como a recomendação máxima de VPA de solicitação de CPU apenas para objetos de implantação e o uso da CPU com uma meta de utilização de 70%. Se a solicitação e o limite da carga de trabalho não forem idênticos, a proporção atual será usada.

Memória solicitada e limitar a recomendação do contêiner

As recomendações de memória usam a recomendação de VPA máxima apenas para objetos de implantações e o uso máximo de memória com uma tolerância de destino de 80% para garantir a confiabilidade das cargas de trabalho. É possível atualizar os valores de utilização de destino na consulta de visualização container_recommendation.

É uma prática recomendada usar a mesma quantidade de memória para solicitações e limites porque a memória é um recurso compactável. Quando a memória se esgota, o pod precisa ser desativado. Para evitar que os pods sejam removidos e desestabilizar o ambiente, é preciso definir a memória solicitada como limite de memória.

Priorizar recomendações

Um valor de prioridade é atribuído a cada linha para mostrar as cargas de trabalho que exigem 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 de preço por máquina E2 sob demanda entre a CPU e a memória predefinidas é usada como uma aproximação para converter unidades de memória em unidades de CPU.

A prioridade é calculada usando a seguinte fórmula:

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

No Autopilot, os recursos totais solicitados pela configuração de implantação precisam estar nos valores mínimos e máximos compatíveis.

Ver recomendações do VPA para vários projetos

Para ver as recomendações de contêiner VPA em vários projetos, use um novo projeto como um projeto de escopo.

Ao implantar este projeto no ambiente de produção, adicione todos os projetos que você quer analisar ao escopo das métricas do novo projeto.

Limpar

Para evitar cobranças na sua conta do Google Cloud pelos recursos usados no tutorial, exclua o projeto que os contém ou mantenha o projeto e exclua os recursos individuais.

Excluir o projeto

A maneira mais fácil de evitar o faturamento é excluir o projeto criado para o tutorial.

Delete a Google Cloud project:

gcloud projects delete PROJECT_ID

A seguir