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.
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.
- 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.
-
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith 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_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enablepermission. 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 -
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
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 theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Create a Google Cloud project:
gcloud projects create PROJECT_ID
Replace
PROJECT_IDwith 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_IDwith your Google Cloud project name.
-
Verify that billing is enabled for your Google Cloud project.
-
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 theserviceusage.services.enablepermission. 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 -
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.admingcloud 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.
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:latestSubstitua
PROJECT_IDpelo seu Google Cloud ID do projeto.Defina as variáveis de ambiente predefinidas:
gcloud config set project $PROJECT_ID gcloud config set compute/region $REGION gcloud config set compute/zone $ZONEClone o repositório de código.
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samplesMude para o diretório de trabalho.
cd kubernetes-engine-samples/cost-optimization/gke-vpa-recommendationsExecute o script de configuração:
./scripts/setup.shO 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
adservicecargas de trabalho para simular um ambiente realista.
O script de configuração pode demorar até 10 minutos a ser concluído.
Verifique se a aplicação de exemplo está pronta:
kubectl get deploymentO 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 4m54sCrie um novo repositório do Docker:
gcloud artifacts repositories create main --repository-format=docker \ --location=$REGION \ --description="docker repository"Configure a autenticação para repositórios do Docker:
gcloud auth configure-docker $REGION-docker.pkg.devImplemente a imagem executando o seguinte comando:
gcloud builds submit metrics-exporter --region=$REGION --tag $IMAGE- 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.
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=600Este comando inclui o seguinte:
TF_VAR_BIGQUERY_DATASETeTF_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_SECONDSeMETRIC_WINDOWpara2592000segundos (30 dias).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=$IMAGEEste 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
yespara continuar.Depois de o comando apply ser concluído com êxito, os seus recursos são criados e geridos pelo Terraform.
Execute manualmente a tarefa do Cloud Scheduler:
gcloud scheduler jobs run recommendation-schedule --location ${REGION}Selecione o separador Registos na página de detalhes de
workload-recommendations.Verifique se os registos de métricas estão a ser processados na consola do 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 CompletedSe o resultado não tiver correspondência, aguarde cinco minutos e, em seguida, execute o comando
gcloud scheduler jobs run recommendation-schedule --location $REGION.Aceda à página do BigQuery na Google Cloud consola:
Verifique se os dados estão visíveis na tabela
gke_metricse na vistacontainer_recommendations. Consoante o número de cargas de trabalho, pode demorar alguns minutos a escrever todas as métricas no BigQuery.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.
- Abra o modelo do painel de controlo de redimensionamento da carga de trabalho
- Clique em Usar os meus próprios dados.
- Selecione o seu projeto.
- Para Conjunto de dados, selecione
gke_metric_dataset. - Para Tabela, selecione
container_recommendations. - Clique em Adicionar.
- Clique em Adicionar ao relatório.
- 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.
- Saiba mais sobre a otimização de custos do GKE em Práticas recomendadas para executar aplicações Kubernetes otimizadas em termos de custos no GKE.
- Encontre recomendações de design e práticas recomendadas para otimizar o custo das Google Cloud cargas de trabalho no Google Cloud Well-Architected Framework: otimização de custos.
- Saiba mais sobre como otimizar os custos do cluster em períodos de baixa procura em Reduzir os custos ao reduzir a escala dos clusters do GKE durante as horas fora de ponta.
- Saiba mais sobre a otimização de custos do GKE em Monitorizar clusters do GKE para otimização de custos com o Monitoring.
Configure o seu ambiente
Para configurar o seu ambiente, siga estes passos
(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.
Crie um repositório
Crie o repositório para armazenar a imagem do exportador de métricas.
Implemente a aplicação
Na secção seguinte, vai usar o Terraform para realizar as seguintes tarefas:
Configure o Terraform
Implemente a configuração do Terraform
Valide a implementação
Veja a recomendação de contentor no BigQuery
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
Detalhes do modelo do Looker Studio
A página de detalhes do modelo do Looker Studio fornece as seguintes informações:
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