Esta página mostra como resolver problemas relacionados às métricas do sistema nos clusters do Google Kubernetes Engine (GKE).
As métricas do cluster não aparecem no Cloud Monitoring
Verifique se você ativou a API Monitoring e a API Logging no projeto. Você também precisa confirmar que consegue acessar o projeto na Visão geral do monitoramento do Cloud no console doGoogle Cloud .
Se o problema continuar, verifique estas possíveis causas:
Você ativou o monitoramento no cluster?
O monitoramento é ativado por padrão para clusters criados no console Google Cloud e na Google Cloud CLI, mas você pode conferir isso clicando nos detalhes do cluster no console Google Cloud e executando o seguinte comando:
gcloud container clusters describe CLUSTER_NAME
A saída desse comando precisa incluir
SYSTEM_COMPONENTS
na lista deenableComponents
na seçãomonitoringConfig
, semelhante ao exemplo abaixo:monitoringConfig: componentConfig: enableComponents: - SYSTEM_COMPONENTS
Se o monitoramento não estiver ativado, execute o seguinte comando para ativá-lo:
gcloud container clusters update CLUSTER_NAME --monitoring=SYSTEM
Quanto tempo faz desde que o cluster foi criado ou que o monitoramento foi ativado?
Pode levar até uma hora para que as métricas de um novo cluster comecem a aparecer no Cloud Monitoring.
Um
heapster
ougke-metrics-agent
(o coletor do OpenTelemetry) está em execução no cluster no namespacekube-system
?Talvez esse pod não consiga programar cargas de trabalho porque o cluster pode estar com poucos recursos. Confira se o Heapster ou o OpenTelemetry está em execução, executando
kubectl get pods --namespace=kube-system
e verificando os pods comheapster
ougke-metrics-agent
no nome.O plano de controle do cluster pode se comunicar com os nós?
O Cloud Monitoring depende dessa comunicação. Para verificar se o plano de controle está se comunicando com os nós, execute o seguinte comando:
kubectl logs POD_NAME
Se esse comando retornar um erro, os túneis SSH podem estar causando o problema. Para ver as etapas de solução de problemas, consulte Resolver problemas de SSH.
Identificar e corrigir problemas de permissões para gravar métricas
O GKE usa contas de serviço do IAM anexadas aos nós para
executar tarefas do sistema, como geração de registros e monitoramento. No mínimo, essas contas de serviço de nó
precisam ter o papel
Conta de serviço de nó padrão do Kubernetes Engine
(roles/container.defaultNodeServiceAccount
) no seu projeto. Por padrão, o GKE usa a conta de serviço padrão do Compute Engine, que é criada automaticamente no seu projeto, como a conta de serviço do nó.
Se a organização aplicar a restrição da política da organização iam.automaticIamGrantsForDefaultServiceAccounts
, a conta de serviço padrão do Compute Engine no projeto talvez não receba automaticamente as permissões necessárias para o GKE.
Para identificar o problema, verifique se há erros de
401
na carga de trabalho de monitoramento do sistema no cluster:[[ $(kubectl logs -l k8s-app=gke-metrics-agent -n kube-system -c gke-metrics-agent | grep -cw "Received 401") -gt 0 ]] && echo "true" || echo "false"
Se a saída for
true
, a carga de trabalho do sistema estará apresentando erros 401, o que indica falta de permissões. Se a saída forfalse
, pule o restante destas etapas e tente outro procedimento de solução de problemas.
Para conceder o papel roles/container.defaultNodeServiceAccount
à conta de serviço padrão do Compute Engine, siga estas etapas:
Console
- Acesse a página Boas-vindas:
- No campo Número do projeto, clique em Copiar para a área de transferência.
- Acesse a página do IAM:
- Clique em CONCEDER ACESSO.
- No campo Novos principais, especifique o seguinte valor:
SubstituaPROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_NUMBER
pelo número do projeto que você copiou. - No menu Selecionar um papel, escolha o papel Conta de serviço de nó padrão do Kubernetes Engine.
- Clique em Salvar.
gcloud
- Encontre o número do seu projeto Google Cloud :
gcloud projects describe PROJECT_ID \ --format="value(projectNumber)"
Substitua
PROJECT_ID
pela ID do seu projeto.O resultado será assim:
12345678901
- Conceda o papel
roles/container.defaultNodeServiceAccount
à conta de serviço padrão do Compute Engine:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role="roles/container.defaultNodeServiceAccount"
Substitua
PROJECT_NUMBER
pelo número do projeto da etapa anterior.
Confirmar se o agente de métricas tem memória suficiente
Se você já tentou as etapas de solução de problemas anteriores e as métricas ainda não estão aparecendo, o agente de métricas pode ter memória insuficiente.
Na maioria dos casos, a alocação padrão de recursos para o agente de métricas do GKE é suficiente. No entanto, se o DaemonSet falhar repetidamente, verifique o motivo do encerramento com as seguintes instruções:
Consiga os nomes dos pods do agente de métricas do GKE:
kubectl get pods -n kube-system -l component=gke-metrics-agent
Encontre o pod com o status
CrashLoopBackOff
.O resultado será assim:
NAME READY STATUS RESTARTS AGE gke-metrics-agent-5857x 0/1 CrashLoopBackOff 6 12m
Descreva o pod com o status
CrashLoopBackOff
:kubectl describe pod POD_NAME -n kube-system
Substitua o
POD_NAME
pelo nome do pod da etapa anterior.Se o motivo do encerramento do pod for
OOMKilled
, o agente vai precisar de mais memória.O resultado será assim:
containerStatuses: ... lastState: terminated: ... exitCode: 1 finishedAt: "2021-11-22T23:36:32Z" reason: OOMKilled startedAt: "2021-11-22T23:35:54Z"
Adicionar um identificador de nó temporário ao nó com o agente de métricas com falha. É possível usar um identificador de nó permanente ou temporário. Recomendamos adicionar 20 MB a mais. Se o agente continuar falhando, execute novamente esse comando, substituindo o rótulo do nó por um que solicite uma quantidade maior de memória.
Para atualizar um pool de nós com um identificador persistente, execute o seguinte comando:
gcloud container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --node-labels=ADDITIONAL_MEMORY_NODE_LABEL \ --location=COMPUTE_LOCATION
Substitua:
NODEPOOL_NAME
: o nome do pool de nós.CLUSTER_NAME
: o nome do cluster existente.ADDITIONAL_MEMORY_NODE_LABEL
: um dos outros identificadores de nó de memória, use um dos seguintes valores:- Para adicionar 10 MB:
cloud.google.com/gke-metrics-agent-scaling-level=10
- Para adicionar 20 MB:
cloud.google.com/gke-metrics-agent-scaling-level=20
- Para adicionar 50 MB:
cloud.google.com/gke-metrics-agent-scaling-level=50
- Para adicionar 100 MB:
cloud.google.com/gke-metrics-agent-scaling-level=100
- Para adicionar 200 MB:
cloud.google.com/gke-metrics-agent-scaling-level=200
- Para adicionar 500 MB:
cloud.google.com/gke-metrics-agent-scaling-level=500
- Para adicionar 10 MB:
COMPUTE_LOCATION
: o local do Compute Engine do cluster.
Como alternativa, adicione um rótulo de nó temporário que não seja mantido após um upgrade usando o seguinte comando:
kubectl label node/NODE_NAME \ ADDITIONAL_MEMORY_NODE_LABEL --overwrite
Substitua:
NODE_NAME
: o nome do nó do agente de métricas afetado.ADDITIONAL_MEMORY_NODE_LABEL
: um dos outros identificadores de nó de memória, use um dos valores do exemplo anterior.
A seguir
Se você tiver um problema relacionado ao agente do Cloud Logging, consulte a documentação de solução de problemas.
Se você não encontrar uma solução para seu problema na documentação, consulte Receber suporte para mais ajuda, incluindo conselhos sobre os seguintes tópicos:
- Abrir um caso de suporte entrando em contato com o Cloud Customer Care.
- Receber suporte da comunidade fazendo perguntas no StackOverflow e usando a tag
google-kubernetes-engine
para pesquisar problemas semelhantes. Você também pode participar do canal do Slack#kubernetes-engine
para receber mais suporte da comunidade. - Abrir bugs ou solicitações de recursos usando o Issue Tracker público.