Esta página mostra como resolver problemas relacionados com métricas do sistema nos seus clusters do Google Kubernetes Engine (GKE).
As métricas do seu cluster não aparecem no Cloud Monitoring
Certifique-se de que ativou a API Monitoring e a API Logging no seu projeto. Também deve confirmar que consegue ver o seu projeto na vista geral do Cloud Monitoring na Google Cloud consola.
Se o problema persistir, verifique as seguintes potenciais causas:
Ativou a monitorização no seu cluster?
A monitorização está ativada por predefinição para clusters criados a partir da Google Cloud consola e da CLI Google Cloud, mas pode verificar clicando nos detalhes do cluster na Google Cloud consola executando o seguinte comando:
gcloud container clusters describe CLUSTER_NAME
O resultado deste comando deve incluir
SYSTEM_COMPONENTS
na lista deenableComponents
na secçãomonitoringConfig
, semelhante ao seguinte exemplo:monitoringConfig: componentConfig: enableComponents: - SYSTEM_COMPONENTS
Se a monitorização não estiver ativada, execute o seguinte comando para a ativar:
gcloud container clusters update CLUSTER_NAME --monitoring=SYSTEM
Há quanto tempo é que o seu cluster foi criado ou tem a monitorização ativada?
As métricas de um novo cluster podem demorar até uma hora a começar a ser apresentadas no Cloud Monitoring.
Um
heapster
ou umgke-metrics-agent
(o OpenTelemetry Collector) está a ser executado no seu cluster no espaço de nomeskube-system
?Este pod pode não estar a conseguir agendar cargas de trabalho porque o seu cluster tem poucos recursos. Verifique se o Heapster ou o OpenTelemetry está a ser executado executando
kubectl get pods --namespace=kube-system
e verificando se existem pods comheapster
ougke-metrics-agent
no nome.O painel de controlo do cluster consegue comunicar com os nós?
O Cloud Monitoring depende dessa comunicação. Pode verificar se o plano de controlo está a comunicar com os nós executando o seguinte comando:
kubectl logs POD_NAME
Se este comando devolver um erro, os túneis SSH podem estar a causar o problema. Para ver os passos de resolução de problemas, consulte o artigo Resolva problemas de SSH.
Identifique e corrija problemas de autorizações para escrever métricas
O GKE usa contas de serviço da IAM anexadas aos seus nós para
executar tarefas do sistema, como registo e monitorização. No mínimo, estas contas de serviço de nós
têm de ter a função
Conta de serviço de nós predefinida do Kubernetes Engine
(roles/container.defaultNodeServiceAccount
) no seu projeto. Por predefinição,
o GKE usa a
conta de serviço predefinida do Compute Engine,
que é criada automaticamente no seu projeto, como a conta de serviço do nó.
Se a sua organização aplicar a restrição da política da organização iam.automaticIamGrantsForDefaultServiceAccounts
, a conta de serviço do Compute Engine predefinida no seu projeto pode não receber automaticamente as autorizações necessárias para o GKE.
Para identificar o problema, verifique se existem erros
401
na carga de trabalho de monitorização do sistema no seu 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 o resultado for
true
, significa que a carga de trabalho do sistema está a ter erros 401, o que indica uma falta de autorizações. Se o resultado forfalse
, ignore os restantes passos e experimente um procedimento de resolução de problemas diferente.
Para conceder a função roles/container.defaultNodeServiceAccount
à conta de serviço predefinida do Compute Engine, conclua os passos seguintes:
consola
- Aceda à página Boas-vindas:
- No campo Número do projeto, clique em Copiar para a área de transferência.
- Aceda à página IAM:
- Clique em Conceder acesso.
- No campo Novos responsáveis, especifique o seguinte valor:
SubstituaPROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_NUMBER
pelo número do projeto que copiou. - No menu Selecionar uma função, selecione a função Conta de serviço do nó predefinido do Kubernetes Engine.
- Clique em Guardar.
gcloud
- Encontre o seu Google Cloud número do projeto:
gcloud projects describe PROJECT_ID \ --format="value(projectNumber)"
Substitua
PROJECT_ID
pelo ID do seu projeto.O resultado é semelhante ao seguinte:
12345678901
- Conceda a função
roles/container.defaultNodeServiceAccount
à conta de serviço predefinida 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 do passo anterior.
Confirme se o agente de métricas tem memória suficiente
Se tiver tentado os passos de resolução de problemas anteriores e as métricas continuarem a não ser apresentadas, o agente de métricas pode ter memória insuficiente.
Na maioria dos casos, a atribuição predefinida de recursos ao agente de métricas do GKE é suficiente. No entanto, se o DaemonSet falhar repetidamente, pode verificar o motivo do encerramento com as seguintes instruções:
Obtenha 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 estado
CrashLoopBackOff
.O resultado é semelhante ao seguinte:
NAME READY STATUS RESTARTS AGE gke-metrics-agent-5857x 0/1 CrashLoopBackOff 6 12m
Descreva o pod que tem o estado
CrashLoopBackOff
:kubectl describe pod POD_NAME -n kube-system
Substitua
POD_NAME
pelo nome do Pod do passo anterior.Se o motivo do encerramento do Pod for
OOMKilled
, o agente precisa de memória adicional.O resultado é semelhante ao seguinte:
containerStatuses: ... lastState: terminated: ... exitCode: 1 finishedAt: "2021-11-22T23:36:32Z" reason: OOMKilled startedAt: "2021-11-22T23:35:54Z"
Adicione uma etiqueta de nó ao nó com o agente de métricas com falhas. Pode usar uma etiqueta de nó persistente ou temporária. Recomendamos que tente adicionar mais 20 MB. Se o agente continuar a falhar, pode executar este comando novamente, substituindo a etiqueta do nó por uma que peça uma quantidade superior de memória adicional.
Para atualizar um node pool com uma etiqueta 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 o seguinte:
NODEPOOL_NAME
: o nome do node pool.CLUSTER_NAME
: o nome do cluster existente.ADDITIONAL_MEMORY_NODE_LABEL
: uma das etiquetas de nós de memória adicionais; 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
: a localização do Compute Engine do cluster.
Em alternativa, pode adicionar uma etiqueta de nó temporária que não persista após uma atualização através do seguinte comando:
kubectl label node/NODE_NAME \ ADDITIONAL_MEMORY_NODE_LABEL --overwrite
Substitua o seguinte:
NODE_NAME
: o nome do nó do agente de métricas afetado.ADDITIONAL_MEMORY_NODE_LABEL
: uma das etiquetas de nós de memória adicionais; use um dos valores do exemplo anterior.
O que se segue?
Se tiver um problema relacionado com o agente do Cloud Logging, consulte a respetiva documentação de resolução de problemas.
Se não conseguir encontrar uma solução para o seu problema na documentação, consulte a secção Obtenha apoio técnico para receber mais ajuda, incluindo aconselhamento sobre os seguintes tópicos:
- Abrindo um registo de apoio ao cliente através do contacto com o Cloud Customer Care.
- Receber apoio técnico da comunidade fazendo perguntas no StackOverflow e usando a etiqueta
google-kubernetes-engine
para pesquisar problemas semelhantes. Também pode juntar-se ao#kubernetes-engine
canal do Slack para receber mais apoio técnico da comunidade. - Abrir erros ou pedidos de funcionalidades através do rastreador de problemas público.