Recopila y consulta las métricas de Kube State Metrics


En esta página, se describe cómo configurar un clúster de Google Kubernetes Engine (GKE) para enviar un conjunto seleccionado de estado de kube, incluidas las métricas de Pods y Deployments, a Cloud Monitoring con Google Cloud Managed Service para Prometheus. En esta página también se describe cómo se formatean estas métricas cuando se escriben en Monitoring y cómo se consultan las métricas.

Antes de comenzar

Antes de comenzar, asegúrate de haber realizado las siguientes tareas:

  • Habilita la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta gcloud components update para obtener la versión más reciente.

Requisitos

Para recopilar Kube State Metrics, tu clúster de GKE debe cumplir con los siguientes requisitos:

  • El clúster debe ejecutar GKE 1.27.2-gke.1200 o una versión posterior. Para los clústeres de GKE Standard a partir de la versión 1.29.2-gke.2000 y los clústeres de GKE Autopilot a partir de la versión 1.27.4-gke.900, el paquete de Kube State Metrics está habilitado de forma predeterminada.
  • El clúster debe tener habilitadas las métricas del sistema.
  • El clúster debe tener habilitada la recopilación administrada de Google Cloud Managed Service para Prometheus. La recopilación administrada de Google Cloud Managed Service para Prometheus está habilitada de forma predeterminada en los clústeres nuevos.

Configura la recopilación de métricas de estado de kube

Puedes habilitar las métricas de estado de kube con la consola de Google Cloud, gcloud CLI o Terraform:

Console

Puedes habilitar las métricas de estado de kube desde la pestaña Observabilidad para un clúster o una implementación dentro de un clúster. También puedes obtener una vista previa de los gráficos y las métricas disponibles antes de habilitar el paquete de métricas.

En la pestaña Observabilidad de un clúster, puedes filtrar el conjunto de gráficos de las métricas de estado de kube según los siguientes dos elementos:

  • Estado de las cargas de trabajo: incluye las métricas de Pods, Deployments, StatefulSets, DaemonSets y recursos de HorizontalPodAutoscaler.
  • Almacenamiento > Persistente: Incluye las métricas de volúmenes persistentes y reclamaciones de volúmenes persistentes.

Puedes habilitar uno o ambos conjuntos de métricas.

Para habilitar Kube State Metrics desde la pestaña Observabilidad de un clúster, haz lo siguiente:

  1. En la consola de Google Cloud, ve a la página Clústeres de Kubernetes.

    Ir a clústeres de Kubernetes

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es Kubernetes Engine.

  2. Haz clic en el nombre del clúster y, luego, selecciona la pestaña Observabilidad.

  3. Selecciona Estado de las cargas de trabajo o Almacenamiento > Persistente en la lista de funciones.

  4. Haz clic en Habilitar paquete.

    Si el paquete de Kube State Metrics ya está habilitado, verás un conjunto de gráficos para Kube State Metrics en su lugar.

Para habilitar Kube State Metrics desde la pestaña Observabilidad de un clúster, haz lo siguiente:

  1. En la consola de Google Cloud, ve a la página Cargas de trabajo (Workloads).

    Ir a Cargas de trabajo

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es Kubernetes Engine.

  2. Haz clic en el nombre de la implementación y, luego, selecciona la pestaña Observabilidad.

  3. Selecciona Estado de Kube de la lista de atributos.

  4. Haz clic en Habilitar paquete. El paquete está habilitado para todo el clúster.

    Si el paquete de métricas de estado de kube ya está habilitado, verás un conjunto de gráficos de métricas de Pods, Deployments y Horizontal Pod Autoscalers.

Para configurar Kube State Metrics desde la pestaña Detalles del clúster, haz lo siguiente:

  1. En la consola de Google Cloud, ve a la página Clústeres de Kubernetes.

    Ir a clústeres de Kubernetes

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es Kubernetes Engine.

  2. Haz clic en el nombre del clúster.

  3. En la fila Funciones etiquetada como Cloud Monitoring, haz clic en el ícono Editar.

  4. En el cuadro de diálogo Editar Cloud Monitoring que aparecerá, confirma que esté seleccionada la opción Habilitar Cloud Monitoring.

  5. En el menú desplegable Componentes, selecciona los componentes de estado de kube de los que deseas recopilar métricas.

  6. Haz clic en Aceptar.

  7. Haz clic en Guardar cambios.

gcloud

Actualiza tu clúster para recopilar métricas:

gcloud container clusters update CLUSTER_NAME \
    --location=COMPUTE_LOCATION \
    --enable-managed-prometheus \
    --monitoring=SYSTEM,DAEMONSET,DEPLOYMENT,HPA,POD,STATEFULSET,STORAGE

Reemplaza lo siguiente:

El conjunto de valores proporcionados a la marca monitoring anula cualquier configuración anterior.

Terraform

A fin de configurar la colección de Kube State Metrics mediante Terraform, consulta el bloque monitoring_config en el registro de Terraform para google_container_cluster. Para obtener información general sobre el uso de Google Cloud con Terraform, consulta Terraform con Google Cloud.

Cuota

Las métricas de estado de kube consumen la cuota de solicitudes de transferencia de series temporales por minuto de la API de Cloud Monitoring. Antes de habilitar las métricas de estado de kube, verifica tu uso máximo reciente de esa cuota. Si tienes muchos clústeres en el mismo proyecto o ya te acercaste al límite de esa cuota, puedes solicitar un aumento del límite de cuota antes de habilitar cualquiera de los paquetes de observabilidad.

Precios

Kube State Metrics usa Google Cloud Managed Service para Prometheus para cargar métricas en Cloud Monitoring. Cloud Monitoring cobra por la transferencia de estas métricas según la cantidad de muestras transferidas. Sin embargo, estas métricas son sin costo para los clústeres registrados que pertenecen a un proyecto que tiene habilitada la edición GKE Enterprise.

Para obtener más información, consulta los Precios de Cloud Monitoring.

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 recursos de almacenamiento y red.

Tabla de métricas del Pod

Las métricas de pod te permiten supervisar y alertar 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 Pod

Para determinar si tienes Pods que no se pueden programar, usa la siguiente expresión de 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 de 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 no pasan 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 no programables o con bucle 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 del sistema de GKE kubernetes.io/container/restart_count puede ayudarte a detectar Pods en bucle de falla. 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 la consola de Google Cloud, ve a la página  Paneles.

    Dirígete a Paneles de control

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuyo subtítulo es Monitoring.

  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 recursos como los Pods para administrar eventos como lanzamientos y desactivaciones.

Tabla de métricas de implementación

Las métricas de Deployment 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 fallida 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 singularidad 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

Para crear gráficos y políticas de alertas para StatefulSets individuales, filtra las métricas de StatefulSet por clúster, espacio de nombres y el nombre del 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 fallido o detenido, puedes usar la siguiente expresión de 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 un conjunto de nodos ejecute una copia de un Pod. Por ejemplo, a medida que se agregan nodos a un clúster, el DaemonSet agrega pods a los nodos. Este controlador es útil para garantizar que ciertos procesos se ejecuten en todos los nodos.

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

Para crear gráficos y políticas de alertas para DaemonSets individuales, filtra 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 fallida o detenida, puedes usar la siguiente expresión de 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 un 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 los HPA, consulta Visualiza detalles sobre un escalador automático horizontal de Pods.

Tabla de métricas de HPA

Las métricas de HorizontalPodAutoscaler 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_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 está acercando 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 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 las cantidades necesarias, mínimas y máximas 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 HPAs se encuentran con varios modos de falla. Por ejemplo:

  • La condición ScalingLimited y el estado de true indican que el HPA está limitado por su recuento mínimo o máximo de réplicas:
    kube_horizontalpodautoscaler_status_condition{status="true", condition="ScalingLimited"} == 1
  • La condición AbleToScale y un estado false indican que el HPA tiene problemas para recuperar o actualizar 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.