Recoger y ver métricas de estado de kube


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

Antes de empezar

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

  • Habilita la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Si quieres usar Google Cloud CLI para esta tarea, instálala y, a continuación, inicialízala. Si ya has instalado la gcloud CLI, obtén la versión más reciente ejecutando gcloud components update.

Requisitos

Para recoger métricas de estado de kube, tu clúster de GKE debe cumplir los siguientes requisitos:

  • El clúster debe ejecutar las siguientes versiones en función de la métrica que quieras habilitar:
    • Para habilitar el paquete de métricas JobSet, tu clúster debe ejecutar la versión 1.32.1-gke.1357001 o una posterior. A partir de la versión 1.32.1-gke.1357001, el paquete de métricas JobSet está habilitado de forma predeterminada en los clústeres estándar y Autopilot de GKE que se creen.
    • La métrica kube_jobset_restarts está disponible en los clústeres 1.32 a partir de la versión 1.32.4-gke.1767000 y en los clústeres 1.33 a partir de la versión 1.33.0-gke.1868000.
    • Para habilitar cualquier otro paquete de métricas descrito en esta página, tu clúster debe ejecutar GKE 1.27.2-gke.1200 o una versión posterior. A partir de la versión 1.29.2-gke.2000 para clústeres de GKE Standard y de la versión 1.27.4-gke.900 para clústeres de GKE Autopilot, el paquete de métricas de estado de Kube está habilitado de forma predeterminada.
  • El clúster debe tener habilitadas las métricas del sistema.
  • El clúster debe tener habilitada la recogida gestionada de Google Cloud Managed Service para Prometheus. La recogida gestionada de Google Cloud Managed Service para Prometheus está habilitada de forma predeterminada en los clústeres nuevos.

Configurar la recogida de métricas de estado de kube

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

Consola

Puedes habilitar las métricas de estado de kube desde la pestaña Observabilidad de un clúster o de un Deployment de un clúster. También puede 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, puede filtrar el conjunto de gráficos de métricas de estado de kube por los dos elementos siguientes:

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

Puede habilitar uno o ambos conjuntos de métricas.

Para habilitar las métricas de estado de kube desde la pestaña Observabilidad de un clúster, sigue estos pasos:

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

    Ve a Clústeres de Kubernetes.

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

  2. Haz clic en el nombre de tu clúster y, a continuación, 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 métricas de estado de Kube ya está habilitado, verás un conjunto de gráficos de métricas de estado de Kube.

Para habilitar las métricas de estado de kube desde la pestaña Observabilidad de una implementación, haz lo siguiente:

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

    Ve a Cargas de trabajo.

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

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

  3. Selecciona Estado de Kube en la lista de funciones.

  4. Haz clic en Habilitar paquete. El paquete está habilitado en 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, implementaciones y autoescaladores horizontales de pods.

Para configurar las métricas de estado de kube desde la pestaña Detalles del clúster, haz lo siguiente:

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

    Ve a Clústeres de Kubernetes.

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

  2. Haz clic en el nombre de tu clúster.

  3. En la fila Funciones, busque la opción Cloud Monitoring y haga clic en el icono Editar.

  4. En el cuadro de diálogo Editar monitorización en la nube que aparece, confirma que la opción Habilitar monitorización en la nube esté seleccionada.

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

  6. Haz clic en Aceptar.

  7. Haz clic en Guardar cambios.

gcloud

Actualiza tu clúster para recoger métricas:

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

Haz los cambios siguientes:

El conjunto de valores proporcionado a la marca monitoring anula cualquier ajuste anterior.

Terraform

Para configurar la recogida de métricas de estado de kube mediante Terraform, consulta el bloque monitoring_config en el registro de Terraform de 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 Solicitudes de ingestión de series temporales por minuto de la API de Cloud Monitoring. Antes de habilitar las métricas de estado de kube, consulta el pico de uso reciente de esa cuota. Si tienes muchos clústeres en el mismo proyecto o ya te estás acercando a ese límite de cuota, puedes solicitar un aumento del límite de cuota antes de habilitar cualquiera de los paquetes de observabilidad.

Precios

Las métricas de estado de Kube usan Google Cloud Managed Service para Prometheus para cargar métricas en Cloud Monitoring. Los cargos de Cloud Monitoring por la ingestión de estas métricas se basan en el número de muestras ingeridas.

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

Formato de la 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 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 métrica expuesto por Kubernetes de código abierto.

Exportar datos de Cloud Monitoring

Las métricas de estado de kube se pueden exportar desde Cloud Monitoring mediante la API de Cloud Monitoring. Como todas las métricas de estado de kube se ingieren mediante Google Cloud Managed Service para Prometheus, se pueden consultar con el lenguaje de consulta de Prometheus (PromQL). También se pueden consultar con Monitoring Query Language (MQL).

Consultar métricas

Cuando consultas métricas de estado de kube, el nombre que usas depende de si utilizas PromQL o funciones basadas en Cloud Monitoring, como MQL o la interfaz basada en menús 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 métrica de PromQL: cuando uses PromQL en las páginas de Cloud Monitoring de la Google Cloud consola o en los campos de PromQL de la API de Cloud Monitoring, usa el nombre de métrica de PromQL.
  • Nombre de la métrica de Cloud Monitoring: cuando uses otras funciones de Cloud Monitoring, utiliza el nombre de la métrica de Cloud Monitoring que aparece en las tablas de abajo. Este nombre debe ir precedido de prometheus.googleapis.com/, que se ha omitido en las entradas de la tabla.

Métricas de almacenamiento

Los nombres de métricas de Cloud Monitoring de esta tabla deben tener el prefijo prometheus.googleapis.com/. Se ha omitido ese prefijo en las entradas de la tabla.

Nombre de métrica de PromQL
Nombre de métrica de Cloud Monitoring
Tipo, unidad
Recursos monitorizados
Versión de GKE necesaria
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 muestrea 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 reclamación de volumen persistente. Se muestrea 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 muestrea 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, enlazado a una reclamación o liberado por una reclamación. Se muestrea 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 de volumen persistente. Se muestrea cada 30 segundos.

persistentvolumeclaim: persistentvolumeclaim.
storageclass: storageclass.
volumename: nombrevolumen.
kube_persistentvolumeclaim_resource_requests_storage_bytes
kube_persistentvolumeclaim_resource_requests_storage_bytes/gauge
GAUGEDOUBLEBy
prometheus_target
1.27.2-gke.1200
Capacidad de almacenamiento solicitada por la reclamación de volumen persistente. Se muestrea 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 muestrea cada 30 segundos.

persistentvolumeclaim: persistentvolumeclaim.
phase: fase.

Para obtener más información, consulta las métricas de PersistentVolume y PersistentVolumeClaim.

Métricas de pod

Un pod es un grupo de uno o varios contenedores con una especificación de cómo ejecutar los contenedores, que comparten almacenamiento y recursos de red.

Tabla de métricas de pods

Las métricas de Pod te permiten monitorizar el comportamiento de tus pods y recibir alertas sobre ellos. En la siguiente tabla se muestran las métricas disponibles en el paquete kube-state-metrics.

Los nombres de métricas de Cloud Monitoring de esta tabla deben tener el prefijo prometheus.googleapis.com/. Se ha omitido ese prefijo en las entradas de la tabla.

Nombre de métrica de PromQL
Nombre de métrica de Cloud Monitoring
Tipo, unidad
Recursos monitorizados
Versión de GKE necesaria
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 comprobación de disponibilidad de los contenedores se ha realizado correctamente. Se muestrea cada 30 segundos.

container: container.
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 muestrea cada 30 segundos.

container: container.
pod: pod.
reason: motivo.
uid: uid.
kube_pod_status_phase
kube_pod_status_phase/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Fase actual de los pods. Se muestrea 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 de no programable del pod. Se muestrea cada 30 segundos.

pod: pod.
uid: uid.

Para obtener más información, consulta Métricas de pods.

Consultas de ejemplo de métricas de pods

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 recibir una alerta sobre el número de pods no programables de 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 que se haya quedado bloqueado en un estado de espera específico. Para ello, usa 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 que esté bloqueado en cualquiera de los estados de espera, usa la siguiente expresión de PromQL:

max_over_time(kube_pod_container_status_waiting_reason{cluster="CLUSTER", namespace="NAMESPACE"}[5m]) >= 1

Para determinar cuántos contenedores no superan las comprobaciones de disponibilidad, 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 han adaptado del archivo kubernetes-apps.yaml del repositorio de gráficos de Helm de Kubernetes de la comunidad de Prometheus en GitHub.

Guías interactivas

Las métricas de estado de Kube también se usan en los cuadernos interactivos de GKE para solucionar problemas de pods que no se pueden programar o que están en bucle de fallos. Para obtener más información sobre estos modos de fallo, consulta los siguientes documentos de solución de problemas:

Si el paquete de métricas de estado de kube no está habilitado, la forma principal de detectar problemas de programación de pods es consultar los eventos de registro "Failed Scheduling" (Programación fallida). Después de habilitar el paquete de métricas de estado de kube, puede usar la métrica kube_pod_status_unschedulable, que tiene el mismo propósito, pero es más fácil de agregar y representar en gráficos. Con esta métrica, puedes ver cuántos pods no se pueden programar y cuándo empezó 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 fallos. La métrica kube_pod_container_status_waiting_reason también enumera los pods en bucle de fallos y te permite determinar si los pods están bloqueados en estados de espera distintos de CrashLookBackOff, como ImagePullBackOff y ContainerCreating.

Para consultar las guías interactivas, sigue estos pasos:

  1. En la Google Cloud consola, ve a la página  Paneles de control:

    Ve a Paneles.

    Si usas la barra de búsqueda para encontrar esta página, selecciona el resultado cuya sección sea Monitorización.

  2. Filtra la lista de paneles de control haciendo clic en la categoría GCP.
  3. En la lista, haz clic en el nombre de un panel de control "GKE Interactive Playbook".

Recibirás métricas sobre el despliegue.

Un Deployment es un controlador que actualiza el estado de recursos como los pods para gestionar eventos como los lanzamientos y las desactivaciones.

Tabla de métricas de despliegue

Las métricas de implementación te permiten monitorizar el comportamiento del controlador y recibir alertas sobre él. En la siguiente tabla se muestran las métricas disponibles en el paquete de métricas de estado de kube:

Los nombres de métricas de Cloud Monitoring de esta tabla deben tener el prefijo prometheus.googleapis.com/. Se ha omitido ese prefijo en las entradas de la tabla.

Nombre de métrica de PromQL
Nombre de métrica de Cloud Monitoring
Tipo, unidad
Recursos monitorizados
Versión de GKE necesaria
Descripción
Etiquetas
kube_deployment_spec_replicas
kube_deployment_spec_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Número de pods deseados para un despliegue. Se muestrea cada 30 segundos.

deployment: deployment.
kube_deployment_status_replicas_available
kube_deployment_status_replicas_available/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Número de réplicas disponibles por despliegue. Se muestrea cada 30 segundos.

deployment: deployment.
kube_deployment_status_replicas_updated
kube_deployment_status_replicas_updated/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Número de réplicas actualizadas por despliegue. Se muestrea cada 30 segundos.

deployment: deployment.

Para obtener más información, consulta Métricas de implementación.

Consultas de ejemplo de métricas de implementación

Puedes crear gráficos y políticas de alertas para implementaciones concretas filtrando las métricas de implementación por clúster, espacio de nombres y nombre de la implementación.

Por ejemplo, para comparar el número de réplicas disponibles con el número esperado de réplicas en una sola implementación, puedes usar las siguientes consultas de PromQL para representar 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 recibir alertas 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 han adaptado del archivo kubernetes-apps.yaml del repositorio de gráficos de Helm de Kubernetes de la comunidad de Prometheus en GitHub.

Métricas de StatefulSet

Un StatefulSet es un controlador que gestiona el despliegue y el escalado de un conjunto de pods para aplicaciones con estado. Este controlador gestiona el orden y la unicidad de los pods.

Tabla de métricas de StatefulSet

Las métricas de StatefulSet te permiten monitorizar y recibir alertas sobre el comportamiento del controlador. En la siguiente tabla se muestran las métricas disponibles en el paquete de métricas de estado de kube:

Los nombres de métricas de Cloud Monitoring de esta tabla deben tener el prefijo prometheus.googleapis.com/. Se ha omitido ese prefijo en las entradas de la tabla.

Nombre de métrica de PromQL
Nombre de métrica de Cloud Monitoring
Tipo, unidad
Recursos monitorizados
Versión de GKE necesaria
Descripción
Etiquetas
kube_statefulset_replicas
kube_statefulset_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Número de pods deseados de un StatefulSet. Se muestrea cada 30 segundos.

statefulset: statefulset.
kube_statefulset_status_replicas_ready
kube_statefulset_status_replicas_ready/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Número de réplicas listas por StatefulSet. Se muestrea cada 30 segundos.

statefulset: statefulset.
kube_statefulset_status_replicas_updated
kube_statefulset_status_replicas_updated/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Número de réplicas actualizadas por StatefulSet. Se muestrea cada 30 segundos.

statefulset: statefulset.

Para obtener más información, consulta Métricas de StatefulSet.

Consultas de ejemplo de métricas de StatefulSet

Puedes crear gráficos y políticas de alertas para StatefulSets concretos filtrando las métricas de StatefulSet por clúster, espacio de nombres y nombre del StatefulSet.

Por ejemplo, para comparar el número de réplicas disponibles con el número esperado de réplicas en un solo StatefulSet, puedes usar las siguientes consultas de PromQL para representar 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 recibir una alerta cuando se produzca un error o se detenga el lanzamiento de un StatefulSet, 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 han adaptado del archivo kubernetes-apps.yaml del repositorio de gráficos de Helm de Kubernetes de la comunidad de Prometheus en GitHub.

Métricas de DaemonSet

Un DaemonSet es un controlador que se asegura de que un conjunto de nodos ejecute una copia de un pod. Por ejemplo, a medida que se añaden nodos a un clúster, DaemonSet añade pods a los nodos. Este controlador es útil para asegurarse de que determinados procesos se ejecuten en todos los nodos.

Tabla de métricas de DaemonSet

Las métricas de DaemonSet te permiten monitorizar y recibir alertas sobre el comportamiento del controlador. En la siguiente tabla se muestran las métricas disponibles en el paquete de métricas de estado de kube:

Los nombres de métricas de Cloud Monitoring de esta tabla deben tener el prefijo prometheus.googleapis.com/. Se ha omitido ese prefijo en las entradas de la tabla.

Nombre de métrica de PromQL
Nombre de métrica de Cloud Monitoring
Tipo, unidad
Recursos monitorizados
Versión de GKE necesaria
Descripción
Etiquetas
kube_daemonset_status_desired_number_scheduled
kube_daemonset_status_desired_number_scheduled/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Número de nodos que deben ejecutar el pod de daemon. Se muestrea cada 30 segundos.

daemonset: daemonset.
kube_daemonset_status_number_misscheduled
kube_daemonset_status_number_misscheduled/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Número de nodos que ejecutan un pod de daemon, pero no deberían hacerlo. Se muestrea cada 30 segundos.

daemonset: daemonset.
kube_daemonset_status_number_ready
kube_daemonset_status_number_ready/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
El número de nodos que deben ejecutar el pod de daemon y tener uno o varios pods de daemon en ejecución y listos. Se muestrea 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
Número de nodos que ejecutan el pod de daemon actualizado. Se muestrea cada 30 segundos.

daemonset: daemonset.

Para obtener más información, consulta Métricas de DaemonSet.

Consultas de ejemplo de métricas de DaemonSet

Puede crear gráficos y políticas de alertas para DaemonSets concretos filtrando las métricas de DaemonSet por clúster, espacio de nombres y nombre de DaemonSet.

Por ejemplo, para comparar el número de réplicas disponibles con el número esperado de réplicas en un solo DaemonSet, puedes usar las siguientes consultas de PromQL para representar 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 recibir alertas cuando se produzca un error o se detenga el lanzamiento de un DaemonSet, 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 han adaptado del archivo kubernetes-apps.yaml del repositorio de gráficos de Helm de Kubernetes de la comunidad de Prometheus en GitHub.

Métricas de HorizontalPodAutoscaler

Un HorizontalPodAutoscaler (HPA) es un controlador que cambia periódicamente el número de pods de una carga de trabajo, como un Deployment o un StatefulSet, en respuesta a alguna métrica, como el uso de la CPU o la memoria. Si cambias el número de pods disponibles para una carga de trabajo, esta seguirá respondiendo, pero será eficiente.

Para obtener más información sobre los HPA, consulta Ver detalles sobre un escalador automático horizontal de pods.

Tabla de métricas de HPA

Las métricas de HorizontalPodAutoscaler te permiten monitorizar y recibir alertas sobre el comportamiento del controlador. En la siguiente tabla se muestran las métricas disponibles en el paquete de métricas de estado de kube:

Los nombres de métricas de Cloud Monitoring de esta tabla deben tener el prefijo prometheus.googleapis.com/. Se ha omitido ese prefijo en las entradas de la tabla.

Nombre de métrica de PromQL
Nombre de métrica de Cloud Monitoring
Tipo, unidad
Recursos monitorizados
Versión de GKE necesaria
Descripción
Etiquetas
kube_horizontalpodautoscaler_spec_max_replicas
kube_horizontalpodautoscaler_spec_max_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Límite superior del número de pods que puede definir el escalador automático. No puede ser inferior a MinReplicas. Se muestrea 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 inferior del número de pods que puede definir la herramienta de adaptación dinámica. El valor predeterminado es 1. Se muestrea 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 las métricas que usa este escalador automático al calcular el número de réplicas deseado. Se muestrea cada 30 segundos.

horizontalpodautoscaler: horizontalpodautoscaler.
metric_name: nombre_métrica.
metric_target_type: metric_target_type.
kube_horizontalpodautoscaler_status_condition
kube_horizontalpodautoscaler_status_condition/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
El estado de este escalador automático. Se muestrea cada 30 segundos.

condition: condición.
horizontalpodautoscaler: horizontalpodautoscaler.
namespace: espacio de nombres.
status: estado.
kube_horizontalpodautoscaler_status_current_replicas
kube_horizontalpodautoscaler_status_status_current_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Número actual de réplicas de pods gestionadas por este escalador automático. Se muestrea cada 30 segundos.

horizontalpodautoscaler: horizontalpodautoscaler.
kube_horizontalpodautoscaler_status_desired_replicas
kube_horizontalpodautoscaler_status_desired_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Número deseado de réplicas de los pods gestionados por este escalador automático. Se muestrea cada 30 segundos.

horizontalpodautoscaler: horizontalpodautoscaler.

Para obtener más información, consulta Métricas de la herramienta de adaptación dinámica de pods horizontal.

Consultas de ejemplo de métricas de HPA

Por ejemplo, para determinar si el HPA se acerca al número máximo de réplicas, puedes representar gráficamente 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 el número máximo de réplicas, puede que quieras aumentar la especificación del número máximo de pods. Puedes usar la siguiente expresión de PromQL para crear una alerta que te avise en 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 puede 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 el número actual y el necesario 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 el número actual de réplicas y el número de réplicas necesario, mínimo y máximo, así como los cambios en el número 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 de la métrica kube_horizontalpodautoscaler_status_condition también pueden ayudarte a detectar cuándo se producen varios modos de fallo en los HPA. Por ejemplo:

  • La condición ScalingLimited y el estado true indican que el HPA está limitado por el número mínimo o máximo de réplicas:
    kube_horizontalpodautoscaler_status_condition{status="true", condition="ScalingLimited"} == 1
  • La condición AbleToScale y el estado false indican que el HPA tiene problemas para obtener o actualizar las escalas:

    kube_horizontalpodautoscaler_status_condition{status="false", condition="AbleToScale"} == 1

  • La condición ScalingActive y el estado false indican que el HPA está inhabilitado o no puede calcular una nueva escala:

    kube_horizontalpodautoscaler_status_condition{status="false", condition="ScalingActive"} == 1

Algunas de las expresiones de consulta y alerta de esta sección se han adaptado del archivo kubernetes-apps.yaml del repositorio de gráficos de Helm de Kubernetes de la comunidad de Prometheus en GitHub.

Métricas de JobSet

Un JobSet es una API de carga de trabajo que te permite gestionar un grupo de trabajos de Kubernetes como una unidad. El caso de uso más habitual de un JobSet es el entrenamiento distribuido, pero también puedes usarlo para ejecutar cargas de trabajo por lotes.

Para obtener más información sobre los JobSets, consulta la documentación de JobSet.

Tabla de métricas de JobSet

Las métricas de JobSet te permiten monitorizar el comportamiento de tus JobSets y recibir alertas sobre ellos. En la siguiente tabla se muestran las métricas disponibles en el paquete de métricas de estado de kube:

Los nombres de métricas de Cloud Monitoring de esta tabla deben tener el prefijo prometheus.googleapis.com/. Se ha omitido ese prefijo en las entradas de la tabla.

Nombre de métrica de PromQL
Nombre de métrica de Cloud Monitoring
Tipo, unidad
Recursos monitorizados
Versión de GKE necesaria
Descripción
Etiquetas
kube_jobset_specified_replicas
kube_jobset_specified_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.32.1-gke.1357001
Número de réplicas especificadas por cada trabajo replicado de un JobSet. Se muestrea cada 30 segundos.

jobset_name: jobset_name.
replicated_job_name: replicated_job_name.
kube_jobset_ready_replicas
kube_jobset_ready_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.32.1-gke.1357001
Número de réplicas en estado "READY" por cada trabajo replicado de un JobSet. Se muestrea cada 30 segundos.

jobset_name: jobset_name.
replicated_job_name: replicated_job_name.
kube_jobset_succeeded_replicas
kube_jobset_succeeded_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.32.1-gke.1357001
Número de réplicas en estado "SUCCEEDED" por tareas replicadas en un JobSet. Se muestrea cada 30 segundos.

jobset_name: jobset_name.
replicated_job_name: replicated_job_name.
kube_jobset_failed_replicas
kube_jobset_failed_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.32.1-gke.1357001
Número de réplicas en estado "FAILED" por cada trabajo replicado de un JobSet. Se muestrea cada 30 segundos.

jobset_name: jobset_name.
replicated_job_name: replicated_job_name.
kube_jobset_active_replicas
kube_jobset_active_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.32.1-gke.1357001
Número de réplicas en estado "ACTIVE" por cada trabajo replicado en un JobSet. Se muestrea cada 30 segundos.

jobset_name: jobset_name.
replicated_job_name: replicated_job_name.
kube_jobset_suspended_replicas
kube_jobset_suspended_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.32.1-gke.1357001
Número de réplicas en estado "SUSPENDED" por cada tarea replicada de un JobSet. Se muestrea cada 30 segundos.

jobset_name: jobset_name.
replicated_job_name: replicated_job_name.
kube_jobset_status_condition
kube_jobset_status_condition/gauge
GAUGEDOUBLE1
prometheus_target
1.32.1-gke.1357001
Las condiciones de estado actuales de un JobSet. Se muestrea cada 30 segundos.

jobset_name: jobset_name.
condition: condición.
kube_jobset_restarts
kube_jobset_restarts/gauge
GAUGEDOUBLE1
prometheus_target
1.32.4-gke.1767000
1.33.0-gke.1868000
Número de reinicios de JobSet. Se muestrea cada 30 segundos.

jobset_name: jobset_name.

Consultas de ejemplo de métricas de JobSet

Puedes crear gráficos y políticas de alertas para JobSets concretos filtrando las métricas de JobSet por clúster, espacio de nombres y nombre del JobSet.

Por ejemplo, para comparar el número de réplicas en estado READY con el número esperado de réplicas en un solo JobSet, representa ambas métricas en un solo gráfico mediante las siguientes consultas de PromQL:

kube_jobset_specified_replicas{cluster="CLUSTER", namespace="NAMESPACE", jobset_name="JOBSET_NAME"}
y
kube_jobset_ready_replicas{cluster="CLUSTER", namespace="NAMESPACE", jobset_name="JOBSET_NAME"}

Para recibir alertas sobre un lanzamiento de JobSet fallido o no disponible, puedes usar la siguiente expresión de PromQL:

kube_jobset_specified_replicas{cluster="CLUSTER", namespace="NAMESPACE", jobset_name="JOBSET_NAME"}
  >
kube_jobset_ready_replicas{cluster="CLUSTER", namespace="NAMESPACE", jobset_name="JOBSET_NAME"}

La etiqueta condition de la métrica kube_jobset_status_condition también puede ayudarte a detectar cuándo se producen varios tipos de errores en los JobSets. Por ejemplo:

  • La condición Failed indica que no se ha podido ejecutar el JobSet:
    kube_jobset_status_condition{jobset_name="JOBSET_NAME, condition="Failed"} == 1
  • La condición Suspended indica que el JobSet está suspendido:
    kube_jobset_status_condition{jobset_name="JOBSET_NAME, condition="Suspended"} == 1

Algunas de las expresiones de consulta y alerta de esta sección se han adaptado del archivo kubernetes-apps.yaml del repositorio de gráficos de Helm de Kubernetes de la comunidad de Prometheus en GitHub.