Esta página fornece informações sobre eventos de decisão emitidos pelo Horizontal Pod Autoscaler no Google Kubernetes Engine (GKE). Ao analisar estes eventos, pode obter estatísticas sobre a forma como o controlador de escala automática horizontal de pods gere o dimensionamento da carga de trabalho e compreender o processo de tomada de decisões por detrás das respetivas ações.
O Horizontal Pod Autoscaler emite eventos de decisão, que são armazenados como entradas de registo no Cloud Logging.
Antes de começar
Certifique-se de que cumpre os seguintes pré-requisitos:
Selecione ou crie um projeto
Pode usar um projeto existente ou criar um novo para este tutorial.
- 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.
-
In the Google Cloud console, on the project selector page, select or create 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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create 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
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Para ativar o registo de eventos do redimensionador automático horizontal de pods no seu cluster:
Administrador do cluster do Kubernetes Engine (
roles/container.clusterAdmin
) -
Para aceder aos registos e usar o Explorador de registos e o Log Analytics:
Visualizador de registos (
roles/logging.viewer
) - O cluster do GKE tem de ter a versão
1.31.5-gke.1090000
ou posterior, ou1.32.1-gke.1260000
ou posterior. - Ative o Cloud Logging no seu cluster do GKE. Aplicam-se os preços do Cloud Logging.
CLUSTER_NAME
: nome do cluster que quer criar ou atualizar.PROJECT_ID
: o ID do seu Google Cloud projeto.LOCATION
: calcule as regiões ou as zonas para o seu cluster.CLUSTER_NAME
: nome do cluster que quer criar ou atualizar.PROJECT_ID
: o ID do seu Google Cloud projeto.LOCATION
: calcule as regiões ou as zonas para o seu cluster.Recomendação atómica: o Horizontal Pod Autoscaler gera um evento de recomendação atómico a cada 15 segundos para cada métrica que está a ser monitorizada por cada objeto HPA no seu cluster. Por exemplo, se tiver dois objetos HPA no cluster e cada objeto HPA monitorizar três métricas, são registadas seis recomendações atómicas a cada 15 segundos.
Recomendação final: o redimensionador automático horizontal de pods gera um evento de recomendação final a cada 15 segundos para cada objeto HPA no seu cluster. Por exemplo, se tiver dois objetos HPA no cluster, são registadas duas recomendações finais a cada 15 segundos.
index
: índice da métrica na matrizSpec metrics
.type
: tipo de métrica com valores do MetricSourceType (por exemplo, recurso, externo).spec
: nome da métrica e um objetivo definido nessa métrica.status
: Condições de estado relativamente à escalabilidade e às limitações de escalamento.newest_sample_time
: indicação de tempo da amostra de métricas mais recente.newest_sample_age_seconds
: idade da amostra mais recente, medida em segundos, desde o início do cálculo da recomendação. Um valor negativo significa que a amostra de métricas é anterior ao início do cálculo.dampening
: O HPA aplica a atenuação à recomendação e à respetiva direção para tentar reduzir a magnitude de uma potencial expansão. O amortecimento pode ocorrer das seguintes formas:up
: uma direção de redução significa que o HPA assume que os pods com métricas em falta têm uma utilização de 100% da métrica.down
: uma direção de amortecimento significa que o HPA assume que os pods com métricas em falta ou os pods não preparados consomem 0% de utilização da métrica.none
: não é aplicada nenhuma redução.
override
: mensagem que indica um motivo quando a recomendação proposta pelo HPA não é aplicada (por exemplo, devido à tolerância); ounone
se não ocorrer nenhuma substituição.result
: resultado da recomendação. Propõe um número recomendado de réplicas ou apresenta uma mensagem de erro se não for possível calcular a recomendação.replicas
: número de réplicas após a estabilização.reason
: tipo de estabilização aplicado:scaleUp
ouscaleDown
.stabilization_window
: período de tempo de estabilização associado, em segundos.replicas_before_stabilization
: número de réplicas recomendado antes da estabilização.replicas
: número de réplicas após a limitação.reason
: motivo pelo qual não é possível dimensionar além da quantidade mínima ou máxima de réplicas.scaling_policy
: a política de escalabilidade aplicada.selectPolicy
: especifica como é selecionada uma política quando é feita uma expansão numa determinada direção.MaxChange
corresponde a MaxChangePolicySelect;MinChange
corresponde a MinChangePolicySelect. Se o ajuste de escala estiver desativado, o camposelectPolicy
não é apresentado.replicas_before_limitation
: número de réplicas recomendado antes da limitação.- Ativou o Cloud Logging para o cluster.
- Ativou os registos
KCP_HPA
para o cluster. - Implementou, pelo menos, um objeto
hpa
configurado corretamente no seu cluster. - Consulte o artigo Acerca dos registos do GKE.
- Compreenda os seus registos do GKE.
- Saiba como encontrar registos específicos do GKE através de consultas de exemplo.
- Saiba como otimizar o dimensionamento automático de pods com base em métricas.
Ative as APIs
Enable the GKE, and Cloud Logging 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.
Configure o Cloud Shell
Neste tutorial, vai usar a Cloud Shell para executar comandos gcloud
e kubectl
. O Cloud Shell é um ambiente de shell para gerir recursos alojados no Google Cloud. Vem pré-instalado com a
CLI gcloud do Google Cloud e a ferramenta de linha de comandos kubectl.
In the Google Cloud console, activate Cloud Shell.
É aberta uma sessão do Cloud Shell num frame na parte inferior da consola.
Antes de executar comandos neste tutorial, certifique-se de que o projeto predefinido está definido como o ID do projeto onde quer implementar a app de exemplo. Se ainda não estiver definido, execute o seguinte comando no Cloud Shell:
gcloud config set project PROJECT_ID
Substitua PROJECT_ID
pelo seu ID do projeto.
Funções e autorizações necessárias
Para receber as autorizações de que precisa para ativar a geração de registos e para aceder e processar registos, peça ao seu administrador para lhe conceder as seguintes funções de IAM no projeto:
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.
Requisitos
Ative os eventos de decisão do redimensionador automático horizontal de pods
Para criar um novo cluster com os registos de decisões KCP_HPA
ativados, execute o seguinte comando:
gcloud container clusters create CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--logging=SYSTEM,KCP_HPA
Para ativar os registos de decisões KCP_HPA
num cluster existente, execute o seguinte comando:
gcloud container clusters update CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--logging=SYSTEM,KCP_HPA
Substitua o seguinte:
Estes comandos permitem exportar os registos gerados pelo KCP_HPA
e guardá-los no destino logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller"
no Cloud Logging.
Obtenha a configuração de registo atualizada do cluster e reveja a lista de registos
para se certificar de que o registo KCP_HPA
está ativado:
gcloud container clusters describe CLUSTER_NAME \
--location=LOCATION \
--flatten=loggingConfig \
--format='csv[delimiter=",",no-heading](componentConfig.enableComponents)'
O resultado é semelhante ao seguinte:
SYSTEM_COMPONENTS,APISERVER,CONTROLLER_MANAGER,SCHEDULER,KCP_HPA
Desative os eventos de decisão do redimensionador automático horizontal de pods
Atualize um cluster para remover o componente KCP_HPA
da flag --logging
:
gcloud container clusters update CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--logging=SYSTEM
Substitua o seguinte:
Este comando desativa a exportação dos registos gerados pelo KCP_HPA
. Não pode obtê-los
através do filtro logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller"
no Cloud Logging.
Obtenha a configuração de registo atualizada do cluster e reveja a lista de registos
para se certificar de que o registo KCP_HPA
está desativado:
gcloud container clusters describe CLUSTER_NAME \
--location=LOCATION \
--flatten=loggingConfig \
--format='csv[delimiter=",",no-heading](componentConfig.enableComponents)'
O resultado é semelhante ao seguinte:
SYSTEM_COMPONENTS,APISERVER,CONTROLLER_MANAGER,SCHEDULER
Tipos de registos
Os eventos de decisão para o Horizontal Pod Autoscaler são armazenados no Cloud Logging,
na localização logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller"
que se encontra no contentor _Default
no mesmo projeto que o seu cluster do GKE.
Todos os eventos registados estão no formato JSON
e podem ser encontrados no campo jsonPayload
de uma entrada de registo.
Certifique-se de que compreende as necessidades de armazenamento dos potenciais volumes de registos, além de quaisquer implicações de desempenho ou custos. Os exemplos seguintes explicam a frequência com que o redimensionador automático horizontal de pods gera cada tipo de evento de decisão:
No total, com dois objetos HPA que monitorizam três métricas cada, o seu registo KCP_HPA
vai receber oito entradas de eventos de decisão no total a cada 15 segundos.
Recomendação atómica
Um registo de recomendações atómico descreve uma recomendação com base numa métrica individual especificada no seu Horizontal Pod Autoscaler.
Um registo atómico inclui os seguintes campos:
Campo | Descrição |
---|---|
start_time |
Indica quando o HPA começou a calcular uma recomendação. |
hpa |
O nome do objeto HPA associado à recomendação. |
pod_count |
Indica o número total de pods associados ao HPA quando faz a recomendação. Este número também inclui grupos de anúncios prontos, não prontos e ignorados. |
metric |
Fornece informações sobre a especificação e o estado da métrica usada para a recomendação. O campo metric contém os seguintes subcampos:
|
summary |
O campo de resumo contém informações sobre o resultado da recomendação, incluindo o número de réplicas sugerido. Se não for possível propor uma recomendação, é apresentada uma mensagem de erro. O campo summary contém os seguintes subcampos:
|
Exemplo de registo de recomendação atómica:
{
"insertId": "xiu4bty9k5b279wu",
"jsonPayload": {
"instance": {
"vm_name": "my-unique-vm-identifier",
"zone": "us-central1-a"
},
"atomicRecommendation": {
"startTime": "2025-02-06T20:07:00.573419526Z",
"hpa": "gke-managed-cim/kube-state-metrics",
"metric": {
"newestSampleAgeSeconds": -39.573419526,
"status": {
"averageValue": "25849856"
},
"newestSampleTime": "2025-02-06T20:06:21Z",
"type": "Resource",
"spec": {
"target": {
"averageValue": "400Mi"
},
"name": "memory"
}
},
"podCount": {
"ready": 1,
"total": 1
},
"summary": {
"override": "none",
"replicas": 1,
"dampening": "none"
}
}
},
"resource": {
"type": "k8s_control_plane_component",
"labels": {
"project_id": "my-project-id",
"cluster_name": "my-cluster",
"location": "us-central1-a",
"component_location": "us-central1-a",
"component_name": "hpa-controller"
}
},
"timestamp": "2025-02-06T20:07:00.593777835Z",
"severity": "INFO",
"labels": {
"compute.googleapis.com/resource_name": "my-unique-vm-identifier"
},
"logName": "projects/my-project-id/logs/container.googleapis.com%2Fhpa-controller",
"sourceLocation": {
"file": "event_logger.go",
"line": "61"
},
"receiveTimestamp": "2025-02-06T20:07:05.284753647Z"
}
Recomendação final
Um registo de recomendações final descreve uma recomendação consolidada proposta pelo HorizontalPodAutoscaler. O Horizontal Pod Autoscaler combina todas as recomendações atómicas de diferentes métricas para criar uma recomendação final e aciona as recomendações finais. A ativação significa que o HPA indica à implementação que ajuste o número de réplicas para corresponder ao valor recomendado. Se a recomendação final sugerir um número diferente de pods do número de pods em execução, o Horizontal Pod Autoscaler aciona um evento de aumento ou redução da escala para ajustar a implementação em conformidade.
Um registo de recomendações finais inclui os seguintes campos:
Campo | Descrição |
---|---|
start_time |
Indica quando o HPA começou a calcular uma recomendação. |
hpa |
O nome do objeto HPA associado à recomendação. |
target_ref |
Indica o objeto ScaleTargetRef da HPA associado a uma recomendação. |
configured_size |
O último número de réplicas registado antes de o HPA calcular e aplicar esta recomendação. |
top_level_override |
Indica um motivo se a recomendação proposta pela HPA não for aplicada (por exemplo, devido à tolerância) ou none se não ocorrer nenhuma substituição. |
top_level_limit |
Indica um motivo se a recomendação proposta pelo HPA tiver de ser ajustada (por exemplo, devido ao número de réplicas definidas pelos campos MinReplicas ou MaxReplicas na especificação do HPA). |
leading_metric_index |
O índice da métrica principal na matriz Spec metrics é a métrica cuja recomendação atómica associada é usada como a recomendação final. |
normalization |
Fornece um resumo da estabilização e da limitação da seguinte forma, se estiver presente:
|
replicas |
Número de réplicas recomendado. |
actuation_error |
Uma mensagem de erro associada à falha, se a ativação falhou. |
actuation_time |
Data/hora da ativação em caso de êxito. |
actuation_latency_seconds |
Tempo decorrido, em segundos, desde o início do cálculo da recomendação até à conclusão da ação. |
Exemplo de registo de recomendação final:
{
"insertId": "qzyv7alfv1sm19ns",
"jsonPayload": {
"finalRecommendation": {
"actuationTime": "2025-02-06T20:06:57.487786873Z",
"targetRef": {
"name": "kube-state-metrics",
"kind": "StatefulSet",
"apiVersion": "apps/v1"
},
"topLevelLimit": "none",
"hpa": "gke-managed-cim/kube-state-metrics",
"topLevelOverride": "noRecommendation",
"replicas": 1,
"configuredSize": 1,
"actuationLatencySeconds": 0.003722451,
"startTime": "2025-02-06T20:06:57.484064422Z"
},
"instance": {
"vm_name": "my-unique-vm-identifier",
"zone": "us-central1-a"
}
},
"resource": {
"type": "k8s_control_plane_component",
"labels": {
"cluster_name": "my-cluster",
"component_location": "us-central1-a",
"component_name": "hpa-controller",
"location": "us-central1-a",
"project_id": "my-project-id"
}
},
"timestamp": "2025-02-06T20:06:57.488193527Z",
"severity": "INFO",
"labels": {
"compute.googleapis.com/resource_name": "my-unique-vm-identifier"
},
"logName": "projects/my-project-id/logs/container.googleapis.com%2Fhpa-controller",
"sourceLocation": {
"file": "event_logger.go",
"line": "61"
},
"receiveTimestamp": "2025-02-06T20:06:57.844898727Z"
}
Resolução de problemas
Esta secção descreve problemas e passos de resolução relacionados com eventos do Horizontal Pod Autoscaler.
Sem eventos
Se não vir eventos de decisão do Horizontal Pod Autoscaler, certifique-se de que fez tudo o seguinte:
Para ver a configuração do objeto hpa
, execute o seguinte comando:
kubectl describe hpa $HPA_NAME
Se continuar a não ver registos de KCP_HPA
, contacte o Google Cloud apoio técnico.