Usar Kube State Metrics


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
GAUGEDOUBLEBy
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
GAUGEDOUBLE1
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
GAUGEDOUBLE1
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
GAUGEDOUBLE1
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
GAUGEDOUBLE1
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
GAUGEDOUBLEBy
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
GAUGEDOUBLE1
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
GAUGEDOUBLE1
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
GAUGEDOUBLE1
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
GAUGEDOUBLE1
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
GAUGEDOUBLE1
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:

  1. En el panel de navegación de la consola de Google Cloud, selecciona Monitoring y, luego,  Paneles:

    Ir a Paneles de control

  2. Para filtrar la lista del panel, haz clic en la categoría G​C​P.
  3. 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
GAUGEDOUBLE1
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
GAUGEDOUBLE1
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
GAUGEDOUBLE1
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"}
y
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
GAUGEDOUBLE1
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
GAUGEDOUBLE1
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
GAUGEDOUBLE1
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"}
y
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
GAUGEDOUBLE1
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
GAUGEDOUBLE1
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
GAUGEDOUBLE1
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
GAUGEDOUBLE1
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"}
y
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
GAUGEDOUBLE1
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
GAUGEDOUBLE1
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
GAUGEDOUBLE1
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
GAUGEDOUBLE1
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
GAUGEDOUBLE1
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
GAUGEDOUBLE1
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 de true 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 de false 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 de false 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.