Risoluzione dei problemi relativi al server delle metriche nei cluster di Kubernetes

Scopri come eseguire il debug e risolvere i problemi più comuni relativi al metrics-server nel tuo cluster di Kubernetes, inclusi sintomi, cause e procedura dettagliata.

Virtual Private Cloud Infrastruttura classica

I seguenti sintomi potrebbero indicare la necessità di regolare le risorse metrics-server:

  • Il metrics-server viene riavviato frequentemente.

  • L'eliminazione di uno spazio dei nomi provoca il blocco dello spazio dei nomi in uno stato Terminating e kubectl describe namespace include una condizione che riporta un errore di rilevamento API delle metriche.

  • kubectl top pods, kubectl top nodes, altri comandi kubectl o applicazioni che utilizzano l'API Kubernetes per registrare gli errori Kubernetes come:

    The server is currently unable to handle the request (get pods.metrics.k8s.io)
    
    Discovery failed for some groups, 1 failing: unable to retrieve the complete list of server APIs: metrics.k8s.io/v1beta1: the server is currently unable to handle the request
    
  • HorizontalPodAutoscalers (HPA) non scalano le distribuzioni.

  • L'esecuzione di kubectl get apiservices v1beta1.metrics.k8s.io determina uno stato come:

    NAME                     SERVICE                      AVAILABLE                      AGE
    v1beta1.metrics.k8s.io   kube-system/metrics-server   False (FailedDiscoveryCheck)   139d
    

Il tuo cluster ha un servizio di metrica fornito dalla distribuzione metrics-server nello spazio dei nomi kube-system. I limiti e le richieste della risorsa metrics-server si basano sul numero di nodi nel cluster e sono ottimizzati per i cluster con 30 o meno pod per nodo di lavoro. Se le richieste di memoria sono troppo basse, possono avere esito negativo con errori di memoria esaurita e possono rispondere molto lentamente. Se le richieste di CPU sono troppo basse, è possibile che le analisi di disponibilità e di attività non riescano a causa della limitazione della CPU.

I problemi con metrics-server possono anche causare problemi in altre aree. Le API delle metriche non sono disponibili se il piano di controllo non è in grado di comunicare con il server delle metriche utilizzando Konnectivity. I webhook di controllo di ammissione possono impedire al piano di controllo di creare i pod, incluso il pod metrics-server.

Seguire questa procedura per risolvere i problemi.

  1. Verificare che i pod del server delle metriche esistano.

    kubectl get pod -n kube-system -l k8s-app=metrics-server
    

    Se non viene elencato alcun pod, è probabile che si sia verificato un problema con un webhook admission-control. Vedi Perché le operazioni del cluster non riescono a causa di un webhook interrotto?.

  2. Verifica che l'apiserver possa connettersi a metrics-server.

    kubectl logs POD -n kube-system -c metrics-server --tail 5
    

    Sostituisci POD con il nome del pod mostrato in precedenza. Il contenuto dei log restituiti non ha importanza.

    Se si riceve un messaggio di errore che contiene testo come <workerIP>:10250: getsockopt: connection timed out, consultare kubectl timeout dei comandi.

  3. Se i passi precedenti non mostrano un problema, regolare le risorse per metrics-server. Consultare Regolazione delle risorse del fornitore delle metriche del cluster.