Questa pagina mostra come risolvere i problemi relativi alle metriche di sistema nei cluster Google Kubernetes Engine (GKE).
Le metriche del cluster non vengono visualizzate in Cloud Monitoring
Assicurati di aver abilitato l'API Monitoring e l'API Logging nel tuo progetto. Devi anche verificare di poter visualizzare il tuo progetto nella panoramica di Cloud Monitoring nella consoleGoogle Cloud .
Se il problema persiste, controlla le seguenti potenziali cause:
Hai abilitato il monitoraggio sul tuo cluster?
Il monitoraggio è attivato per impostazione predefinita per i cluster creati dalla console Google Cloud e da Google Cloud CLI, ma puoi verificarlo facendo clic sui dettagli del cluster nella console Google Cloud eseguendo il comando seguente:
gcloud container clusters describe CLUSTER_NAME
L'output di questo comando deve includere
SYSTEM_COMPONENTS
nell'elenco dienableComponents
nella sezionemonitoringConfig
, in modo simile all'esempio seguente:monitoringConfig: componentConfig: enableComponents: - SYSTEM_COMPONENTS
Se il monitoraggio non è abilitato, esegui questo comando per abilitarlo:
gcloud container clusters update CLUSTER_NAME --monitoring=SYSTEM
Da quanto tempo è stato creato il cluster o è stato attivato il monitoraggio?
Potrebbe essere necessaria fino a un'ora prima che le metriche di un nuovo cluster inizino a essere visualizzate in Cloud Monitoring.
Nel tuo cluster è in esecuzione un
heapster
o ungke-metrics-agent
(il raccoglitore OpenTelemetry) nello spazio dei nomikube-system
?Questo pod potrebbe non riuscire a pianificare i carichi di lavoro perché il tuo cluster ha poche risorse. Controlla se Heapster o OpenTelemetry è in esecuzione eseguendo
kubectl get pods --namespace=kube-system
e controllando i pod conheapster
ogke-metrics-agent
nel nome.Il control plane del cluster è in grado di comunicare con i nodi?
Cloud Monitoring si basa su questa comunicazione. Puoi verificare se il control plane comunica con i nodi eseguendo il seguente comando:
kubectl logs POD_NAME
Se questo comando restituisce un errore, i tunnel SSH potrebbero essere la causa del problema. Per la procedura di risoluzione dei problemi, consulta Risolvere i problemi relativi a SSH.
Identificare e risolvere i problemi di autorizzazione per la scrittura delle metriche
GKE utilizza i service account IAM collegati ai nodi per
eseguire attività di sistema come il logging e il monitoraggio. Come minimo, questi service account nodo
devono avere il ruolo
Kubernetes Engine Default Node Service Account
(roles/container.defaultNodeServiceAccount
) sul tuo progetto. Per impostazione predefinita,
GKE utilizza l'account di servizio predefinito di Compute Engine,
che viene creato automaticamente nel tuo progetto, come service account del nodo.
Se la tua organizzazione applica il
vincolo di policy dell'organizzazione iam.automaticIamGrantsForDefaultServiceAccounts
, ilaccount di serviziot Compute Engine predefinito nel tuo progetto potrebbe
non ottenere automaticamente le autorizzazioni richieste per GKE.
Per identificare il problema, verifica la presenza di errori
401
nel carico di lavoro di monitoraggio del sistema nel 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 l'output è
true
, il carico di lavoro del sistema presenta errori 401, che indicano una mancanza di autorizzazioni. Se l'output èfalse
, salta il resto di questi passaggi e prova una procedura di risoluzione dei problemi diversa.
Per concedere il ruolo roles/container.defaultNodeServiceAccount
al account di servizio predefinito di Compute Engine, completa i seguenti passaggi:
console
- Vai alla pagina Benvenuto:
- Nel campo Numero progetto, fai clic su Copia negli appunti.
- Vai alla pagina IAM:
- Fai clic su Concedi l'accesso.
- Nel campo Nuove entità, specifica il seguente valore:
SostituisciPROJECT_NUMBER-compute@developer.gserviceaccount.com
PROJECT_NUMBER
con il numero di progetto che hai copiato. - Nel menu Seleziona un ruolo, seleziona il ruolo Service account predefinito del nodo Kubernetes Engine.
- Fai clic su Salva.
gcloud
- Trova il numero del tuo progetto Google Cloud :
gcloud projects describe PROJECT_ID \ --format="value(projectNumber)"
Sostituisci
PROJECT_ID
con l'ID progetto.L'output è simile al seguente:
12345678901
- Concedi il ruolo
roles/container.defaultNodeServiceAccount
all'account di servizio predefinito di Compute Engine:gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \ --role="roles/container.defaultNodeServiceAccount"
Sostituisci
PROJECT_NUMBER
con il numero di progetto del passaggio precedente.
Verifica che l'agente delle metriche disponga di memoria sufficiente
Se hai provato i passaggi per la risoluzione dei problemi precedenti e le metriche non vengono ancora visualizzate, l'agente delle metriche potrebbe avere memoria insufficiente.
Nella maggior parte dei casi, l'allocazione predefinita delle risorse all'agente delle metriche GKE è sufficiente. Tuttavia, se il DaemonSet si arresta in modo anomalo ripetutamente, puoi controllare il motivo dell'arresto anomalo seguendo queste istruzioni:
Recupera i nomi dei pod dell'agente delle metriche GKE:
kubectl get pods -n kube-system -l component=gke-metrics-agent
Trova il pod con lo stato
CrashLoopBackOff
.L'output è simile al seguente:
NAME READY STATUS RESTARTS AGE gke-metrics-agent-5857x 0/1 CrashLoopBackOff 6 12m
Descrivi il pod con lo stato
CrashLoopBackOff
:kubectl describe pod POD_NAME -n kube-system
Sostituisci
POD_NAME
con il nome del pod del passaggio precedente.Se il motivo dell'arresto del pod è
OOMKilled
, l'agente ha bisogno di memoria aggiuntiva.L'output è simile al seguente:
containerStatuses: ... lastState: terminated: ... exitCode: 1 finishedAt: "2021-11-22T23:36:32Z" reason: OOMKilled startedAt: "2021-11-22T23:35:54Z"
Aggiungi un'etichetta di nodo al nodo con l'agente delle metriche non funzionante. Puoi utilizzare un'etichetta del nodo permanente o temporanea. Ti consigliamo di provare ad aggiungere altri 20 MB. Se l'agente continua ad arrestarsi in modo anomalo, puoi eseguire di nuovo questo comando, sostituendo l'etichetta del nodo con una che richiede una quantità maggiore di memoria aggiuntiva.
Per aggiornare un pool di nodi con un'etichetta persistente, esegui il comando seguente:
gcloud container node-pools update NODEPOOL_NAME \ --cluster=CLUSTER_NAME \ --node-labels=ADDITIONAL_MEMORY_NODE_LABEL \ --location=COMPUTE_LOCATION
Sostituisci quanto segue:
NODEPOOL_NAME
: il nome del pool di nodi.CLUSTER_NAME
: il nome del cluster esistente.ADDITIONAL_MEMORY_NODE_LABEL
: una delle etichette aggiuntive del nodo di memoria; utilizza uno dei seguenti valori:- Per aggiungere 10 MB:
cloud.google.com/gke-metrics-agent-scaling-level=10
- Per aggiungere 20 MB:
cloud.google.com/gke-metrics-agent-scaling-level=20
- Per aggiungere 50 MB:
cloud.google.com/gke-metrics-agent-scaling-level=50
- Per aggiungere 100 MB:
cloud.google.com/gke-metrics-agent-scaling-level=100
- Per aggiungere 200 MB:
cloud.google.com/gke-metrics-agent-scaling-level=200
- Per aggiungere 500 MB:
cloud.google.com/gke-metrics-agent-scaling-level=500
- Per aggiungere 10 MB:
COMPUTE_LOCATION
: la posizione di Compute Engine del cluster.
In alternativa, puoi aggiungere un'etichetta del nodo temporanea che non rimarrà dopo un upgrade utilizzando il seguente comando:
kubectl label node/NODE_NAME \ ADDITIONAL_MEMORY_NODE_LABEL --overwrite
Sostituisci quanto segue:
NODE_NAME
: il nome del nodo dell'agente di raccolta delle metriche interessato.ADDITIONAL_MEMORY_NODE_LABEL
: una delle etichette aggiuntive del nodo di memoria; utilizza uno dei valori dell'esempio precedente.
Passaggi successivi
Se riscontri un problema relativo all'agente Cloud Logging, consulta la relativa documentazione per la risoluzione dei problemi.
Se non riesci a trovare una soluzione al tuo problema nella documentazione, consulta la sezione Richiedere assistenza per ulteriore aiuto, inclusi consigli sui seguenti argomenti:
- Aprire una richiesta di assistenza contattando l'assistenza clienti cloud.
- Ricevere assistenza dalla community
ponendo domande su StackOverflow e utilizzando il tag
google-kubernetes-engine
per cercare problemi simili. Puoi anche unirti al canale Slack#kubernetes-engine
per ulteriore assistenza della community. - Apertura di bug o richieste di funzionalità utilizzando lo strumento di monitoraggio dei problemi pubblico.