Puedes configurar un clúster de Google Kubernetes Engine (GKE) para enviar un conjunto seleccionado de Kube State Metrics, incluidas las métricas de Pods, Deployments y más, a Cloud Monitoring a través de Google Cloud Managed Service para Prometheus. En este documento, se describe cómo se formatean estas métricas cuando se escriben en Cloud Monitoring y cómo consultarlas. En este documento, también se proporcionan tablas que enumeran las métricas en cada conjunto y se ofrece información sobre cómo puedes usar estas métricas.
Antes de que puedas usar las métricas de estado de kube, debes habilitar su recopilación.
Formato de métrica
Todas las métricas de estado de kube de Kubernetes escritas en Cloud Monitoring usan el tipo de recurso prometheus_target
.
Cada nombre de métrica tiene el prefijo prometheus.googleapis.com/
y tiene un sufijo que indica el tipo de métrica de Prometheus, como /gauge
, /histogram
o /counter
. De lo contrario, cada nombre de métrica es idéntico al nombre de la métrica que expone Kubernetes de código abierto.
Exporta desde Cloud Monitoring
Las métricas de estado de kube se pueden exportar desde Cloud Monitoring a través de la API de Cloud Monitoring. Debido a que todas las Kube State Metrics se transfieren a través de Google Cloud Managed Service para Prometheus, Kube State Metrics se pueden consultar a través del lenguaje de consulta de Prometheus (PromQL). También se pueden consultar a través del uso del lenguaje de consulta de Monitoring (MQL).
Consulta métricas
Cuando consultas las métricas de estado de kube, el nombre que usas depende de si usas funciones basadas en PromQL o Cloud Monitoring, como MQL o la interfaz controlada por menú del Explorador de métricas.
En las siguientes tablas de métricas de estado de kube, se muestran dos versiones de cada nombre de métrica:
- Nombre de la métrica de PromQL: Cuando usas PromQL en páginas de Cloud Monitoring de la consola de Google Cloud o en campos de PromQL de la API de Cloud Monitoring, usa el nombre de la métrica PromQL.
- Nombre de la métrica de Cloud Monitoring
Cuando uses otras funciones de Cloud Monitoring, usa el nombre de la métrica de Cloud Monitoring en las tablas que aparecen a continuación. Este nombre debe tener el prefijo
prometheus.googleapis.com/
, que se omitió en las entradas de la tabla.
Métricas de almacenamiento
Los nombres de las métricas de Cloud Monitoring en esta tabla deben tener el prefijo prometheus.googleapis.com/
. Este prefijo se omitió en las entradas de la tabla.
Nombre de la métrica de PromQL Nombre de la métrica de Cloud Monitoring |
|
---|---|
Categoría, tipo, unidad
Recursos supervisados Versión de GKE requerida |
Descripción Etiquetas |
kube_persistentvolume_capacity_bytes kube_persistentvolume_capacity_bytes/gauge
|
|
GAUGE , DOUBLE , By
prometheus_target 1.27.2-gke.1200 |
Capacidad de PersistentVolume en bytes.
Se tomaron muestras cada 30 segundos.persistentvolume : persistentvolume.
|
kube_persistentvolume_claim_ref kube_persistentvolume_claim_ref/gauge
|
|
GAUGE , DOUBLE , 1
prometheus_target 1.27.2-gke.1200 |
Información sobre la referencia de la reclamación del volumen persistente.
Se tomaron muestras cada 30 segundos.claim_name : claim_name.
name : nombre.
persistentvolume : persistentvolume.
|
kube_persistentvolume_info kube_persistentvolume_info/gauge
|
|
GAUGE , DOUBLE , 1
prometheus_target 1.27.2-gke.1200 |
Información sobre persistentvolume.
Se tomaron muestras cada 30 segundos.csi_driver : csi_driver.
csi_volume_handle : csi_volume_handle.
local_fs : local_fs.
local_path : local_path.
persistentvolume : persistentvolume.
storageclass : storageclass.
|
kube_persistentvolume_status_phase kube_persistentvolume_status_phase/gauge
|
|
GAUGE , DOUBLE , 1
prometheus_target 1.27.2-gke.1200 |
La fase indica si un volumen está disponible, vinculado a una reclamación o liberado por una reclamación.
Se tomaron muestras cada 30 segundos.persistentvolume : persistentvolume.
phase : fase.
|
kube_persistentvolumeclaim_info kube_persistentvolumeclaim_info/gauge
|
|
GAUGE , DOUBLE , 1
prometheus_target 1.27.2-gke.1200 |
Información sobre la reclamación del volumen persistente.
Se tomaron muestras cada 30 segundos.persistentvolumeclaim : persistentvolumeclaim.
storageclass : storageclass.
volumename : volumename.
|
kube_persistentvolumeclaim_resource_requests_storage_bytes kube_persistentvolumeclaim_resource_requests_storage_bytes/gauge
|
|
GAUGE , DOUBLE , By
prometheus_target 1.27.2-gke.1200 |
La capacidad de almacenamiento solicitada por la reclamación del volumen persistente.
Se tomaron muestras cada 30 segundos.persistentvolumeclaim : persistentvolumeclaim.
|
kube_persistentvolumeclaim_status_phase kube_persistentvolumeclaim_status_phase/gauge
|
|
GAUGE , DOUBLE , 1
prometheus_target 1.27.2-gke.1200 |
La fase en la que se encuentra la reclamación de volumen persistente.
Se tomaron muestras cada 30 segundos.persistentvolumeclaim : persistentvolumeclaim.
phase : fase.
|
Para obtener más información, consulta Métricas de PersistentVolume y Métricas de PersistentVolumeClaim.
Métricas del pod
Un Pod es un grupo de uno o más contenedores con una especificación para ejecutar los contenedores, que comparten los recursos de almacenamiento y red.
Tabla de métricas de Pods
Las métricas de Pods te permiten supervisar y crear alertas sobre el comportamiento de tus Pods. En la siguiente tabla, se muestran las métricas disponibles en el paquete de Kube State Metrics:
Los nombres de las métricas de Cloud Monitoring en esta tabla deben tener el prefijo prometheus.googleapis.com/
. Este prefijo se omitió en las entradas de la tabla.
Nombre de la métrica de PromQL Nombre de la métrica de Cloud Monitoring |
|
---|---|
Categoría, tipo, unidad
Recursos supervisados Versión de GKE requerida |
Descripción Etiquetas |
kube_pod_container_status_ready kube_pod_container_status_ready/gauge
|
|
GAUGE , DOUBLE , 1
prometheus_target 1.27.2-gke.1200 |
Describe si la verificación de preparación de contenedores se realizó de forma correcta.
Se tomaron muestras cada 30 segundos.container : contenedor.
pod : Pod.
uid : UID.
|
kube_pod_container_status_waiting_reason kube_pod_status_container_status_waiting_reason/gauge
|
|
GAUGE , DOUBLE , 1
prometheus_target 1.27.2-gke.1200 |
Describe el motivo por el que el contenedor está en estado de espera.
Se tomaron muestras cada 30 segundos.container : contenedor.
pod : Pod.
reason : motivo.
uid : UID.
|
kube_pod_status_phase kube_pod_status_phase/gauge
|
|
GAUGE , DOUBLE , 1
prometheus_target 1.27.2-gke.1200 |
La fase actual de los Pods. Se tomaron muestras cada 30 segundos.phase : fase.
pod : Pod.
uid : UID.
|
kube_pod_status_unschedulable kube_pod_status_unschedulable/gauge
|
|
GAUGE , DOUBLE , 1
prometheus_target 1.27.2-gke.1200 |
Describe el estado no programable para el Pod.
Se tomaron muestras cada 30 segundos.pod : Pod.
uid : uid.
|
Para obtener más información, consulta Métricas de Pod.
Consultas de muestra para las métricas de Pods
Para determinar si tienes Pods que no son programables, usa la siguiente expresión PromQL:
sum(kube_pod_status_unschedulable{cluster="CLUSTER", namespace="NAMESPACE"})
Para alertar sobre una cantidad de Pods no programables en un espacio de nombres, puedes usar la siguiente expresión PromQL:
sum(kube_pod_status_unschedulable{cluster="CLUSTER", namespace="NAMESPACE"}) > LIMIT
Puedes usar la métrica kube_pod_container_status_waiting_reason
para crear una alerta para un contenedor atascado en un estado de espera específico a través de una expresión PromQL como la siguiente:
max_over_time(kube_pod_container_status_waiting_reason{reason="REASON", cluster="CLUSTER", namespace="NAMESPACE"}[5m]) >= 1
El valor de REASON especifica el estado de espera del contenedor, por ejemplo:
CrashLoopBackOff
ImagePullBackOff
ContainerCreating
Para crear una alerta para un contenedor atascado en cualquiera de los estados de espera, usa la siguiente expresión PromQL:
max_over_time(kube_pod_container_status_waiting_reason{cluster="CLUSTER", namespace="NAMESPACE"}[5m]) >= 1
Para determinar cuántos contenedores fallan las verificaciones de preparación, usa la siguiente expresión de PromQL:
sum(kube_pod_container_status_ready) by (pod, container) == 0
Algunas de las expresiones de consulta y alerta de esta sección se adaptaron del archivo kubernetes-apps.yaml
en el repositorio de gráficos de Kubernetes Helm para la comunidad de Prometheus en GitHub.
Guías interactivas
Las métricas de estado de Kube también se usan en las guías interactivas de GKE para solucionar problemas de Pods que no son programables o con bucles de fallas. Para obtener más información sobre estos modos de falla, consulta los siguientes documentos de solución de problemas:
Sin el paquete Kube State Metrics habilitado, el método principal para detectar problemas de programación de Pods es consultar los eventos de registro “Error de programación”. Después de habilitar el paquete Kube State Metrics, puedes usar la métrica kube_pod_status_unschedulable
, que tiene el mismo propósito, pero es más fácil de agregar y representar. Si usas la métrica, puedes ver cuántos Pods no son programables y cuándo comenzó el problema.
Del mismo modo, la métrica kubernetes.io/container/restart_count
del sistema de GKE puede ayudarte a detectar Pods en bucle de fallas. La métrica kube_pod_container_status_waiting_reason
también enumera los Pods en bucle de fallas y también te permite determinar si los Pods están atascados en estados de espera distintos de CrashLookBackOff
, como ImagePullBackOff
y ContainerCreating
.
Para explorar las guías interactivas, haz lo siguiente:
-
En el panel de navegación de la consola de Google Cloud, selecciona Monitoring y, luego, Paneles:
- Para filtrar la lista del panel, haz clic en la categoría GCP.
- Haz clic en el nombre de un panel de “Guía interactiva de GKE” en la lista.
Métricas de implementación
Un Deployment es un controlador que actualiza el estado de los recursos, como los Pods, para administrar eventos como lanzamientos y bajas.
Tabla de métricas de la implementación
Las métricas de implementación te permiten supervisar y alertar sobre el comportamiento del controlador. En la siguiente tabla, se muestran las métricas disponibles en el paquete de Kube State Metrics:
Los nombres de las métricas de Cloud Monitoring en esta tabla deben tener el prefijo prometheus.googleapis.com/
. Este prefijo se omitió en las entradas de la tabla.
Nombre de la métrica de PromQL Nombre de la métrica de Cloud Monitoring |
|
---|---|
Categoría, tipo, unidad
Recursos supervisados Versión de GKE requerida |
Descripción Etiquetas |
kube_deployment_spec_replicas kube_deployment_spec_replicas/gauge
|
|
GAUGE , DOUBLE , 1
prometheus_target 1.27.2-gke.1200 |
Cantidad de Pods deseados para una implementación. Se tomaron muestras cada 30 segundos.deployment : implementación.
|
kube_deployment_status_replicas_available kube_deployment_status_replicas_available/gauge
|
|
GAUGE , DOUBLE , 1
prometheus_target 1.27.2-gke.1200 |
La cantidad de réplicas disponibles por implementación. Se tomaron muestras cada 30 segundos.deployment : implementación.
|
kube_deployment_status_replicas_updated kube_deployment_status_replicas_updated/gauge
|
|
GAUGE , DOUBLE , 1
prometheus_target 1.27.2-gke.1200 |
La cantidad de réplicas actualizadas por implementación. Se tomaron muestras cada 30 segundos.deployment : implementación.
|
Para obtener más información, consulta Métricas de implementación.
Consultas de muestra para las métricas de Deployment
Para crear gráficos y políticas de alertas para implementaciones individuales, filtra las métricas de implementación por clúster, espacio de nombres y el nombre del Deployment.
Por ejemplo, para comparar la cantidad de réplicas disponibles con la cantidad esperada de réplicas en una sola implementación, puedes usar las siguientes consultas de PromQL para trazar ambas métricas en un solo gráfico:
kube_deployment_spec_replicas{cluster="CLUSTER", namespace="NAMESPACE", deployment=DEPLOYMENT"}
kube_deployment_status_replicas_available{cluster="CLUSTER", namespace="NAMESPACE", deployment=DEPLOYMENT"}
Para alertar sobre una implementación con errores o detenida, puedes usar la siguiente expresión de PromQL:
( kube_deployment_spec_replicas{cluster="CLUSTER", namespace="NAMESPACE", deployment="DEPLOYMENT"} > kube_deployment_status_replicas_available{cluster="CLUSTER", namespace="NAMESPACE", deployment="DEPLOYMENT"} ) and ( changes(kube_deployment_status_replicas_updated{cluster="CLUSTER", namespace="NAMESPACE", deployment="DEPLOYMENT"}[10m]) == 0 )
Algunas de las expresiones de consulta y alerta de esta sección se adaptaron del archivo kubernetes-apps.yaml
en el repositorio de gráficos de Kubernetes Helm para la comunidad de Prometheus en GitHub.
Métricas de StatefulSet
Un StatefulSet es un controlador que administra la implementación y el escalamiento de un conjunto de Pods para aplicaciones con estado. Este controlador administra el orden y la unicidad de los Pods.
Tabla de métricas de StatefulSet
Las métricas de StatefulSet te permiten supervisar y alertar sobre el comportamiento del controlador. En la siguiente tabla, se muestran las métricas disponibles en el paquete de Kube State Metrics:
Los nombres de las métricas de Cloud Monitoring en esta tabla deben tener el prefijo prometheus.googleapis.com/
. Este prefijo se omitió en las entradas de la tabla.
Nombre de la métrica de PromQL Nombre de la métrica de Cloud Monitoring |
|
---|---|
Categoría, tipo, unidad
Recursos supervisados Versión de GKE requerida |
Descripción Etiquetas |
kube_statefulset_replicas kube_statefulset_replicas/gauge
|
|
GAUGE , DOUBLE , 1
prometheus_target 1.27.2-gke.1200 |
Cantidad de Pods deseados para StatefulSet. Se tomaron muestras cada 30 segundos.statefulset : statefulset.
|
kube_statefulset_status_replicas_ready kube_statefulset_status_replicas_ready/gauge
|
|
GAUGE , DOUBLE , 1
prometheus_target 1.27.2-gke.1200 |
La cantidad de réplicas listas por StatefulSet. Se tomaron muestras cada 30 segundos.statefulset : statefulset.
|
kube_statefulset_status_replicas_updated kube_statefulset_status_replicas_updated/gauge
|
|
GAUGE , DOUBLE , 1
prometheus_target 1.27.2-gke.1200 |
La cantidad de réplicas actualizadas por StatefulSet. Se tomaron muestras cada 30 segundos.statefulset : statefulset.
|
Para obtener más información, consulta Métricas de StatefulSet.
Consultas de muestra para las métricas de StatefulSet
Puedes crear gráficos y políticas de alertas para StatefulSets individuales si filtras las métricas de StatefulSet con clúster por clúster, el espacio de nombres y el nombre de StatefulSet.
Por ejemplo, para comparar la cantidad de réplicas disponibles con la cantidad esperada de réplicas en un solo StatefulSet, puedes usar las siguientes consultas de PromQL para trazar ambas métricas en un solo gráfico:
kube_statefulset_replicas{cluster="CLUSTER", namespace="NAMESPACE", statefulset="STATEFULSET"}
kube_statefulset_status_replicas_ready{cluster="CLUSTER", namespace="NAMESPACE", statefulset="STATEFULSET"}
Para alertar sobre un lanzamiento de StatefulSet con errores o detenido, puedes usar la siguiente expresión PromQL:
( kube_statefulset_replicas{cluster="CLUSTER", namespace="NAMESPACE", statefulset="STATEFULSET"} > kube_statefulset_status_replicas_ready{cluster="CLUSTER", namespace="NAMESPACE", statefulset="STATEFULSET"} ) and ( changes(kube_statefulset_status_replicas_updated{cluster="CLUSTER", namespace="NAMESPACE", statefulset="STATEFULSET"}[10m]) == 0 )
Algunas de las expresiones de consulta y alerta de esta sección se adaptaron del archivo kubernetes-apps.yaml
en el repositorio de gráficos de Kubernetes Helm para la comunidad de Prometheus en GitHub.
Métricas de DaemonSet
Un DaemonSet es un controlador que garantiza que algún conjunto de nodos ejecute una copia de un Pod. Por ejemplo, a medida que los nodos se agregan a un clúster, el DaemonSet agrega Pods a los nodos. Este controlador es útil para garantizar que ciertos procesos se ejecuten en cada nodo.
Tabla de métricas de DaemonSet
Las métricas de DaemonSet te permiten supervisar y alertar sobre el comportamiento del controlador. En la siguiente tabla, se muestran las métricas disponibles en el paquete de Kube State Metrics:
Los nombres de las métricas de Cloud Monitoring en esta tabla deben tener el prefijo prometheus.googleapis.com/
. Este prefijo se omitió en las entradas de la tabla.
Nombre de la métrica de PromQL Nombre de la métrica de Cloud Monitoring |
|
---|---|
Categoría, tipo, unidad
Recursos supervisados Versión de GKE requerida |
Descripción Etiquetas |
kube_daemonset_status_desired_number_scheduled kube_daemonset_status_desired_number_scheduled/gauge
|
|
GAUGE , DOUBLE , 1
prometheus_target 1.27.2-gke.1200 |
La cantidad de nodos que deberían ejecutar el Pod de daemon.
Se tomaron muestras cada 30 segundos.daemonset : daemonset.
|
kube_daemonset_status_number_misscheduled kube_daemonset_status_number_misscheduled/gauge
|
|
GAUGE , DOUBLE , 1
prometheus_target 1.27.2-gke.1200 |
Es la cantidad de nodos que ejecutan un Pod de daemon, pero no deberían hacerlo. Se tomaron muestras cada 30 segundos.daemonset : daemonset.
|
kube_daemonset_status_number_ready kube_daemonset_status_number_ready/gauge
|
|
GAUGE , DOUBLE , 1
prometheus_target 1.27.2-gke.1200 |
La cantidad de nodos que deben ejecutar el Pod de daemon y que deben tener uno o más Pod de daemon en ejecución y listos. Se tomaron muestras cada 30 segundos.daemonset : daemonset.
|
kube_daemonset_status_updated_number_scheduled kube_daemonset_status_updated_number_scheduled/gauge
|
|
GAUGE , DOUBLE , 1
prometheus_target 1.27.2-gke.1200 |
La cantidad de nodos que ejecutan el Pod de daemon actualizado.
Se tomaron muestras cada 30 segundos.daemonset : daemonset.
|
Para obtener más información, consulta Métricas de DaemonSet.
Consultas de muestra para las métricas de DaemonSet
Puedes crear gráficos y políticas de alertas para DaemonSets individuales si filtras las métricas de daemonset por clúster, espacio de nombres y el nombre del DaemonSet.
Por ejemplo, para comparar la cantidad de réplicas disponibles con la cantidad esperada de réplicas en un solo DaemonSet, puedes usar las siguientes consultas de PromQL para trazar ambas métricas en un solo gráfico:
kube_daemonset_status_updated_number_scheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonsetset=DAEMONSET"}
kube_daemonset_status_desired_number_scheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonset=DAEMONSET"}
Para alertar sobre un lanzamiento de DaemonSet con errores o detenido, puedes usar la siguiente expresión PromQL:
( ( kube_daemonset_status_number_misscheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonset="DAEMONSET"} != 0 ) or ( kube_daemonset_status_updated_number_scheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonset="DAEMONSET"} != kube_daemonset_status_desired_number_scheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonset="DAEMONSET"} ) ) and ( changes(kube_daemonset_status_updated_number_scheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonset="DAEMONSET"}[5m]) == 0 )
Algunas de las expresiones de consulta y alerta de esta sección se adaptaron del archivo kubernetes-apps.yaml
en el repositorio de gráficos de Kubernetes Helm para la comunidad de Prometheus en GitHub.
Métricas de HorizontalPodAutoscaler
Un HorizontalPodAutoscaler (HPA) es un controlador que cambia de forma periódica la cantidad de Pods en una carga de trabajo, como una Implementación o StatefulSet, en respuesta a alguna métrica como el uso de CPU o memoria. Cambiar la cantidad de Pods disponibles para una carga de trabajo mantiene la carga de trabajo responsiva, pero eficiente.
Para obtener más información sobre HPA, consulta Visualiza los detalles de un escalador automático horizontal de Pods.
Tabla de métricas de HPA
Las métricas de HorizontalPodAutoscaler le permiten supervisar y alertar sobre el comportamiento del controlador. En la siguiente tabla, se muestran las métricas disponibles en el paquete de Kube State Metrics:
Los nombres de las métricas de Cloud Monitoring en esta tabla deben tener el prefijo prometheus.googleapis.com/
. Este prefijo se omitió en las entradas de la tabla.
Nombre de la métrica de PromQL Nombre de la métrica de Cloud Monitoring |
|
---|---|
Categoría, tipo, unidad
Recursos supervisados Versión de GKE requerida |
Descripción Etiquetas |
kube_horizontalpodautoscaler_spec_max_replicas kube_horizontalpodautoscaler_spec_max_replicas/gauge
|
|
GAUGE , DOUBLE , 1
prometheus_target 1.27.2-gke.1200 |
El límite superior de la cantidad de Pods que puede establecer el escalador automático no puede ser menor que el de MinReplicas.
Se tomaron muestras cada 30 segundos.horizontalpodautoscaler : horizontalpodautoscaler.
|
kube_horizontalpodautoscaler_spec_min_replicas kube_horizontalpodautoscaler_spec_min_replicas/gauge
|
|
GAUGE , DOUBLE , 1
prometheus_target 1.27.2-gke.1200 |
Límite más bajo para la cantidad de Pods que puede establecer el escalador automático, con 1 como configuración predeterminada.
Se tomaron muestras cada 30 segundos.horizontalpodautoscaler : horizontalpodautoscaler.
|
kube_horizontalpodautoscaler_spec_target_metric kube_horizontalpodautoscaler_spec_target_metric/gauge
|
|
GAUGE , DOUBLE , 1
prometheus_target 1.27.2-gke.1200 |
Las especificaciones de métrica que se usan en este escalador automático cuando se calcula el recuento de réplicas deseado.
Se tomaron muestras cada 30 segundos.horizontalpodautoscaler : horizontalpodautoscaler.
metric_name : metric_name.
metric_target_type : metric_target_type.
|
kube_horizontalpodautoscaler_status_condition kube_horizontalpodautoscaler_status_condition/gauge
|
|
GAUGE , DOUBLE , 1
prometheus_target 1.27.2-gke.1200 |
La condición de este escalador automático.
Se tomaron muestras cada 30 segundos.condition : condición.
horizontalpodautoscaler : horizontalpodautoscaler.
namespace : namespace.
status : estado.
|
kube_horizontalpodautoscaler_status_current_replicas kube_horizontalpodautoscaler_status_status_current_replicas/gauge
|
|
GAUGE , DOUBLE , 1
prometheus_target 1.27.2-gke.1200 |
Cantidad actual de réplicas de Pods que administra este escalador automático.
Se tomaron muestras cada 30 segundos.horizontalpodautoscaler : horizontalpodautoscaler.
|
kube_horizontalpodautoscaler_status_desired_replicas kube_horizontalpodautoscaler_status_desired_replicas/gauge
|
|
GAUGE , DOUBLE , 1
prometheus_target 1.27.2-gke.1200 |
Cantidad deseada de réplicas de Pods que administra este escalador automático.
Se tomaron muestras cada 30 segundos.horizontalpodautoscaler : horizontalpodautoscaler.
|
Para obtener más información, consulta Métricas del Horizontal Pod Autoscaler.
Consultas de muestra para las métricas de HPA
Por ejemplo, para determinar si el HPA se acerca a la cantidad máxima de réplicas, puedes trazar la siguiente proporción:
kube_horizontalpodautoscaler_status_current_replicas{cluster="CLUSTER", namespace="NAMESPACE", horizontalpodautoscaler="HPA"} / kube_horizontalpodautoscaler_spec_max_replicas{cluster="CLUSTER", namespace="NAMESPACE", horizontalpodautoscaler="HPA"}
Cuando el HPA se ejecuta con la cantidad máxima de réplicas, es posible que desees aumentar la especificación para la cantidad máxima de Pods. Puedes usar la siguiente expresión de PromQL para crear una alerta que te notifique sobre este caso:
kube_horizontalpodautoscaler_status_current_replicas{cluster="CLUSTER", namespace="NAMESPACE", horizontalpodautoscaler="HPA"} == kube_horizontalpodautoscaler_spec_max_replicas{cluster="CLUSTER", namespace="NAMESPACE", horizontalpodautoscaler="HPA"}
También puedes comparar los valores de las métricas kube_horizontalpodautoscaler_status_current_replicas
y kube_horizontalpodautoscaler_status_desired_replicas
para determinar si hay una diferencia entre la cantidad actual y la cantidad necesaria de réplicas. Una diferencia puede indicar una restricción de recursos en el clúster. La siguiente expresión de PromQL busca diferencias entre la cantidad actual de réplicas y la cantidad necesaria, mínima y máxima de réplicas, así como los cambios en la cantidad actual de réplicas:
(kube_horizontalpodautoscaler_status_desired_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"} != kube_horizontalpodautoscaler_status_current_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"}) and (kube_horizontalpodautoscaler_status_current_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"} > kube_horizontalpodautoscaler_spec_min_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"}) and (kube_horizontalpodautoscaler_status_current_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"} < kube_horizontalpodautoscaler_spec_max_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"}) and changes(kube_horizontalpodautoscaler_status_current_replicas{job="kube-state-metrics", namespace=~"NAMESPACE"}[15m]) == 0
Las etiquetas condition
y status
en la métrica kube_horizontalpodautoscaler_status_condition
también pueden ayudarte a detectar cuándo los HPA se ejecutan en varios modos de falla. Por ejemplo:
- La condición
ScalingLimited
y el estado detrue
indican que el HPA está vinculado por su recuento de réplicas mínimo o máximo:kube_horizontalpodautoscaler_status_condition{status="true", condition="ScalingLimited"} == 1
La condición
AbleToScale
y un estado defalse
indican que el HPA tiene problemas para recuperar o actualizar las escalas:kube_horizontalpodautoscaler_status_condition{status="false", condition="AbleToScale"} == 1
La condición
ScalingActive
y un estado defalse
indican que el HPA está inhabilitado o no puede calcular una escala nueva:kube_horizontalpodautoscaler_status_condition{status="false", condition="ScalingActive"} == 1
Algunas de las expresiones de consulta y alerta de esta sección se adaptaron del archivo kubernetes-apps.yaml
en el repositorio de gráficos de Kubernetes Helm para la comunidad de Prometheus en GitHub.