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.
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.
- 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.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
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 - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
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 -
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.
- Replace
configurar o ambiente
Para configurar seu ambiente, siga estas etapas:
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.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
Clone o repositório do código.
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples
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.
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.
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.
Crie um novo repositório do Docker:
gcloud artifacts repositories create main --repository-format=docker \ --location=$REGION \ --description="docker repository"
Configure a autenticação nos repositórios do Docker:
gcloud auth configure-docker $REGION-docker.pkg.dev
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
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
eTF_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
eMETRIC_WINDOW
para2592000
segundos (30 dias).
Implantar a configuração do Terraform
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.
Execute manualmente o job do Cloud Scheduler:
gcloud scheduler jobs run recommendation-schedule --location ${REGION}
Verificar a implantação
Selecione a guia Registros na página de detalhes do
workload-recommendations
.Verifique se os registros de métricas estão sendo processados no console do 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
Acesse a página do BigQuery no Console do Google Cloud.
Verifique se os dados estão visíveis na tabela
gke_metrics
e na visualizaçãocontainer_recommendations
. Dependendo do número de cargas de trabalho, a gravação de todas as métricas no BigQuery pode levar alguns minutos.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:
- Abra o modelo do painel de redimensionamento da carga de trabalho
- Clique em Usar meus próprios dados.
- Selecione o projeto.
- Em "Conjunto de dados", selecione
gke_metric_dataset
. - Em "Tabela", selecione
container_recommendations
. - Clique em Adicionar.
- 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
- Saiba mais sobre a otimização de custos do GKE em Práticas recomendadas para executar aplicativos do Kubernetes otimizados para custo no GKE.
- Encontre recomendações de design e práticas recomendadas para otimizar o custo de cargas de trabalho do Google Cloud no Framework de arquitetura do Google Cloud: otimização de custos.
- Saiba mais sobre como otimizar custos do cluster em períodos de baixa demanda em Como reduzir custos diminuindo a escala dos clusters do GKE fora do período de pico.
- Saiba mais sobre a otimização de custos do GKE em Como monitorar clusters do GKE para otimização de custos usando o Monitoring.