Monitorar métricas de latência de inicialização

Nesta página, descrevemos as métricas e os painéis disponíveis para monitorar a latência de inicialização das cargas de trabalho do Google Kubernetes Engine (GKE) e dos nós de cluster subjacentes. Use as métricas para rastrear, resolver problemas e reduzir a latência de inicialização.

Esta página é destinada a administradores e operadores de plataforma que precisam monitorar e otimizar a latência de inicialização das cargas de trabalho. Para saber mais sobre papéis comuns que mencionamos no conteúdo do Google Cloud , consulte Tarefas e papéis de usuário comuns do GKE.

Visão geral

A latência de inicialização afeta significativamente a forma como o aplicativo responde a picos de tráfego, a rapidez com que as réplicas se recuperam de interrupções e a eficiência dos custos operacionais dos clusters e das cargas de trabalho. Monitorar a latência de inicialização das cargas de trabalho pode ajudar a detectar degradações de latência e acompanhar o impacto das atualizações de carga de trabalho e infraestrutura na latência de inicialização.

A otimização da latência de inicialização da carga de trabalho tem os seguintes benefícios:

  • Reduz a latência de resposta do seu serviço aos usuários durante picos de tráfego.
  • Reduz o excesso de capacidade de veiculação necessário para absorver picos de demanda enquanto novas réplicas são criadas.
  • Reduz o tempo de inatividade dos recursos que já estão implantados e aguardando a inicialização dos recursos restantes durante as computações em lote.

Antes de começar

Antes de começar, verifique se você realizou as tarefas a seguir:

  • Ative a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Se você quiser usar a Google Cloud CLI para essa tarefa, instale e inicialize a CLI gcloud. Se você instalou a CLI gcloud anteriormente, instale a versão mais recente executando o comando gcloud components update. Talvez as versões anteriores da CLI gcloud não sejam compatíveis com a execução dos comandos neste documento.
  • Ative as APIs Cloud Logging e Cloud Monitoring.

    Funções necessárias para ativar APIs

    Para ativar APIs, você precisa da permissão serviceusage.services.enable. Se você criou o projeto, provavelmente já tem essa permissão pelo papel de proprietário (roles/owner). Caso contrário, é possível receber essa permissão pelo papel de administrador do Service Usage (roles/serviceusage.serviceUsageAdmin). Saiba como conceder papéis.

    Ativar as APIs

Requisitos

Para conferir métricas e painéis de latência de inicialização de cargas de trabalho, o cluster do GKE precisa atender aos seguintes requisitos:

Papéis e permissões necessárias

Para receber as permissões necessárias para ativar a geração de registros e acessar e processar registros, peça ao administrador para conceder a você os seguintes papéis do IAM:

  • Veja clusters do GKE, nós e cargas de trabalho: Leitor do Kubernetes Engine (roles/container.viewer) no seu projeto
  • Acesse as métricas de latência de inicialização e confira os painéis: Leitor do Monitoring (roles/monitoring.viewer) no projeto
  • Acessar registros com informações de latência, como eventos de extração de imagens do Kubelet, e visualizá-los na Análise de Registros e na Análise de Observabilidade: Leitor de registros (roles/logging.viewer) no seu projeto

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias usando papéis personalizados ou outros papéis predefinidos.

Métricas de latência de inicialização

As métricas de latência de inicialização estão incluídas nas métricas do sistema do GKE e são exportadas para o Cloud Monitoring no mesmo projeto que o cluster do GKE.

Os nomes das métricas do Cloud Monitoring nesta tabela precisam ser prefixados com kubernetes.io/. Esse prefixo foi omitido das entradas na tabela.

Tipo de métrica (níveis da hierarquia de recursos)
Nome de exibição
Tipo, Classe, Unidade
Recursos monitorados
Descrição
Rótulos
pod/latencies/pod_first_ready  (projeto)
Latência do primeiro pod pronto
GAUGE, Double, s
k8s_pod
A latência de inicialização de ponta a ponta do pod (do pod Created para Ready), incluindo extrações de imagem. Amostras coletadas a cada 60 segundos.
node/latencies/startup  (projeto)
Latência de inicialização de nós
GAUGE, INT64, s
k8s_node
A latência total de inicialização do nó, do CreationTimestamp da instância do GCE até o Kubernetes node ready pela primeira vez. Amostras coletadas a cada 60 segundos.

accelerator_family: uma classificação de nós com base em aceleradores de hardware: gpu, tpu, cpu.
kube_control_plane_available: se a solicitação de criação do nó foi recebida quando o KCP (plano de controle do kube) estava disponível.
autoscaler/latencies/per_hpa_recommendation_scale_latency_seconds  (projeto)
Latência de escalonamento por recomendação de HPA
GAUGE, DOUBLE, s
k8s_scale
Latência de recomendação de escalonamento do Autoescalonador Horizontal de Pods (HPA, na sigla em inglês) (tempo entre a criação das métricas e a aplicação da recomendação de escalonamento correspondente ao servidor de API) para o destino do HPA. Amostras coletadas a cada 60 segundos. Após a amostragem, os dados não são visíveis por até 20 segundos.

metric_type: o tipo de origem da métrica. Precisa ser um destes: "ContainerResource", "External", "Object", "Pods" ou "Resource".

Acessar o painel de latência de inicialização para cargas de trabalho

O painel Latência de inicialização para cargas de trabalho está disponível apenas para implantações. Para conferir as métricas de latência de inicialização das implantações, siga estas etapas no console do Google Cloud :

  1. Acesse a página Cargas de trabalho.

    Acesse "Cargas de trabalho"

  2. Para abrir a visualização Detalhes da implantação, clique no nome da carga de trabalho que você quer inspecionar.

  3. Clique na guia Observabilidade.

  4. Selecione Latência de inicialização no menu à esquerda.

Ver a distribuição de latência de inicialização de pods

A latência de inicialização dos pods se refere à latência total, incluindo extrações de imagens, que mede o tempo do status Created do pod até o status Ready. É possível avaliar a latência de inicialização dos pods usando os dois gráficos a seguir:

  • Gráfico Distribuição da latência de inicialização do pod: mostra os percentis de latência de inicialização dos pods (50º, 95º e 99º percentis) calculados com base nas observações de eventos de inicialização do pod em intervalos fixos de três horas, por exemplo, de 0h às 3h e de 3h às 6h. Use esse gráfico para:

    • Entenda a latência de inicialização do pod de referência.
    • Identifique mudanças na latência de inicialização do pod ao longo do tempo.
    • Correlacione as mudanças na latência de inicialização do pod com eventos recentes, como implantações de carga de trabalho ou eventos do escalonador automático de cluster. É possível selecionar os eventos na lista Anotações, na parte de cima do painel.
Gráfico de distribuição de latência de inicialização do pod
Figura : gráfico de distribuição de latência de inicialização do pod
  • Gráfico Contagem de inicialização de pods: mostra a contagem de pods iniciados durante os intervalos de tempo selecionados. Você pode usar esse gráfico para os seguintes fins:

    • Entenda os tamanhos de amostra de pod usados para calcular os percentis da distribuição de latência de inicialização de pod em um determinado intervalo de tempo.
    • Entenda as causas das inicializações de pods, como implantações de cargas de trabalho ou eventos do escalonador automático horizontal de pods. Selecione os eventos na lista Anotações na parte de cima do painel.
Gráfico de contagem de inicialização de pods
Figura : gráfico de contagem de inicialização de pods

Ver a latência de inicialização de pods individuais

É possível conferir a latência de inicialização de pods individuais no gráfico de linha do tempo Latência do pod pronto pela primeira vez e na lista associada.

  • Use o gráfico de linha do tempo Latência de primeira prontidão do pod para correlacionar as inicializações de pods individuais com eventos recentes, como eventos do Escalonador automático horizontal de pods ou do escalonador automático de cluster. É possível selecionar esses eventos na lista Anotações, na parte de cima do painel. Esse gráfico ajuda a determinar as possíveis causas de mudanças na latência de inicialização em comparação com outros pods.
  • Use a lista Latência de primeira prontidão do pod para identificar os pods individuais que levaram mais ou menos tempo para serem iniciados. É possível classificar a lista pela coluna Latência. Ao identificar os pods com a maior latência de inicialização, é possível resolver problemas de degradação de latência correlacionando os eventos de início do pod com outros eventos recentes.
Gráfico de latência do primeiro pod pronto
Figura : gráfico de latência do primeiro pod pronto

Para saber quando um pod individual foi criado, confira o valor no campo timestamp em um evento de criação de pod correspondente. Para ver o campo timestamp, execute a seguinte consulta na Análise de registros:

   log_id("cloudaudit.googleapis.com/activity") AND
   protoPayload.methodName="io.k8s.core.v1.pods.create" AND
   resource.labels.project_id=PROJECT_ID AND
   resource.labels.cluster_name=CLUSTER_NAME AND
   resource.labels.location=CLUSTER_LOCATION AND
   protoPayload.response.metadata.namespace=NAMESPACE AND
   protoPayload.response.metadata.name=POD_NAME

Para listar todos os eventos de criação de pods da carga de trabalho, use o seguinte filtro na consulta anterior: protoPayload.response.metadata.name=~"POD_NAME_PREFIX-[a-f0-9]{7,10}-[a-z0-9]{5}"

Ao comparar as latências de pods individuais, é possível testar o impacto de várias configurações na latência de inicialização do pod e identificar uma configuração ideal com base nos seus requisitos.

Determinar a latência de programação de pods

A latência de programação de pods é o tempo entre a criação de um pod e a programação dele em um nó. A latência de programação de pods contribui para o tempo de inicialização de ponta a ponta de um pod e é calculada subtraindo os carimbos de data/hora de um evento de programação de pods e uma solicitação de criação de pods.

É possível encontrar um carimbo de data/hora de um evento de programação de pod individual no campo jsonPayload.eventTime de um evento de programação de pod correspondente. Para ver o campo jsonPayload.eventTime, execute a seguinte consulta na Análise de registros:

  log_id("events")
  jsonPayload.reason="Scheduled"
  resource.type="k8s_pod"
  resource.labels.project_id=PROJECT_ID
  resource.labels.location=CLUSTER_LOCATION
  resource.labels.cluster_name=CLUSTER_NAME
  resource.labels.namespace_name=NAMESPACE
  resource.labels.pod_name=POD_NAME

Para listar todos os eventos de programação de pods da sua carga de trabalho, use o seguinte filtro na consulta anterior: resource.labels.pod_name=~"POD_NAME_PREFIX-[a-f0-9]{7,10}-[a-z0-9]{5}"

Ver a latência de extração de imagens

A latência de extração de imagem do contêiner contribui para a latência de inicialização de pods em cenários em que a imagem ainda não está disponível no nó ou precisa ser atualizada. Ao otimizar a latência de extração de imagens, você reduz a latência de inicialização da carga de trabalho durante eventos de escalonamento horizontal do cluster.

Consulte a tabela Eventos de extração de imagens do Kubelet para saber quando as imagens do contêiner da carga de trabalho foram extraídas e quanto tempo o processo levou.

Tabela de eventos de pull de imagem do kubelet
Figura: tabela de eventos de pull de imagem do Kubelet

A latência de extração de imagem está disponível no campo jsonPayload.message, que contém uma mensagem como esta:

  "Successfully pulled image "gcr.io/example-project/image-name" in 17.093s (33.051s including waiting). Image size: 206980012 bytes."

Ver a distribuição de latência das recomendações de escalonamento do HPA

A latência das recomendações de escalonamento do Escalonador automático horizontal de pods (HPA) para o destino do HPA é o tempo entre a criação das métricas e a aplicação da recomendação de escalonamento correspondente ao servidor de API. Ao otimizar a latência de recomendação de escalonamento do HPA, você reduz a latência de inicialização da carga de trabalho durante eventos de escalonamento horizontal.

O escalonamento do HPA pode ser visualizado nos dois gráficos a seguir:

  • Gráfico Distribuição de latência de recomendações de escalonamento de HPA: mostra os percentis de latência de recomendações de escalonamento de HPA (percentis 50, 95 e 99) calculados com base nas observações de recomendações de escalonamento de HPA em intervalos de 3 horas. Você pode usar esse gráfico para:

    • Entenda a latência de referência da recomendação de escalonamento do HPA.
    • Identificar mudanças na latência das recomendações de escalonamento do HPA ao longo do tempo.
    • Correlacione as mudanças na latência de recomendação de escalonamento do HPA com eventos recentes. Você pode selecionar os eventos na lista Anotações, na parte de cima do painel.
Gráfico de distribuição de latência de recomendações de escalonamento de HPA
Figura : gráfico de distribuição de latência de recomendações de escalonamento de HPA
  • Gráfico Contagem de recomendações de escalonamento do HPA: mostra a contagem de recomendações de escalonamento do HPA observadas durante o intervalo de tempo selecionado. Use o gráfico para as seguintes tarefas:

    • Entenda os tamanhos de amostra de recomendação de escalonamento do HPA. As amostras são usadas para calcular os percentis na distribuição de latência das recomendações de escalonamento do HPA em um determinado intervalo de tempo.
    • Correlacione as recomendações de escalonamento do HPA com novos eventos de inicialização de pod e com eventos do Escalonador automático horizontal de pods. Selecione os eventos na lista Anotações na parte de cima do painel.
Gráfico de contagem de recomendações de escalonamento de HPA
Figura : gráfico de contagem de recomendações de escalonamento de HPA

Ver problemas de programação para pods

Problemas de programação de pods podem afetar a latência de inicialização de ponta a ponta da sua carga de trabalho. Para reduzir a latência de inicialização de ponta a ponta da sua carga de trabalho, resolva e reduza o número desses problemas.

Estes são os dois gráficos disponíveis para rastrear esses problemas:

  • O gráfico Pods não programáveis/pendentes/com falha mostra as contagens de pods não programáveis, pendentes e com falha ao longo do tempo.
  • O gráfico Contêineres com falha de espera/suspensão/prontidão mostra as contagens de contêineres nesses estados ao longo do tempo.

Ver o painel de latência de inicialização dos nós

Para conferir as métricas de latência de inicialização dos nós, siga estas etapas no console doGoogle Cloud :

  1. Acesse a página Clusters do Kubernetes.

    Acesse os clusters do Kubernetes

  2. Para abrir a visualização Detalhes do cluster, clique no nome do cluster que você quer inspecionar.

  3. Clique na guia Observabilidade.

  4. No menu à esquerda, selecione Latência de inicialização.

Ver a distribuição da latência de inicialização dos nós

A latência de inicialização de um nó se refere à latência total de inicialização, que mede o tempo desde o CreationTimestamp do nó até o status Kubernetes node ready. A latência de inicialização do nó pode ser visualizada nos dois gráficos a seguir:

  • Gráfico Distribuição de latência de inicialização do nó: mostra os percentis de latência de inicialização do nó (percentil 50, percentil 95 e percentil 99) calculados com base nas observações de eventos de inicialização do nó em intervalos de tempo fixos de três horas, por exemplo, 0h às 3h e 3h às 6h. Use esse gráfico para as seguintes finalidades:

    • Entenda a latência de inicialização do nó de referência.
    • Identifique mudanças na latência de inicialização do nó ao longo do tempo.
    • Correlacione as mudanças na latência de inicialização do nó com eventos recentes, como atualizações de cluster ou de pool de nós. Selecione os eventos na lista Anotações na parte de cima do painel.
Gráfico de distribuição de latência de inicialização de nós
Figura : gráfico de distribuição de latência de inicialização de nós
  • Gráfico Contagem de inicialização de nós: mostra a contagem de nós iniciados durante os intervalos de tempo selecionados. É possível usar o gráfico para as seguintes finalidades:

    • Entenda os tamanhos de amostra de nós, usados para calcular os percentis de distribuição de latência de inicialização de nós em um determinado intervalo de tempo.
    • Entenda as causas das inicializações de nós, como atualizações do pool de nós ou eventos do escalonador automático de cluster. Selecione os eventos na lista Anotações na parte de cima do painel.
Gráfico de contagem de inicializações de nós
Figura : gráfico de contagem de inicializações de nós

Ver a latência de inicialização de nós individuais

Ao comparar as latências de nós individuais, é possível testar o impacto de várias configurações de nós na latência de inicialização do nó e identificar uma configuração ideal com base nos seus requisitos. É possível conferir a latência de inicialização de nós individuais no gráfico de linha do tempo Latência de inicialização do nó e na lista associada.

  • Use o gráfico de linha do tempo Latência de inicialização do nó para correlacionar as inicializações de nós individuais com eventos recentes, como atualizações de cluster ou de pool de nós. É possível determinar as possíveis causas de mudanças na latência de inicialização em comparação com outros nós. Selecione os eventos na lista Anotações na parte de cima do painel.

  • Use a lista Latência de inicialização do nó para identificar nós individuais que levaram mais ou menos tempo para serem iniciados. É possível classificar a lista pela coluna Latência. Ao identificar os nós com a maior latência de inicialização, é possível resolver problemas de degradação de latência correlacionando eventos de início de nó com outros eventos recentes.

Gráfico de latência de inicialização de nós
Figura: gráfico de latência de inicialização de nós

Para saber quando um nó individual foi criado, consulte o valor do campo protoPayload.metadata.creationTimestamp em um evento de criação de nó correspondente. Para ver o campo protoPayload.metadata.creationTimestamp, execute a seguinte consulta na Análise de registros:

   log_id("cloudaudit.googleapis.com/activity") AND
   protoPayload.methodName="io.k8s.core.v1.nodes.create" AND
   resource.labels.project_id=PROJECT_ID AND
   resource.labels.cluster_name=CLUSTER_NAME AND
   resource.labels.location=CLUSTER_LOCATION AND
   protoPayload.response.metadata.name=NODE_NAME

Ver a latência de inicialização em um pool de nós

Se os pools de nós tiverem configurações diferentes, por exemplo, para executar cargas de trabalho diferentes, talvez seja necessário monitorar a latência de inicialização de nós separadamente por pools de nós. Ao comparar as latências de inicialização de nós nos pools de nós, você pode ter insights sobre como a configuração de nós impacta a latência de inicialização de nós e, consequentemente, otimizar a latência.

Por padrão, o painel Latência de inicialização do nó mostra a distribuição agregada de latência de inicialização e as latências de inicialização de nós individuais em todos os pools de nós em um cluster. Para conferir a latência de inicialização de um pool de nós específico, selecione o nome dele usando o filtro $node_pool_name_var localizado na parte de cima do painel.

A seguir