Recolha e veja métricas de estado do kube


Esta página descreve como configurar um cluster do Google Kubernetes Engine (GKE) para enviar um conjunto organizado de kube state, incluindo métricas para pods e implementações, para o Cloud Monitoring através do Google Cloud Managed Service for Prometheus. Esta página também descreve como estas métricas são formatadas quando são escritas no Monitoring e como consultar métricas.

Antes de começar

Antes de começar, certifique-se de que realizou as seguintes tarefas:

  • Ative a API Google Kubernetes Engine.
  • Ative a API Google Kubernetes Engine
  • Se quiser usar a CLI gcloud para esta tarefa, instale-a e, em seguida, inicialize-a. Se instalou anteriormente a CLI gcloud, execute gcloud components update para obter a versão mais recente.

Requisitos

Para recolher métricas de estado do kube, o seu cluster do GKE tem de cumprir os seguintes requisitos:

  • O cluster tem de estar a executar as seguintes versões com base na métrica que quer ativar:
    • Para ativar o pacote de métricas JobSet, o cluster tem de ter a versão 1.32.1-gke.1357001 ou posterior. A partir da versão 1.32.1-gke.1357001, o pacote de métricas JobSet está ativado por predefinição nos clusters padrão e Autopilot do GKE criados recentemente.
    • A métrica kube_jobset_restarts está disponível em clusters 1.32 a partir de 1.32.4-gke.1767000 e em clusters 1.33 a partir de 1.33.0-gke.1868000.
    • Para ativar quaisquer outros pacotes de métricas descritos nesta página, o cluster tem de executar o GKE 1.27.2-gke.1200 ou posterior. A partir da versão 1.29.2-gke.2000 para clusters padrão do GKE e da versão 1.27.4-gke.900 para clusters do GKE Autopilot, o pacote de métricas de estado do Kube é ativado por predefinição.
  • O cluster tem de ter as métricas do sistema ativadas.
  • O cluster tem de ter a recolha gerida do Managed Service for Prometheus da Google Cloud ativada. A recolha gerida do Google Cloud Managed Service for Prometheus está ativada por predefinição para novos clusters.

Configure a recolha de métricas de estado do kube

Pode ativar as métricas de estado do kube através da Google Cloud consola, da CLI gcloud ou do Terraform:

Consola

Pode ativar as métricas de estado do kube no separador Observabilidade para um cluster ou uma implementação num cluster. Também pode pré-visualizar os gráficos e as métricas disponíveis antes de ativar o pacote de métricas.

No separador Observabilidade de um cluster, pode filtrar o conjunto de gráficos para métricas de estado do kube pelos seguintes dois itens:

  • Estado das cargas de trabalho: inclui as métricas para recursos de pods, implementações, StatefulSets, DaemonSets e HorizontalPodAutoscaler.
  • Armazenamento > Persistente: inclui as métricas para volumes persistentes e reivindicações de volumes persistentes.

Pode ativar um ou ambos os conjuntos de métricas.

Para ativar as métricas de estado do kube no separador Observabilidade de um cluster, faça o seguinte:

  1. Na Google Cloud consola, aceda à página Clusters do Kubernetes:

    Aceda a Clusters do Kubernetes

    Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é Kubernetes Engine.

  2. Clique no nome do cluster e, de seguida, selecione o separador Observabilidade.

  3. Selecione Estado das cargas de trabalho ou Armazenamento > Persistente na lista de funcionalidades.

  4. Clique em Ativar pacote.

    Se o pacote de métricas de estado do kube já estiver ativado, vê um conjunto de gráficos para métricas de estado do kube.

Para ativar as métricas de estado do kube a partir do separador Observabilidade para uma implementação, faça o seguinte:

  1. Na Google Cloud consola, aceda à página Workloads:

    Aceda a Cargas de trabalho

    Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é Kubernetes Engine.

  2. Clique no nome da sua implementação e, de seguida, selecione o separador Observabilidade.

  3. Selecione Kube State na lista de funcionalidades.

  4. Clique em Ativar pacote. O pacote está ativado para todo o cluster.

    Se o pacote de métricas de estado do kube já estiver ativado, é apresentado um conjunto de gráficos para métricas de pods, implementações e escaladores automáticos de pods horizontais.

Para configurar as métricas de estado do kube a partir do separador Detalhes do cluster, faça o seguinte:

  1. Na Google Cloud consola, aceda à página Clusters do Kubernetes:

    Aceda a Clusters do Kubernetes

    Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é Kubernetes Engine.

  2. Clique no nome do cluster.

  3. Na linha Funcionalidades com a etiqueta Cloud Monitoring, clique no ícone Editar.

  4. Na caixa de diálogo Editar monitorização na nuvem apresentada, confirme que a opção Ativar monitorização na nuvem está selecionada.

  5. No menu pendente Componentes, selecione os componentes de estado do kube a partir dos quais quer recolher métricas.

  6. Clique em OK.

  7. Clique em Guardar alterações.

gcloud

Atualize o cluster para recolher métricas:

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

Substitua o seguinte:

O conjunto de valores fornecido ao parâmetro monitoring substitui qualquer definição anterior.

Terraform

Para configurar a recolha de métricas de estado do kube através do Terraform, consulte o bloco monitoring_config no registo do Terraform para google_container_cluster. Para informações gerais sobre a utilização do Google Cloud com o Terraform, consulte Terraform com o Google Cloud.

Quota

As métricas de estado do Kube consomem a quota de pedidos de carregamento de séries cronológicas por minuto da API Cloud Monitoring. Antes de ativar as métricas de estado do kube, verifique a sua utilização máxima recente dessa quota. Se tiver muitos clusters no mesmo projeto ou já se estiver a aproximar desse limite de quota, pode pedir um aumento do limite de quota antes de ativar qualquer um dos pacotes de observabilidade.

Preços

As métricas de estado do Kube usam o Google Cloud Managed Service for Prometheus para carregar métricas no Cloud Monitoring. Os custos do Cloud Monitoring para a ingestão destas métricas baseiam-se no número de amostras ingeridas.

Para mais informações, consulte os preços do Cloud Monitoring.

Formato da métrica

Todas as métricas de estado do kube do Kubernetes escritas no Cloud Monitoring usam o tipo de recurso prometheus_target. Cada nome de métrica tem o prefixo prometheus.googleapis.com/ e um sufixo que indica o tipo de métrica do Prometheus, como /gauge, /histogram ou /counter. Caso contrário, cada nome de métrica é idêntico ao nome de métrica exposto pelo Kubernetes de código aberto.

Exportar a partir do Cloud Monitoring

As métricas de estado do kube podem ser exportadas do Cloud Monitoring através da API Cloud Monitoring. Uma vez que todas as métricas de estado do kube são carregadas através do Google Cloud Managed Service for Prometheus, é possível consultar as métricas de estado do kube através da linguagem de consulta do Prometheus (PromQL). Também podem ser consultados através da linguagem de consulta de monitorização (MQL).

Consultar métricas

Quando consulta métricas de estado do kube, o nome que usa depende de estar a usar o PromQL ou funcionalidades baseadas no Cloud Monitoring, como o MQL ou o Explorador de métricas, a interface orientada por menus.

As tabelas seguintes de métricas de estado do kube mostram duas versões de cada nome de métrica:

  • Nome da métrica PromQL: quando usa o PromQL nas páginas do Cloud Monitoring da Google Cloud consola ou nos campos PromQL da API Cloud Monitoring, use o nome da métrica PromQL.
  • Nome da métrica do Cloud Monitoring Quando usar outras funcionalidades do Cloud Monitoring, use o nome da métrica do Cloud Monitoring nas tabelas abaixo. Este nome tem de ter o prefixo prometheus.googleapis.com/, que foi omitido das entradas na tabela.

Métricas de armazenamento

Os nomes das métricas do Cloud Monitoring nesta tabela têm de ter o prefixo prometheus.googleapis.com/. Esse prefixo foi omitido das entradas na tabela.

Nome da métrica PromQL
Nome da métrica do Cloud Monitoring
Kind, Type, Unit
Recursos monitorizados
Versão do GKE obrigatória
Descrição
Etiquetas
kube_persistentvolume_capacity_bytes
kube_persistentvolume_capacity_bytes/gauge
GAUGEDOUBLEBy
prometheus_target
1.27.2-gke.1200
Capacidade do volume persistente em bytes. Amostrada a cada 30 segundos.

persistentvolume: persistentvolume.
kube_persistentvolume_claim_ref
kube_persistentvolume_claim_ref/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Informações sobre a referência da reivindicação de volume persistente. Amostrada a cada 30 segundos.

claim_name: claim_name.
name: nome.
persistentvolume: persistentvolume.
kube_persistentvolume_info
kube_persistentvolume_info/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Informações sobre o persistentvolume. Amostrada a 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
A fase indica se um volume está disponível, associado a uma reivindicação ou libertado por uma reivindicação. Amostrada a cada 30 segundos.

persistentvolume: persistentvolume.
phase: fase.
kube_persistentvolumeclaim_info
kube_persistentvolumeclaim_info/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Informações sobre a reivindicação de volume persistente. Amostrada a 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
A capacidade de armazenamento pedida pela reivindicação de volume persistente. Amostrada a cada 30 segundos.

persistentvolumeclaim: persistentvolumeclaim.
kube_persistentvolumeclaim_status_phase
kube_persistentvolumeclaim_status_phase/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
A fase em que a reivindicação de volume persistente se encontra atualmente. Amostrada a cada 30 segundos.

persistentvolumeclaim: persistentvolumeclaim.
phase: fase.

Para mais informações, consulte os artigos Métricas de PersistentVolume e Métricas de PersistentVolumeClaim.

Métricas de agrupamento

Um pod é um grupo de um ou mais contentores com uma especificação sobre como executar os contentores, que partilham recursos de armazenamento e de rede.

Tabela de métricas de pods

As métricas de Pod permitem-lhe monitorizar e receber alertas sobre o comportamento dos seus Pods. A tabela seguinte mostra as métricas disponíveis no pacote de métricas kube state.

Os nomes das métricas do Cloud Monitoring nesta tabela têm de ter o prefixo prometheus.googleapis.com/. Esse prefixo foi omitido das entradas na tabela.

Nome da métrica PromQL
Nome da métrica do Cloud Monitoring
Kind, Type, Unit
Recursos monitorizados
Versão do GKE obrigatória
Descrição
Etiquetas
kube_pod_container_status_ready
kube_pod_container_status_ready/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Descreve se a verificação de disponibilidade dos contentores foi bem-sucedida. Amostrada a 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
Descreve o motivo pelo qual o contentor se encontra atualmente no estado de espera. Amostrada a 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
A fase atual dos pods. Amostrada a 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
Descreve o estado não agendável do agrupamento. Amostrada a cada 30 segundos.

pod: pod.
uid: uid.

Para mais informações, consulte o artigo Métricas de pods.

Exemplos de consultas para métricas de agrupamentos

Para determinar se tem pods não agendáveis, use a seguinte expressão PromQL:

sum(kube_pod_status_unschedulable{cluster="CLUSTER", namespace="NAMESPACE"})

Para receber um alerta sobre um número de agrupamentos não agendáveis num espaço de nomes, pode usar a seguinte expressão PromQL:

sum(kube_pod_status_unschedulable{cluster="CLUSTER", namespace="NAMESPACE"}) > LIMIT

Pode usar a métrica kube_pod_container_status_waiting_reason para criar um alerta para um contentor bloqueado num estado de espera específico através de uma expressão PromQL, como a seguinte:

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

O valor de REASON especifica o estado de espera do contentor, por exemplo:

  • CrashLoopBackOff
  • ImagePullBackOff
  • ContainerCreating

Para criar um alerta para um contentor bloqueado num dos estados de espera, use a seguinte expressão PromQL:

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

Para determinar quantos contentores estão a falhar nas verificações de disponibilidade, use a seguinte expressão PromQL

sum(kube_pod_container_status_ready) by (pod, container) == 0

Algumas das expressões de consulta e alerta nesta secção foram adaptadas do ficheiro kubernetes-apps.yaml no repositório de gráficos Helm do Kubernetes da comunidade Prometheus no GitHub.

Guias interativos

As métricas de estado do Kube também são usadas nos manuais interativos do GKE para resolver problemas de pods não agendáveis ou em ciclo de falhas. Para mais informações sobre estes modos de falha, consulte os seguintes documentos de resolução de problemas:

Sem o pacote de métricas de estado do kube ativado, a principal forma de detetar problemas de agendamento de pods é consultar os eventos de registo "Failed Scheduling" (Agendamento falhado). Depois de ativar o pacote de métricas de estado do kube, pode usar a métrica kube_pod_status_unschedulable, que tem o mesmo objetivo, mas é mais fácil de agregar e representar em gráficos. Ao usar a métrica, pode ver quantos pods não são agendáveis e quando o problema começou.

Da mesma forma, a métrica do sistema do GKE kubernetes.io/container/restart_count pode ajudar a detetar pods em crashlooping. A métrica kube_pod_container_status_waiting_reason também enumera os pods em ciclo de falhas e permite-lhe determinar se os pods estão bloqueados em estados de espera que não sejam CrashLookBackOff, como ImagePullBackOff e ContainerCreating.

Para explorar os manuais interativos, faça o seguinte:

  1. Na Google Cloud consola, aceda à página  Painéis de controlo:

    Aceda a Painéis de controlo

    Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é Monitorização.

  2. Filtre a lista do painel de controlo clicando na categoria G​C​P.
  3. Clique no nome de um painel de controlo "GKE Interactive Playbook" na lista.

Métricas de implementação

Uma implementação é um controlador que atualiza o estado dos recursos, como os pods, para gerir eventos como implementações e desativações.

Tabela de métricas de implementação

As métricas de implementação permitem-lhe monitorizar e receber alertas sobre o comportamento do controlador. A tabela seguinte mostra as métricas disponíveis no pacote kube state metrics:

Os nomes das métricas do Cloud Monitoring nesta tabela têm de ter o prefixo prometheus.googleapis.com/. Esse prefixo foi omitido das entradas na tabela.

Nome da métrica PromQL
Nome da métrica do Cloud Monitoring
Kind, Type, Unit
Recursos monitorizados
Versão do GKE obrigatória
Descrição
Etiquetas
kube_deployment_spec_replicas
kube_deployment_spec_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Número de pods desejados para uma implementação. Amostrada a cada 30 segundos.

deployment: implementação.
kube_deployment_status_replicas_available
kube_deployment_status_replicas_available/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
O número de réplicas disponíveis por implementação. Amostrada a cada 30 segundos.

deployment: implementação.
kube_deployment_status_replicas_updated
kube_deployment_status_replicas_updated/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
O número de réplicas atualizadas por implementação. Amostrada a cada 30 segundos.

deployment: implementação.

Para mais informações, consulte o artigo Métricas de implementação.

Consultas de exemplo para métricas de implementação

Pode criar gráficos e políticas de alerta para implementações individuais filtrando as métricas de implementação por cluster, espaço de nomes e o nome da implementação.

Por exemplo, para comparar o número de réplicas disponíveis com o número esperado de réplicas numa única implementação, pode usar as seguintes consultas PromQL para representar graficamente ambas as métricas num único gráfico:

kube_deployment_spec_replicas{cluster="CLUSTER", namespace="NAMESPACE", deployment=DEPLOYMENT"}
e
kube_deployment_status_replicas_available{cluster="CLUSTER", namespace="NAMESPACE", deployment=DEPLOYMENT"}

Para receber um alerta sobre uma implementação com falhas ou em espera, pode usar a seguinte expressão 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
)

Algumas das expressões de consulta e alerta nesta secção foram adaptadas do ficheiro kubernetes-apps.yaml no repositório de gráficos Helm do Kubernetes da comunidade Prometheus no GitHub.

Métricas do StatefulSet

Um StatefulSet é um controlador que gere a implementação e o dimensionamento de um conjunto de pods para aplicações com estado. Este controlador gere a ordem e a exclusividade dos pods.

Tabela de métricas do StatefulSet

As métricas do StatefulSet permitem-lhe monitorizar e receber alertas sobre o comportamento do controlador. A tabela seguinte mostra as métricas disponíveis no pacote kube state metrics:

Os nomes das métricas do Cloud Monitoring nesta tabela têm de ter o prefixo prometheus.googleapis.com/. Esse prefixo foi omitido das entradas na tabela.

Nome da métrica PromQL
Nome da métrica do Cloud Monitoring
Kind, Type, Unit
Recursos monitorizados
Versão do GKE obrigatória
Descrição
Etiquetas
kube_statefulset_replicas
kube_statefulset_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Número de agrupamentos desejados para um StatefulSet. Amostrada a cada 30 segundos.

statefulset: statefulset.
kube_statefulset_status_replicas_ready
kube_statefulset_status_replicas_ready/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
O número de réplicas prontas por StatefulSet. Amostrada a cada 30 segundos.

statefulset: statefulset.
kube_statefulset_status_replicas_updated
kube_statefulset_status_replicas_updated/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
O número de réplicas atualizadas por StatefulSet. Amostrada a cada 30 segundos.

statefulset: statefulset.

Para mais informações, consulte o artigo Métricas StatefulSet.

Consultas de exemplo para métricas StatefulSet

Pode criar gráficos e políticas de alerta para StatefulSets individuais filtrando as métricas de StatefulSet por cluster, espaço de nomes e o nome do StatefulSet.

Por exemplo, para comparar o número de réplicas disponíveis com o número esperado de réplicas num único StatefulSet, pode usar as seguintes consultas PromQL para representar graficamente ambas as métricas num único gráfico:

kube_statefulset_replicas{cluster="CLUSTER", namespace="NAMESPACE", statefulset="STATEFULSET"}
e
kube_statefulset_status_replicas_ready{cluster="CLUSTER", namespace="NAMESPACE", statefulset="STATEFULSET"}

Para receber um alerta sobre uma implementação do StatefulSet com falhas ou em espera, pode usar a seguinte expressão 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
)

Algumas das expressões de consulta e alerta nesta secção foram adaptadas do ficheiro kubernetes-apps.yaml no repositório de gráficos Helm do Kubernetes da comunidade Prometheus no GitHub.

Métricas de DaemonSet

Um DaemonSet é um controlador que garante que um determinado conjunto de nós executa uma cópia de um pod. Por exemplo, à medida que os nós são adicionados a um cluster, o DaemonSet adiciona pods aos nós. Este controlador é útil para garantir que determinados processos são executados em todos os nós.

Tabela de métricas do DaemonSet

As métricas do DaemonSet permitem-lhe monitorizar e receber alertas sobre o comportamento do controlador. A tabela seguinte mostra as métricas disponíveis no pacote kube state metrics:

Os nomes das métricas do Cloud Monitoring nesta tabela têm de ter o prefixo prometheus.googleapis.com/. Esse prefixo foi omitido das entradas na tabela.

Nome da métrica PromQL
Nome da métrica do Cloud Monitoring
Kind, Type, Unit
Recursos monitorizados
Versão do GKE obrigatória
Descrição
Etiquetas
kube_daemonset_status_desired_number_scheduled
kube_daemonset_status_desired_number_scheduled/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
O número de nós que devem estar a executar o pod do daemon. Amostrada a cada 30 segundos.

daemonset: daemonset.
kube_daemonset_status_number_misscheduled
kube_daemonset_status_number_misscheduled/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
O número de nós que executam um pod de daemon, mas não deviam. Amostrada a cada 30 segundos.

daemonset: daemonset.
kube_daemonset_status_number_ready
kube_daemonset_status_number_ready/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
O número de nós que devem estar a executar o pod do daemon e ter um ou mais pods do daemon em execução e prontos. Amostrada a 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
O número de nós que estão a executar o pod de daemon atualizado. Amostrada a cada 30 segundos.

daemonset: daemonset.

Para mais informações, consulte o artigo Métricas do DaemonSet.

Consultas de exemplo para métricas de DaemonSet

Pode criar gráficos e políticas de alerta para DaemonSets individuais filtrando as métricas de DaemonSet por cluster, espaço de nomes e o nome do DaemonSet.

Por exemplo, para comparar o número de réplicas disponíveis com o número esperado de réplicas num único DaemonSet, pode usar as seguintes consultas PromQL para representar graficamente ambas as métricas num único gráfico:

kube_daemonset_status_updated_number_scheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonsetset=DAEMONSET"}
e
kube_daemonset_status_desired_number_scheduled{cluster="CLUSTER", namespace="NAMESPACE", daemonset=DAEMONSET"}

Para receber um alerta sobre uma implementação do DaemonSet com falhas ou em espera, pode usar a seguinte expressão 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
)

Algumas das expressões de consulta e alerta nesta secção foram adaptadas do ficheiro kubernetes-apps.yaml no repositório de gráficos Helm do Kubernetes da comunidade Prometheus no GitHub.

Métricas do HorizontalPodAutoscaler

Um HorizontalPodAutoscaler (HPA) é um controlador que altera periodicamente o número de pods numa carga de trabalho, como uma implementação ou um StatefulSet, em resposta a alguma métrica, como a utilização da CPU ou da memória. Alterar o número de pods disponíveis para uma carga de trabalho mantém a carga de trabalho reativa, mas eficiente.

Para mais informações sobre HPAs, consulte o artigo Ver detalhes sobre um Horizontal Pod Autoscaler.

Tabela de métricas da HPA

As métricas do HorizontalPodAutoscaler permitem-lhe monitorizar e receber alertas sobre o comportamento do controlador. A tabela seguinte mostra as métricas disponíveis no pacote kube state metrics:

Os nomes das métricas do Cloud Monitoring nesta tabela têm de ter o prefixo prometheus.googleapis.com/. Esse prefixo foi omitido das entradas na tabela.

Nome da métrica PromQL
Nome da métrica do Cloud Monitoring
Kind, Type, Unit
Recursos monitorizados
Versão do GKE obrigatória
Descrição
Etiquetas
kube_horizontalpodautoscaler_spec_max_replicas
kube_horizontalpodautoscaler_spec_max_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Limite superior para o número de pods que podem ser definidos pelo escalador automático, não pode ser inferior a MinReplicas. Amostrada a cada 30 segundos.

horizontalpodautoscaler: horizontalpodautoscaler.
kube_horizontalpodautoscaler_spec_min_replicas
kube_horizontalpodautoscaler_spec_min_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Limite inferior para o número de agrupamentos que podem ser definidos pelo escalador automático, predefinição 1. Amostrada a cada 30 segundos.

horizontalpodautoscaler: horizontalpodautoscaler.
kube_horizontalpodautoscaler_spec_target_metric
kube_horizontalpodautoscaler_spec_target_metric/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
As especificações das métricas usadas por este escalador automático ao calcular a quantidade de réplicas desejada. Amostrada a 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
A condição deste redimensionador automático. Amostrada a cada 30 segundos.

condition: condição.
horizontalpodautoscaler: horizontalpodautoscaler.
namespace: espaço de nomes.
status: status.
kube_horizontalpodautoscaler_status_current_replicas
kube_horizontalpodautoscaler_status_status_current_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.27.2-gke.1200
Número atual de réplicas de pods geridas por este escalador automático. Amostrada a 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 desejado de réplicas de pods geridas por este escalador automático. Amostrada a cada 30 segundos.

horizontalpodautoscaler: horizontalpodautoscaler.

Para mais informações, consulte o artigo Métricas do redimensionador automático de pods horizontal.

Consultas de exemplo para métricas de HPA

Por exemplo, para determinar se o HPA está a aproximar-se do número máximo de réplicas, pode traçar o seguinte rácio:

kube_horizontalpodautoscaler_status_current_replicas{cluster="CLUSTER", namespace="NAMESPACE", horizontalpodautoscaler="HPA"} /
kube_horizontalpodautoscaler_spec_max_replicas{cluster="CLUSTER", namespace="NAMESPACE", horizontalpodautoscaler="HPA"}

Quando o HPA está a ser executado com o número máximo de réplicas, pode querer aumentar a especificação para o número máximo de pods. Pode usar a seguinte expressão PromQL para criar um alerta que lhe envia uma notificação neste caso:

kube_horizontalpodautoscaler_status_current_replicas{cluster="CLUSTER", namespace="NAMESPACE", horizontalpodautoscaler="HPA"}
  ==
kube_horizontalpodautoscaler_spec_max_replicas{cluster="CLUSTER", namespace="NAMESPACE", horizontalpodautoscaler="HPA"}

Também pode comparar os valores das métricas kube_horizontalpodautoscaler_status_current_replicaskube_horizontalpodautoscaler_status_desired_replicas para determinar se existe uma diferença entre o número atual e o número necessário de réplicas. Uma diferença pode indicar uma restrição de recursos no cluster. A seguinte expressão PromQL procura diferenças entre o número atual de réplicas e os números de réplicas necessários, mínimos e máximos, bem como alterações no número atual 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

As etiquetas condition e status na métrica kube_horizontalpodautoscaler_status_condition também podem ajudar a detetar quando os HPAs encontram vários modos de falha. Por exemplo:

  • A condição ScalingLimited e o estado de true indicam que o HPA está limitado pelo número de réplicas mínimo ou máximo:
    kube_horizontalpodautoscaler_status_condition{status="true", condition="ScalingLimited"} == 1
  • A condição AbleToScale e um estado de false indicam que o HPA está a ter problemas ao obter ou atualizar as escalas:

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

  • A condição ScalingActive e um estado de false indicam que o HPA está desativado ou não consegue calcular uma nova escala:

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

Algumas das expressões de consulta e alerta nesta secção foram adaptadas do ficheiro kubernetes-apps.yaml no repositório de gráficos Helm do Kubernetes da comunidade Prometheus no GitHub.

Métricas JobSet

Um Jobset é uma API de carga de trabalho que lhe permite gerir um grupo de tarefas do Kubernetes como uma unidade. O exemplo de utilização mais comum de um JobSet é o treino distribuído, mas também o pode usar para executar cargas de trabalho em lote.

Para mais informações sobre JobSets, consulte a documentação do JobSet.

Tabela de métricas do JobSet

As métricas JobSet permitem-lhe monitorizar e receber alertas sobre o comportamento dos seus JobSets. A tabela seguinte mostra as métricas que estão disponíveis no pacote de métricas de estado do kube:

Os nomes das métricas do Cloud Monitoring nesta tabela têm de ter o prefixo prometheus.googleapis.com/. Esse prefixo foi omitido das entradas na tabela.

Nome da métrica PromQL
Nome da métrica do Cloud Monitoring
Kind, Type, Unit
Recursos monitorizados
Versão do GKE obrigatória
Descrição
Etiquetas
kube_jobset_specified_replicas
kube_jobset_specified_replicas/gauge
GAUGEDOUBLE1
prometheus_target
1.32.1-gke.1357001
O número de réplicas especificadas por tarefas replicadas num JobSet. Amostrada a 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
O número de réplicas num estado "PRONTO" por tarefas replicadas num JobSet. Amostrada a 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
O número de réplicas num estado "SUCCEEDED" por tarefas replicadas num JobSet. Amostrada a 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
O número de réplicas num estado "FAILED" por tarefas replicadas num JobSet. Amostrada a 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
O número de réplicas num estado "ACTIVE" por tarefas replicadas num JobSet. Amostrada a 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
O número de réplicas num estado "SUSPENDED" por tarefas replicadas num JobSet. Amostrada a 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
As condições de estado atuais de um JobSet. Amostrada a cada 30 segundos.

jobset_name: jobset_name.
condition: condição.
kube_jobset_restarts
kube_jobset_restarts/gauge
GAUGEDOUBLE1
prometheus_target
1.32.4-gke.1767000
1.33.0-gke.1868000
O número de reinícios do JobSet. Amostrada a cada 30 segundos.

jobset_name: jobset_name.

Exemplos de consultas para métricas JobSet

Pode criar gráficos e políticas de alerta para JobSets individuais filtrando as métricas de JobSet por cluster, espaço de nomes e o nome do JobSet.

Por exemplo, para comparar o número de réplicas num estado READY com o número esperado de réplicas num único JobSet, represente ambas as métricas num único gráfico usando as seguintes consultas PromQL:

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

Para receber um alerta sobre uma implementação de JobSet com falhas ou indisponível, pode usar a seguinte expressão 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"}

A etiqueta condition na métrica kube_jobset_status_condition também pode ajudar a detetar quando os JobSets entram em vários modos de falha, por exemplo:

  • A condição Failed indica que o JobSet falhou na execução:
    kube_jobset_status_condition{jobset_name="JOBSET_NAME, condition="Failed"} == 1
  • A condição Suspended indica que o JobSet está suspenso:
    kube_jobset_status_condition{jobset_name="JOBSET_NAME, condition="Suspended"} == 1

Algumas das expressões de consulta e alerta nesta secção foram adaptadas do ficheiro kubernetes-apps.yaml no repositório de gráficos Helm do Kubernetes da comunidade Prometheus no GitHub.