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.
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:
- É necessário ter o GKE versão 1.31.1-gke.1678000 ou mais recente.
- É preciso configurar a coleta de métricas do sistema.
- É preciso configurar a coleta de registros do sistema.
- Ative as métricas de estado do kube com
o componente
PODnos clusters para conferir as métricas de pod e contêiner.
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 :
Acesse a página Cargas de trabalho.
Para abrir a visualização Detalhes da implantação, clique no nome da carga de trabalho que você quer inspecionar.
Clique na guia Observabilidade.
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 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.
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.
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.
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 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.
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 :
Acesse a página Clusters do Kubernetes.
Para abrir a visualização Detalhes do cluster, clique no nome do cluster que você quer inspecionar.
Clique na guia Observabilidade.
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 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.
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.
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
- Compare as estratégias para reduzir a latência de inicialização.
- Saiba como acelerar a inicialização de aplicativos usando a otimização de CPU de inicialização.
- Saiba mais sobre maneiras de reduzir a latência de inicialização a frio no GKE.
- Saiba como reduzir a latência de extração de imagens com o streaming de imagens.
- Saiba mais sobre a economia surpreendente do ajuste do escalonamento automático horizontal de pods.
- Monitore suas cargas de trabalho com o monitoramento automático de aplicativos.