PerfectScale
Kubectl Top Pod: monitorare l'uso di CPU e memoria in Kubernetes
Questa pagina è disponibile anche in English, Deutsch, Español, Français, 日本語 e Português.
About Josh Palmer
Head of Content
I'm Josh Palmer, Head of Content at DoiT, where I split my time across multiple business units including DoiT Cloud Intelligence, PerfectScale (Kubernetes cost optimization), and SELECT (Snowflake, Databricks, and BigQuery cost optimization). Before DoiT, I spent four and a half years at OnBoard building content for a board intelligence platform used by 6,000+ organizations, and before that, two years as Content Marketing Manager at Zylo, a SaaS management platform.
My personal pageIn breve: kubectl top pod fornisce un'istantanea in tempo reale dell'utilizzo di CPU (millicore) e memoria (Mi/Gi) per ciascun pod, grazie al Metrics Server. È utile per individuare i pod che consumano più risorse, ordinare i risultati con --sort-by=cpu/--sort-by=memory, scomporre l'utilizzo per container con --containers e confrontare l'uso effettivo con le request e i limit configurati, così da intercettare situazioni di over- o under-provisioning prima che causino throttling o OOM kill.
In questo articolo:
Cos'è kubectl top pod?
Il comando kubectl top pod consente di visualizzare il consumo di CPU e memoria dei pod nel cluster Kubernetes. Funziona come un'istantanea "live" che aiuta a individuare i workloads più esigenti in termini di risorse o a verificare come l'Horizontal Pod Autoscaler (HPA) prende le sue decisioni.
Prerequisiti:
Per utilizzare questo comando, il Metrics Server deve essere installato e in esecuzione nel cluster. È possibile verificarne lo stato cercando il deployment metrics-server nel namespace kube-system.
Comandi più comuni:
- Visualizzare i pod del namespace corrente:
kubectl top pod - Visualizzare tutti i pod di tutti i namespace:
kubectl top pod -A - Visualizzare i pod di un namespace specifico:
kubectl top pod -n <namespace-name> - Visualizzare le metriche dei singoli container all'interno dei pod:
kubectl top pod --containers - Ordinare per una risorsa specifica:
kubectl top pod --sort-by=cpuoppure--sort-by=memory
Come leggere l'output:
| Colonna | Significato |
|---|---|
| NAME | Il nome del pod. |
| CPU(cores) | Utilizzo della CPU in "millicore" (m). 1000m equivalgono a 1 core. |
| MEMORY(bytes) | Utilizzo della memoria, generalmente espresso in Megabyte (Mi) o Gigabyte (Gi). |
Questo articolo fa parte di una serie dedicata alle prestazioni di Kubernetes.
Prerequisiti per l'uso di kubectl top pod
Prima di utilizzare kubectl top pod, il cluster Kubernetes deve avere il Metrics Server installato e in esecuzione. Il Metrics Server raccoglie i dati di utilizzo di CPU e memoria dai kubelet di ciascun nodo e li espone tramite la Metrics API di Kubernetes. In sua assenza, il comando restituisce un errore simile a Metrics API not available.
È possibile verificare se il Metrics Server è installato eseguendo:
kubectl get deployment metrics-server -n kube-systemSe non è installato, è possibile eseguirne il deployment tramite il repository ufficiale dei componenti Kubernetes:
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yamlAnche l'utente che esegue il comando deve avere i permessi per accedere alle metriche dei pod. Nei cluster con il controllo degli accessi basato sui ruoli (RBAC) abilitato, l'account deve poter accedere all'API metrics.k8s.io.
Per confermare che le metriche siano disponibili, eseguire:
kubectl top nodesSe le metriche dei nodi vengono visualizzate correttamente, di norma sono disponibili anche quelle dei pod.
Sintassi di base di kubectl top pod
La sintassi di base del comando è:
kubectl top pod [POD_NAME] [flags]Per visualizzare l'utilizzo delle risorse di tutti i pod nel namespace corrente:
kubectl top podEsempio di output:
NAME CPU(cores) MEMORY(bytes)nginx-6d4cf56db6-xk8rt 2m 15Miapi-server-7f89c7d9d 25m 120MiFlag e opzioni:
Per visualizzare le metriche dei pod di un namespace specifico:
kubectl top pod -n productionPer visualizzare l'utilizzo di un singolo pod:
kubectl top pod nginx-6d4cf56db6-xk8rtÈ inoltre possibile ordinare i pod per consumo di risorse usando i normali strumenti della shell:
kubectl top pod --sort-by=memoryAltri flag utili sono:
--containers— Mostra le metriche dei singoli container all'interno di ciascun pod--all-namespaces— Visualizza i pod di tutti i namespace--no-headers— Rimuove le intestazioni delle colonne dall'output
Esempio con metriche a livello di container:
kubectl top pod nginx-6d4cf56db6-xk8rt --containersCasi d'uso di kubectl top pod
La tabella seguente mostra come eseguire le operazioni più comuni sul cluster con il comando kubectl top pod.
| Caso d'uso | Comando | Note e suggerimenti |
|---|---|---|
| Visualizzare l'utilizzo delle risorse di tutti i pod nel namespace corrente | kubectl top pod |
Mostra il consumo di CPU e memoria di tutti i pod nel namespace attivo. |
| Visualizzare l'utilizzo delle risorse dei pod in un namespace specifico | kubectl top pod -n staging |
Usare -n o --namespace per selezionare un namespace specifico. |
| Mostrare le metriche di tutti i namespace | kubectl top pod --all-namespaces |
Utile per individuare i workloads più esigenti in termini di risorse nell'intero cluster. |
| Visualizzare l'utilizzo di un singolo pod | kubectl top pod frontend-5f76c7b9d8-rxk92 |
Mostra le metriche solo per il pod specificato. |
| Visualizzare le metriche dei singoli container all'interno di un pod | kubectl top pod frontend-5f76c7b9d8-rxk92 --containers |
Aiuta a individuare quale container sta consumando risorse nei pod multi-container. |
| Mostrare le metriche a livello di container per tutti i pod | kubectl top pod --all-namespaces --containers |
Fornisce una visibilità dettagliata sull'utilizzo delle risorse dei container in tutto il cluster. |
| Ordinare i pod per utilizzo di CPU | kubectl top pod --sort-by=cpu |
Porta in cima all'output i pod con il maggior consumo di CPU. |
| Ordinare i pod per utilizzo di memoria | kubectl top pod --sort-by=memory |
Utile per individuare rapidamente i workloads ad alto consumo di memoria. |
| Rimuovere le intestazioni delle colonne per scripting o automazione | kubectl top pod --no-headers |
Rende l'output più facile da elaborare con strumenti come awk, grep o script. |
| Individuare i pod che consumano più risorse | kubectl top pod --sort-by=memory | head |
Combina l'ordinamento con le utility della shell per mostrare solo i primi risultati. |
| Monitorare in modo continuativo le metriche dei pod | watch kubectl top pod |
Aggiorna le metriche periodicamente, offrendo una vista quasi in tempo reale dell'andamento di CPU e memoria. |
Come leggere l'output di kubectl top pod
L'output di kubectl top pod fornisce un'istantanea dell'utilizzo attuale di CPU e memoria dei pod. Comprendere il significato di ciascuna colonna aiuta a individuare i workloads più esigenti e a diagnosticare i problemi di prestazioni.
Esempio di output:
NAME CPU(cores) MEMORY(bytes)nginx-6d4cf56db6-xk8rt 2m 15Miapi-server-7f89c7d9d 25m 120MiLe colonne rappresentano:
- NAME — Il nome del pod
- CPU (cores) — L'utilizzo attuale della CPU
- MEMORY (bytes) — Il consumo attuale di memoria
I valori di CPU sono generalmente espressi in millicore (m):
- 1000m equivalgono a 1 core CPU
- 250m equivalgono a 0,25 core CPU
Ad esempio:
- 2m significa che il pod sta usando una quantità di CPU molto ridotta
- 500m significa che il pod sta consumando metà di un core CPU
I valori di memoria sono espressi in unità binarie:
- Ki = kibibyte
- Mi = mebibyte
- Gi = gibibyte
I valori mostrati sono metriche di utilizzo corrente raccolte dal Metrics Server. Non si tratta di medie storiche e possono variare tra un'esecuzione del comando e l'altra. Per questo motivo, kubectl top pod è più indicato per verifiche operative rapide che per il monitoraggio a lungo termine.
Output per i container:
Utilizzando il flag --containers, l'output include le metriche di ciascun container all'interno del pod:
kubectl top pod nginx-6d4cf56db6-xk8rt --containersEsempio di output:
POD NAME CPU(cores) MEMORY(bytes)nginx-6d4cf56db6-xk8rt nginx 2m 15MiUsare l'output di top pod per diagnosticare i problemi dei pod:
Dopo aver individuato un consumo di risorse anomalo, confrontare l'utilizzo effettivo con le request e i limit configurati. In questo modo si può stabilire se i pod sono dimensionati correttamente o se richiedono una messa a punto per migliorare prestazioni ed efficienza delle risorse.
Best practice per l'uso di kubectl top pod
Ecco alcune pratiche utili da tenere presenti quando si utilizza questo comando.
1. Verificare che il Metrics Server sia installato e funzionante
Prima di affidarsi a kubectl top pod, verificare che il Metrics Server sia installato e funzioni correttamente nel cluster. È possibile controllarne lo stato con kubectl get deployment metrics-server -n kube-system ed esaminare i log alla ricerca di errori.
Se il Metrics Server non è configurato correttamente o presenta problemi, kubectl top pod potrebbe restituire dati incompleti o fallire del tutto. Monitorare regolarmente lo stato del Metrics Server per garantire che le metriche riflettano la situazione attuale dei workloads.
Esempio:
kubectl --namespace=kube-system get deployment metrics-serverOutput:
NAME READY UP-TO-DATE AVAILABLE AGEmetrics-server 1/1 1 1 45dVerificare la raccolta delle metriche:
kubectl top nodesOutput:
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%worker-node-1 420m 21% 3120Mi 39%worker-node-2 365m 18% 2875Mi 36%2. Controllare sempre il namespace giusto
I cluster Kubernetes ospitano spesso più namespace, ciascuno con workloads o ambienti diversi. Quando si usa kubectl top pod, specificare il namespace corretto con il flag -n se non si sta lavorando in quello predefinito.
Non specificare il namespace può portare a trascurare problemi o a trarre conclusioni errate sull'utilizzo delle risorse. Ad esempio, si potrebbe non notare un picco di risorse in un ambiente di staging se si controlla solo il namespace di default.
Esempio:
kubectl --namespace production top podOutput:
NAME CPU(cores) MEMORY(bytes)frontend-76d9c7f7f5-qn9p8 65m 210Mibackend-5c8b7d9f67-jh2wt 220m 580Miredis-0 15m 140Mi3. Ordinare per CPU o memoria per trovare più in fretta i pod "rumorosi"
Ordinare i pod per utilizzo di CPU o memoria mette in evidenza quelli che consumano più risorse. Usare --sort-by=cpu o --sort-by=memory per portare in cima all'output i pod più esigenti. Esaminare i pod in base al consumo di risorse aiuta a risolvere i colli di bottiglia e facilita la pianificazione della capacità.
Esempio:
kubectl top pods -n production --sort-by=memoryOutput:
NAME CPU(cores) MEMORY(bytes)analytics-worker-7f4b7d5c8d 320m 1850Miapi-server-6b8f4d5f4d 140m 720Mifrontend-76d9c7f7f5 60m 220Mi4. Confrontare l'utilizzo con request e limit
Per interpretare le metriche delle risorse, confrontare l'utilizzo effettivo riportato da kubectl top pod con le request e i limit definiti nelle specifiche dei pod. Se un pod si avvicina spesso ai propri limiti di risorse, può subire throttling o eviction. Un utilizzo costantemente basso rispetto alle request indica invece over-provisioning. Questo confronto aiuta i team a regolare l'allocazione delle risorse ed evitare problemi come gli OOMKill o il throttling della CPU.
Esempio:
Visualizzare l'utilizzo corrente:
kubectl -n production top pod api-server-6b8f4d5f4dOutput:
NAME CPU(cores) MEMORY(bytes)api-server-6b8f4d5f4d 850m 920MiControllare le risorse configurate:
kubectl -n production describe pod api-server-6b8f4d5f4dOutput (estratto):
Limits: cpu: 1 memory: 1GiRequests: cpu: 500m memory: 512MiIn questo esempio, il pod si sta avvicinando sia al limite di CPU sia a quello di memoria e potrebbe richiedere una messa a punto.
5. Usare le label per le verifiche a livello di workload
Le label di Kubernetes consentono di filtrare e raggruppare i pod per applicazione, ambiente o chiave personalizzata. Combinando kubectl top pod con il flag -l, è possibile monitorare l'utilizzo delle risorse di un workload, un team o un microservizio specifico.
Esempio:
Recuperare i pod con una label specifica:
kubectl -n production get pods -l app=webOutput:
NAME READY STATUSweb-6d7f9d8f8b-7xt2m 1/1 Runningweb-6d7f9d8f8b-kq4pn 1/1 RunningControllare l'utilizzo delle risorse di quei pod:
kubectl top pod -n production | grep webOutput:
web-6d7f9d8f8b-7xt2m 35m 120Miweb-6d7f9d8f8b-kq4pn 42m 135MiIn questo modo gli operatori possono valutare rapidamente il consumo di risorse di una specifica applicazione o di un servizio senza passare in rassegna workloads non pertinenti.
Come applicare il right-sizing continuo alle risorse dei pod con PerfectScale
kubectl top pod offre un'istantanea in tempo reale dell'utilizzo di CPU e memoria, ma tradurre quelle letture nelle request e nei limit corretti su centinaia di workloads è un lavoro manuale e continuo. La soluzione di ottimizzazione delle prestazioni di PerfectScale migliora le performance di Kubernetes applicando in modo autonomo il right-sizing dei workloads, prevenendo i downtime e ottimizzando l'uso delle risorse per una disponibilità del 99,99%: così i pattern di utilizzo individuati con kubectl top pod si traducono direttamente in modifiche di configurazione sicure e basate sui dati.
Le funzionalità chiave di PerfectScale:
- Risoluzione automatica dei problemi: identifica e corregge all'istante i rischi per la resilienza, inclusi i problemi di under-provisioning delle risorse come OOM, throttling della CPU ed eviction, per massimizzare l'uptime ed eliminare la latenza.
- Right-sizing autonomo di CPU e memoria: analizza continuamente i workloads e regola request e limit di CPU e memoria in base alla domanda effettiva, riducendo il rischio di throttling e i costi cloud, e risolvendo l'over- e l'under-provisioning che kubectl top pod aiuta a rilevare.
- Hardening dell'infrastruttura: offre visibilità completa sui nodi per far emergere in modo proattivo le configurazioni errate, prevenire l'over-commitment dei nodi con raccomandazioni precise sui limiti di memoria, validare node affinity e taint e selezionare i tipi di nodo più adatti ai pod.
- Prioritizzazione basata sull'impatto: risolve i problemi critici in tempo reale con la prioritizzazione automatica, allinea gli alert a SLA/SLO, invia notifiche istantanee su canali come Slack, MS Teams o Datadog e converte un problema in un ticket con un solo clic.
Pronto a passare dalle istantanee manuali all'ottimizzazione autonoma? Scopra come PerfectScale migliora le prestazioni di Kubernetes.
FAQ
Perché kubectl top pod restituisce "Metrics API not available"?
Il Metrics Server non è installato o non funziona correttamente nel cluster. Verificare con kubectl get deployment metrics-server -n kube-system e, se manca, installarlo dal manifest ufficiale dei componenti.
Cosa indica esattamente la colonna CPU(cores)? È espressa in millicore (m). 1000m equivalgono a un core CPU completo, quindi 250m corrispondono a un quarto di core e 2m a una quantità trascurabile di CPU.
kubectl top pod è adatto al monitoraggio a lungo termine?
No. È un'istantanea in tempo reale fornita dal Metrics Server, non una media storica, quindi è più indicato per verifiche operative rapide che per l'analisi dei trend. Per il monitoraggio a lungo termine, usare Prometheus/Grafana o strumenti simili.
Come si visualizzano le metriche per container anziché per pod?
Aggiungere il flag --containers: kubectl top pod <pod-name> --containers.
Come si trovano i pod più "rumorosi" in un namespace?
Usare kubectl top pod -n <namespace> --sort-by=cpu o --sort-by=memory per ordinare i pod per consumo, dal più alto al più basso.
Come capire se un pod è in under- o over-provisioning?
Confrontare l'utilizzo in tempo reale di kubectl top pod con le request e i limit configurati del pod (visibili con kubectl describe pod). Un utilizzo costantemente vicino al limit indica un rischio di under-provisioning; un utilizzo molto inferiore alla request indica over-provisioning.