Monitorar as 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 de cargas de trabalho do Google Kubernetes Engine (GKE) e dos nós do cluster subjacentes. É possível usar 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 referenciados no conteúdo Google Cloud , consulte Tarefas e papéis de usuário comuns do GKE Enterprise.

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.

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

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

Antes de começar

Antes de começar, veja se você realizou as seguintes tarefas:

  • Ative a API Google Kubernetes Engine.
  • Ativar a API Google Kubernetes Engine
  • Se você quiser usar a CLI do Google Cloud para essa tarefa, instale e, em seguida, inicialize a CLI gcloud. Se você instalou a gcloud CLI anteriormente, instale a versão mais recente executando gcloud components update.
  • Ative as APIs Cloud Logging e Cloud Monitoring.

    Enable the 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:

  • Acessar clusters, nós e cargas de trabalho do GKE: Visualizador 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 seu projeto
  • Acesse os registros com informações de latência, como eventos de extração de imagem do Kubelet, e acesse-os no Logs Explorer e na Análise de registros: Visualizador 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 por meio de papéis personalizados ou de outros papéis predefinidos.

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

As métricas de latência de inicialização sã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(project)
Latência do primeiro pod pronto
GAUGEDoubles
k8s_pod
A latência de inicialização completa do pod (do Created ao Ready), incluindo extrações de imagem. Amostras coletadas a cada 60 segundos.
node/latencies/startup(project)
Latência de inicialização do nó
GAUGEINT64s
k8s_node
A latência total de inicialização do nó, da CreationTimestamp da instância do GCE para a 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 de 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 de recomendação de HPA
GAUGEDOUBLEs
k8s_scale
Latência da recomendação de escalonamento do escalonador automático 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 "ContainerResource", "External", "Object", "Pods" ou "Resource".

Conferir o painel "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.

Conferir a distribuição de latência de inicialização dos pods

A latência de inicialização dos pods se refere à latência total de inicialização, incluindo extrações de imagem, 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 seguintes gráficos:

  • Gráfico Distribuição de latência de inicialização de pods: mostra os percentis de latência de inicialização de pods (percentil 50, 95 e 99) calculados com base nas observações de eventos de inicialização de pods em intervalos fixos de três horas, por exemplo, 12h-15h e 15h-18h. Você pode usar 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 "Distribuição de latência de inicialização do pod"
Figura: gráfico de distribuição da latência de inicialização do pod
  • Gráfico Contagem de inicialização de pods: mostra a contagem de pods que foram iniciados durante os intervalos de tempo selecionados. Use este 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 para um determinado intervalo de tempo.
    • Entenda as causas de inicializações de pods, como implantações de cargas de trabalho ou eventos do escalonador automático horizontal de pods. Você pode selecionar 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

Conferir 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 de primeiro estado pronto do pod e na lista associada.

  • Use o gráfico de linha Latência de primeiro estado pronto do pod para correlacionar as inicializações de pods individuais com eventos recentes, como o Autoescalador de pods horizontal ou o Autoescalador de cluster. É possível selecionar esses eventos na lista Anotações na parte de cima do painel. Esse gráfico ajuda a determinar possíveis causas de qualquer mudança na latência de inicialização em comparação com outros pods.
  • Use a lista Latência de inicialização do pod para identificar pods individuais que levaram mais ou menos tempo para serem inicializados. Você pode classificar a lista pela coluna Latência. Quando você identifica 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 descobrir quando um pod foi criado, verifique o valor no campo timestamp em um evento de criação de pod correspondente. Para conferir o campo timestamp, execute a consulta a seguir no Explorador 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 sua 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 da programação de pods

A latência de programação de pods é o tempo entre a criação e a programação de um pod em um nó. A latência da 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 em um evento de programação de pod correspondente. Para conferir o campo jsonPayload.eventTime, execute a consulta a seguir no Explorador 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 para 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}"

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

A latência de extração da imagem do contêiner contribui para a latência de inicialização do pod 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 imagem, você reduz a latência de inicialização da carga de trabalho durante eventos de escalonamento do cluster.

É possível consultar a tabela Kubelet Image Pull Events 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 pull 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."

Conferir a distribuição de latência das recomendações de escalonamento de 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 da API. Ao otimizar a latência da recomendação de escalonamento do HPA, você reduz a latência de inicialização da carga de trabalho durante eventos de escalonamento.

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

  • Gráfico Distribuição de latência de recomendação de escalonamento de HPA: mostra os percentis de latência de recomendação de escalonamento de HPA (percentil 50, 95 e 99) calculados com base nas observações de recomendações de escalonamento de HPA em intervalos de 3 horas. É possível usar este gráfico para os seguintes propósitos:

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

    • Entenda os tamanhos de amostra das recomendações 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 para um determinado intervalo de tempo.
    • Correlacione as recomendações de escalonamento do HPA com novos eventos de inicialização de pods e com eventos do Escalonador automático horizontal de pods. Você pode selecionar 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

Conferir problemas de programação de 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.

Confira abaixo os dois gráficos disponíveis para acompanhar 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.

Conferir 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 do Google 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.

Conferir 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 seguintes dois gráficos:

  • 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, 95 e 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, 12h-15h e 15h-18h. É possível usar esse gráfico para os seguintes fins:

    • 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 do pool de nós. É 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 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 os seguintes fins:

    • Entenda os tamanhos de amostra de nó usados para calcular os percentis de distribuição de latência de inicialização de nó para um determinado intervalo de tempo.
    • Entenda as causas de inicializações de nós, como atualizações do pool de nós 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 contagem de inicializações de nós
Figura: gráfico de contagem de inicializações de nós

Conferir 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ó 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 Latência de inicialização de nó para correlacionar inicializações de nó 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. É possível selecionar os eventos na lista Anotações na parte de cima do painel.

  • Use a lista Latência de inicialização do nó para identificar os nós individuais que levaram mais ou menos tempo para serem iniciados. Você pode classificar a lista pela coluna Latência. Ao identificar nós com a maior latência de inicialização, é possível resolver problemas de degradação de latência correlacionando eventos de inicialização de nós 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 descobrir quando um nó individual foi criado, verifique o valor do campo protoPayload.metadata.creationTimestamp em um evento de criação de nó correspondente. Para conferir o campo protoPayload.metadata.creationTimestamp, execute a seguinte consulta no Explorador 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

Conferir 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 diferentes cargas de trabalho, talvez seja necessário monitorar a latência de inicialização do nó separadamente por pools de nós. Ao comparar as latências de inicialização de nós nos pools, você pode entender como a configuração do nó afeta a latência de inicialização e, conseqüentemente, otimizar a latência.

Por padrão, o painel Node Startup Latency mostra a distribuição agregada de latência de inicialização e as latências de inicialização de nó 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 do pool usando o filtro $node_pool_name_var, localizado na parte de cima do painel.

A seguir