En esta página, se proporciona información sobre los eventos de decisión que emite el Horizontal Pod Autoscaler en Google Kubernetes Engine (GKE). Si analizas estos eventos, puedes obtener información sobre cómo el controlador del Horizontal Pod Autoscaler administra el escalamiento de tu carga de trabajo y comprender el proceso de toma de decisiones detrás de sus acciones.
El escalador automático horizontal de Pods emite eventos de decisión, que se almacenan como entradas de registro en Cloud Logging.
Antes de comenzar
Asegúrate de completar los siguientes requisitos previos:
Selecciona o crea un proyecto
Puedes usar un proyecto existente o crear uno nuevo para este instructivo.
- 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.
-
Make sure 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.
-
Make sure that billing is enabled for your Google Cloud project.
-
Para habilitar el registro de eventos del Horizontal Pod Autoscaler en tu clúster, haz lo siguiente:
Administrador de clústeres de Kubernetes Engine (
roles/container.clusterAdmin
) -
Para acceder a los registros y usar el Explorador de registros y las Estadísticas de registros, usa el Visualizador de registros (
roles/logging.viewer
). - Tu clúster de GKE debe ejecutar la versión
1.31.5-gke.1090000
o posterior, o bien la versión1.32.1-gke.1260000
o posterior. - Habilita Cloud Logging en tu clúster de GKE. Se aplican los precios de Cloud Logging.
CLUSTER_NAME
: Es el nombre del clúster que deseas crear o actualizar.PROJECT_ID
: Es el ID de tu proyecto de Google Cloud .LOCATION
: Regiones o zonas de procesamiento para tu clúster.CLUSTER_NAME
: Es el nombre del clúster que deseas crear o actualizar.PROJECT_ID
: Es el ID de tu proyecto de Google Cloud .LOCATION
: Regiones o zonas de procesamiento para tu clúster.Recomendación atómica: El Horizontal Pod Autoscaler genera un evento de recomendación atómica cada 15 segundos para cada métrica que supervisa cada objeto HPA en tu clúster. Por ejemplo, si tienes dos objetos HPA en tu clúster y cada uno supervisa tres métricas, se registrarán seis recomendaciones atómicas cada 15 segundos.
Recomendación final: El Horizontal Pod Autoscaler genera un evento de recomendación final cada 15 segundos para cada objeto HPA en tu clúster. Por ejemplo, si tienes dos objetos HPA en tu clúster, se registrarán dos recomendaciones finales cada 15 segundos.
index
: Es el índice de la métrica en el arraySpec metrics
.type
: Es el tipo de métrica con valores del MetricSourceType (por ejemplo, Recurso o Externa).spec
: Es el nombre de la métrica y un objetivo establecido en esa métrica.status
: Condiciones de estado con respecto a la escalabilidad y las limitaciones de escalamiento.newest_sample_time
: Es la marca de tiempo de la muestra de métrica más reciente.newest_sample_age_seconds
: Es la antigüedad de la muestra más reciente, medida en segundos, desde que comenzó el cálculo de la recomendación. Un valor negativo significa que la muestra de métricas es anterior al inicio del cálculo.dampening
: El HPA aplica una amortiguación a la recomendación y a su dirección para intentar reducir la magnitud de un posible ajuste. La atenuación puede ocurrir de las siguientes maneras:up
: Una dirección de amortiguación hacia arriba significa que el HPA supone que los Pods con métricas faltantes tienen un uso del 100% de la métrica.down
: Una dirección de reducción de la amortiguación significa que el HPA supone que los Pods con métricas faltantes o los Pods no listos consumen un 0% de uso de la métrica.none
: No se aplica amortiguación.
override
: Es un mensaje que proporciona un motivo cuando no se aplica la recomendación que propone el HPA (por ejemplo, debido a la tolerancia) onone
si no se produce ninguna anulación.result
: Es el resultado de la recomendación. Propone una cantidad recomendada de réplicas o muestra un mensaje de error si no se puede calcular la recomendación.replicas
: Es la cantidad de réplicas después de la estabilización.reason
: Tipo de estabilización aplicada:scaleUp
oscaleDown
.stabilization_window
: Período de estabilización asociado, en segundos.replicas_before_stabilization
: Es la cantidad de réplicas recomendada antes de la estabilización.replicas
: Es la cantidad de réplicas después de la limitación.reason
: Es el motivo por el que no se escala más allá del recuento mínimo o máximo de réplicas.scaling_policy
: Es la política de ajuste que se aplica.selectPolicy
: Especifica cómo se selecciona una política cuando se ajusta en una dirección determinada.MaxChange
corresponde a MaxChangePolicySelect;MinChange
corresponde a MinChangePolicySelect. Si el ajuste no está habilitado, el camposelectPolicy
no estará presente.replicas_before_limitation
: Es la cantidad de réplicas recomendada antes de la limitación.- Habilitaste Cloud Logging para el clúster.
- Habilitaste los registros de
KCP_HPA
para el clúster. - Implementaste al menos un objeto
hpa
configurado correctamente en tu clúster. - Consulta Acerca de los registros de GKE.
- Comprende tus registros de GKE.
- Aprende a encontrar registros específicos de GKE con consultas de muestra.
- Obtén información para optimizar el ajuste de escala automático de Pods en función de las métricas.
Habilita las APIs
Enable the GKE, and Cloud Logging APIs.
Configura Cloud Shell
En este instructivo, usarás Cloud Shell para ejecutar los comandos de gcloud
y kubectl
. Cloud Shell es un entorno de shell que se usa para administrar recursos alojados en Google Cloud. Viene preinstalado con la Google Cloud CLI y la herramienta de línea de comandos de kubectl.
In the Google Cloud console, activate Cloud Shell.
Se abrirá una sesión de Cloud Shell dentro de un marco en la parte inferior en la consola.
Antes de ejecutar comandos en este instructivo, asegúrate de que tu proyecto predeterminado esté configurado como el ID del proyecto en el que deseas implementar la app de ejemplo. Si aún no está configurado, ejecuta el siguiente comando en Cloud Shell:
gcloud config set project PROJECT_ID
Reemplaza PROJECT_ID
por el ID del proyecto.
Roles y permisos requeridos
Para obtener los permisos que necesitas para habilitar la generación de registros, y para acceder a ellos y procesarlos, pídele a tu administrador que te otorgue los siguientes roles de IAM en el proyecto:
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
Requisitos
Habilita los eventos de decisión del Horizontal Pod Autoscaler
Para crear un clúster nuevo con los registros de decisiones de KCP_HPA
habilitados, ejecuta el siguiente comando:
gcloud container clusters create CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--logging=SYSTEM,KCP_HPA
Para habilitar los registros de decisiones de KCP_HPA
en un clúster existente, ejecuta el siguiente comando:
gcloud container clusters update CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--logging=SYSTEM,KCP_HPA
Reemplaza lo siguiente:
Estos comandos permiten exportar los registros generados por KCP_HPA
y guardarlos en el destino logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller"
dentro de Cloud Logging.
Recupera la configuración de registro actualizada del clúster y revisa la lista de registros para asegurarte de que el registro KCP_HPA
esté habilitado:
gcloud container clusters describe CLUSTER_NAME \
--location=LOCATION \
--flatten=loggingConfig \
--format='csv[delimiter=",",no-heading](componentConfig.enableComponents)'
El resultado es similar a este:
SYSTEM_COMPONENTS,APISERVER,CONTROLLER_MANAGER,SCHEDULER,KCP_HPA
Inhabilita los eventos de decisión del Horizontal Pod Autoscaler
Actualiza un clúster para quitar el componente KCP_HPA
de la marca --logging
:
gcloud container clusters update CLUSTER_NAME \
--location=LOCATION \
--project=PROJECT_ID \
--logging=SYSTEM
Reemplaza lo siguiente:
Este comando inhabilita la exportación de los registros que genera KCP_HPA
. No puedes recuperarlos con el filtro logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller"
en Cloud Logging.
Recupera la configuración de registro actualizada del clúster y revisa la lista de registros para asegurarte de que el registro KCP_HPA
esté inhabilitado:
gcloud container clusters describe CLUSTER_NAME \
--location=LOCATION \
--flatten=loggingConfig \
--format='csv[delimiter=",",no-heading](componentConfig.enableComponents)'
El resultado es similar a este:
SYSTEM_COMPONENTS,APISERVER,CONTROLLER_MANAGER,SCHEDULER
Tipos de registros
Los eventos de decisión del Horizontal Pod Autoscaler se almacenan en Cloud Logging, en la ubicación logName="projects/PROJECT_ID/logs/container.googleapis.com%2Fhpa-controller"
que se encuentra en el bucket _Default
del mismo proyecto que tu clúster de GKE.
Todos los eventos registrados están en formato JSON
y se pueden encontrar en el campo jsonPayload
de una entrada de registro.
Asegúrate de comprender las necesidades de almacenamiento de los posibles volúmenes de registros, además de las implicaciones de rendimiento o costo. En los siguientes ejemplos, se explica con qué frecuencia el Horizontal Pod Autoscaler genera cada tipo de evento de decisión:
En total, con dos objetos HPA que supervisan tres métricas cada uno, tu registro de KCP_HPA
recibirá ocho entradas de eventos de decisión en total cada 15 segundos.
Recomendación atómica
Un registro de recomendaciones atómico describe una recomendación basada en una métrica individual especificada en tu Horizontal Pod Autoscaler.
Un registro atómico incluye los siguientes campos:
Campo | Descripción |
---|---|
start_time |
Indica cuándo el HPA comenzó a calcular una recomendación. |
hpa |
Es el nombre del objeto HPA asociado a la recomendación. |
pod_count |
Indica la cantidad total de Pods asociados con el HPA cuando se realiza la recomendación. Este número también incluye los Pods listos, no listos y omitidos. |
metric |
Proporciona información sobre la especificación y el estado de la métrica que se usa para la recomendación. El campo metric contiene los siguientes subcampos:
|
summary |
El campo de resumen contiene información sobre el resultado de la recomendación, incluido el número de réplicas sugerido. Si no se puede proponer una recomendación, se mostrará un mensaje de error. El campo summary contiene los siguientes subcampos:
|
Ejemplo de registro de recomendación 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"
}
Recomendación final
Un registro de recomendación final describe una recomendación consolidada que propone el escalador automático horizontal de Pods. El Horizontal Pod Autoscaler combina todas las recomendaciones atómicas de diferentes métricas para crear una recomendación final y la aplica. La activación significa que el HPA le indica a la Deployment que ajuste la cantidad de réplicas para que coincida con el valor recomendado. Si la recomendación final sugiere una cantidad de Pods diferente a la cantidad de Pods en ejecución, el Horizontal Pod Autoscaler activa un evento de aumento o reducción de la escala para ajustar la Deployment según corresponda.
Un registro de recomendación final incluye los siguientes campos:
Campo | Descripción |
---|---|
start_time |
Indica cuándo el HPA comenzó a calcular una recomendación. |
hpa |
Es el nombre del objeto HPA asociado a la recomendación. |
target_ref |
Indica el objeto ScaleTargetRef de HPA asociado con una recomendación. |
configured_size |
Es la cantidad de réplicas registrada por última vez antes de que el HPA calcule y aplique esta recomendación. |
top_level_override |
Proporciona un motivo si no se aplica la recomendación que propone el HPA (por ejemplo, debido a la tolerancia) o none si no se produce ninguna anulación. |
top_level_limit |
Proporciona un motivo si es necesario ajustar la recomendación que propone el HPA (por ejemplo, debido a la cantidad de réplicas que definen los campos MinReplicas o MaxReplicas en la especificación del HPA). |
leading_metric_index |
El índice de la métrica principal en el array Spec metrics es la métrica cuya recomendación atómica asociada se usa como la recomendación final. |
normalization |
Proporciona un resumen de la estabilización y las limitaciones de la siguiente manera, si están presentes:
|
replicas |
Es la cantidad de réplicas recomendada. |
actuation_error |
Es un mensaje de error asociado con la falla, si la activación falló. |
actuation_time |
Es la marca de tiempo de la activación cuando se realiza correctamente. |
actuation_latency_seconds |
Es el tiempo transcurrido, en segundos, desde el inicio del cálculo de la recomendación hasta que se realizó la activación correctamente. |
Ejemplo de registro de recomendación 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"
}
Soluciona problemas
En esta sección, se describen los problemas y los pasos para resolverlos relacionados con los eventos del Horizontal Pod Autoscaler.
No hay eventos.
Si no ves ningún evento de decisión del Horizontal Pod Autoscaler, asegúrate de haber realizado todas las siguientes acciones:
Para ver la configuración del objeto hpa
, ejecuta el siguiente comando:
kubectl describe hpa $HPA_NAME
Si aún no ves ningún registro de KCP_HPA
, comunícate con el Google Cloud equipo de asistencia.