PerfectScale
Kubectl Top Pod: Monitore o Uso de CPU e Memória no Kubernetes
Esta página também está disponível em English, Deutsch, Español, Français, Italiano e 日本語.
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 pageResumo: O kubectl top pod oferece um snapshot em tempo real do uso de CPU (millicores) e memória (Mi/Gi) por pod, com dados fornecidos pelo Metrics Server. Use-o para identificar pods que consomem muitos recursos, ordenar com --sort-by=cpu/--sort-by=memory, detalhar o uso por contêiner com --containers e comparar o uso real com os requests/limits configurados, detectando super ou subprovisionamento antes que isso cause throttling ou OOM kills.
Neste artigo:
O que é o kubectl top pod?
O comando kubectl top pod permite visualizar o consumo de CPU e memória dos pods do seu cluster Kubernetes. Ele funciona como um snapshot "ao vivo", ajudando você a identificar workloads que consomem muitos recursos ou a verificar como o seu Horizontal Pod Autoscaler (HPA) está tomando decisões.
Pré-requisitos:
Para usar esse comando, o Metrics Server precisa estar instalado e em execução no cluster. Você pode verificar se ele está rodando procurando o deployment metrics-server no namespace kube-system.
Comandos comuns:
- Ver os pods do namespace atual:
kubectl top pod - Ver todos os pods de todos os namespaces:
kubectl top pod -A - Ver os pods de um namespace específico:
kubectl top pod -n <namespace-name> - Ver as métricas de cada contêiner dentro dos pods:
kubectl top pod --containers - Ordenar por um recurso específico:
kubectl top pod --sort-by=cpuou--sort-by=memory
Como interpretar a saída:
| Coluna | Significado |
|---|---|
| NAME | O nome do pod. |
| CPU(cores) | Uso de CPU em "millicores" (m). 1000m equivale a 1 core. |
| MEMORY(bytes) | Uso de memória, normalmente exibido em Megabytes (Mi) ou Gigabytes (Gi). |
Este conteúdo faz parte de uma série de artigos sobre desempenho no Kubernetes.
Pré-requisitos para usar o kubectl top pod
Antes de usar o kubectl top pod, o cluster Kubernetes precisa ter o Metrics Server instalado e em execução. O Metrics Server coleta dados de uso de CPU e memória dos kubelets de cada nó e os expõe por meio da Metrics API do Kubernetes. Sem ele, o comando retorna um erro semelhante a Metrics API not available.
Você pode verificar se o Metrics Server está instalado executando:
kubectl get deployment metrics-server -n kube-systemSe ele não estiver instalado, faça o deploy usando o repositório oficial de componentes do Kubernetes:
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yamlO usuário que executa o comando também precisa de permissão para acessar as métricas dos pods. Em clusters com controle de acesso baseado em funções (RBAC) habilitado, a conta deve ter acesso à API metrics.k8s.io.
Para confirmar que as métricas estão disponíveis, execute:
kubectl top nodesSe as métricas dos nós aparecerem corretamente, as métricas dos pods geralmente também estarão disponíveis.
Sintaxe básica do kubectl top pod
A sintaxe básica do comando é:
kubectl top pod [POD_NAME] [flags]Para exibir o uso de recursos de todos os pods no namespace atual:
kubectl top podExemplo de saída:
NAME CPU(cores) MEMORY(bytes)nginx-6d4cf56db6-xk8rt 2m 15Miapi-server-7f89c7d9d 25m 120MiFlags e opções:
Para ver as métricas dos pods de um namespace específico:
kubectl top pod -n productionPara exibir o uso de um único pod:
kubectl top pod nginx-6d4cf56db6-xk8rtVocê também pode ordenar os pods por consumo de recursos usando ferramentas de shell padrão:
kubectl top pod --sort-by=memoryOutras flags úteis incluem:
--containers— Exibe as métricas de cada contêiner dentro de cada pod--all-namespaces— Exibe os pods de todos os namespaces--no-headers— Remove os cabeçalhos das colunas na saída
Exemplo com métricas por contêiner:
kubectl top pod nginx-6d4cf56db6-xk8rt --containersCasos de uso do kubectl top pod
A tabela a seguir mostra como realizar operações comuns no cluster com o comando kubectl top pod.
| Caso de uso | Comando | Notas e dicas |
|---|---|---|
| Exibir o uso de recursos de todos os pods no namespace atual | kubectl top pod |
Mostra o consumo de CPU e memória de todos os pods do namespace ativo. |
| Exibir o uso de recursos dos pods de um namespace específico | kubectl top pod -n staging |
Use -n ou --namespace para especificar um namespace. |
| Mostrar métricas de todos os namespaces | kubectl top pod --all-namespaces |
Útil para identificar workloads que consomem muitos recursos em todo o cluster. |
| Ver o uso de um único pod | kubectl top pod frontend-5f76c7b9d8-rxk92 |
Exibe as métricas apenas do pod especificado. |
| Exibir métricas de cada contêiner dentro de um pod | kubectl top pod frontend-5f76c7b9d8-rxk92 --containers |
Ajuda a identificar qual contêiner está consumindo recursos em pods com múltiplos contêineres. |
| Mostrar métricas por contêiner para todos os pods | kubectl top pod --all-namespaces --containers |
Oferece visibilidade detalhada do uso de recursos por contêiner em todo o cluster. |
| Ordenar os pods por uso de CPU | kubectl top pod --sort-by=cpu |
Coloca os pods que mais consomem CPU no topo da saída. |
| Ordenar os pods por uso de memória | kubectl top pod --sort-by=memory |
Útil para identificar rapidamente workloads intensivas em memória. |
| Remover cabeçalhos das colunas para scripts ou automação | kubectl top pod --no-headers |
Facilita o processamento da saída com ferramentas como awk, grep ou scripts. |
| Identificar os pods que mais consomem recursos | kubectl top pod --sort-by=memory | head |
Combina ordenação com utilitários de shell para mostrar apenas os primeiros resultados. |
| Monitorar as métricas dos pods continuamente | watch kubectl top pod |
Atualiza as métricas periodicamente, oferecendo uma visão quase em tempo real das tendências de uso de CPU e memória. |
Como interpretar a saída do kubectl top pod
A saída do kubectl top pod fornece um snapshot do uso atual de CPU e memória dos pods. Entender o significado de cada coluna ajuda a identificar workloads que consomem muitos recursos e a diagnosticar problemas de desempenho.
Exemplo de saída:
NAME CPU(cores) MEMORY(bytes)nginx-6d4cf56db6-xk8rt 2m 15Miapi-server-7f89c7d9d 25m 120MiAs colunas representam:
- NAME — O nome do pod
- CPU (cores) — Uso atual de CPU
- MEMORY (bytes) — Consumo atual de memória
Os valores de CPU normalmente são exibidos em millicores (m):
- 1000m equivale a 1 core de CPU
- 250m equivale a 0,25 core de CPU
Por exemplo:
- 2m significa que o pod está usando uma quantidade mínima de CPU
- 500m significa que o pod está consumindo metade de um core de CPU
Os valores de memória são exibidos em unidades binárias:
- Ki = kibibytes
- Mi = mebibytes
- Gi = gibibytes
Os valores exibidos são métricas de uso atual coletadas pelo Metrics Server. Não são médias históricas e podem mudar entre execuções do comando. Por isso, o kubectl top pod é mais indicado para verificações operacionais rápidas do que para monitoramento de longo prazo.
Saídas por contêiner:
Ao usar a flag --containers, a saída inclui as métricas de cada contêiner dentro do pod:
kubectl top pod nginx-6d4cf56db6-xk8rt --containersExemplo de saída:
POD NAME CPU(cores) MEMORY(bytes)nginx-6d4cf56db6-xk8rt nginx 2m 15MiUsando a saída do top pod para diagnosticar problemas nos pods:
Depois de identificar um consumo de recursos fora do padrão, compare o uso real com os requests e limits configurados. Isso ajuda a determinar se os pods estão dimensionados corretamente ou se precisam de ajustes para melhorar o desempenho e a eficiência no uso de recursos.
Boas práticas para usar o kubectl top pod
Confira algumas práticas úteis para adotar ao usar esse comando.
1. Confirme que o Metrics Server está instalado e saudável
Antes de confiar no kubectl top pod, verifique se o Metrics Server está instalado e funcionando corretamente no cluster. Você pode conferir o status com kubectl get deployment metrics-server -n kube-system e inspecionar os logs em busca de erros.
Se o Metrics Server estiver mal configurado ou com problemas, o kubectl top pod pode retornar dados incompletos ou falhar completamente. Monitore a saúde do Metrics Server com regularidade para garantir que as métricas de recursos reflitam o estado atual das suas workloads.
Exemplo:
kubectl --namespace=kube-system get deployment metrics-serverSaída:
NAME READY UP-TO-DATE AVAILABLE AGEmetrics-server 1/1 1 1 45dVerifique a coleta de métricas:
kubectl top nodesSaída:
NAME CPU(cores) CPU% MEMORY(bytes) MEMORY%worker-node-1 420m 21% 3120Mi 39%worker-node-2 365m 18% 2875Mi 36%2. Sempre confira o namespace certo
Clusters Kubernetes costumam hospedar vários namespaces, cada um com workloads ou ambientes diferentes. Ao usar o kubectl top pod, especifique o namespace correto com a flag -n se você não estiver trabalhando no namespace padrão.
Deixar de especificar o namespace pode fazer com que problemas passem despercebidos ou levar a conclusões erradas sobre o uso de recursos. Por exemplo, você pode não perceber um pico de recursos em um ambiente de staging se verificar apenas o namespace padrão.
Exemplo:
kubectl --namespace production top podSaída:
NAME CPU(cores) MEMORY(bytes)frontend-76d9c7f7f5-qn9p8 65m 210Mibackend-5c8b7d9f67-jh2wt 220m 580Miredis-0 15m 140Mi3. Ordene por CPU ou memória para encontrar pods problemáticos mais rápido
Ordenar os pods por uso de CPU ou memória destaca aqueles que mais consomem recursos. Use --sort-by=cpu ou --sort-by=memory para trazer os pods mais intensivos em recursos para o topo da saída. Analisar os pods com base no consumo de recursos ajuda a resolver gargalos e apoia o planejamento de capacidade.
Exemplo:
kubectl top pods -n production --sort-by=memorySaída:
NAME CPU(cores) MEMORY(bytes)analytics-worker-7f4b7d5c8d 320m 1850Miapi-server-6b8f4d5f4d 140m 720Mifrontend-76d9c7f7f5 60m 220Mi4. Compare o uso com os requests e limits
Para interpretar as métricas de recursos, compare o uso real relatado pelo kubectl top pod com os requests e limits definidos nas especificações dos pods. Se um pod se aproxima com frequência dos seus limits de recursos, ele pode sofrer throttling ou eviction. Um uso consistentemente baixo em relação aos requests indica superprovisionamento. Essa comparação ajuda as equipes a ajustar a alocação de recursos e evitar problemas como OOMKills ou throttling de CPU.
Exemplo:
Veja o uso atual:
kubectl -n production top pod api-server-6b8f4d5f4dSaída:
NAME CPU(cores) MEMORY(bytes)api-server-6b8f4d5f4d 850m 920MiConfira os recursos configurados:
kubectl -n production describe pod api-server-6b8f4d5f4dSaída (trecho):
Limits: cpu: 1 memory: 1GiRequests: cpu: 500m memory: 512MiNeste exemplo, o pod está se aproximando dos limits tanto de CPU quanto de memória e pode precisar de ajustes.
5. Use labels para verificações no nível de workload
As labels do Kubernetes permitem filtrar e agrupar pods por aplicação, ambiente ou chave personalizada. Combinando o kubectl top pod com a flag -l, você pode monitorar o uso de recursos de uma workload, equipe ou microsserviço específico.
Exemplo:
Liste os pods com uma label específica:
kubectl -n production get pods -l app=webSaída:
NAME READY STATUSweb-6d7f9d8f8b-7xt2m 1/1 Runningweb-6d7f9d8f8b-kq4pn 1/1 RunningVerifique o uso de recursos desses pods:
kubectl top pod -n production | grep webSaída:
web-6d7f9d8f8b-7xt2m 35m 120Miweb-6d7f9d8f8b-kq4pn 42m 135MiIsso permite que os operadores avaliem rapidamente o consumo de recursos de uma aplicação ou serviço específico sem precisar analisar workloads não relacionadas.
Como fazer right-sizing contínuo dos recursos dos pods com o PerfectScale
Embora o kubectl top pod ofereça um snapshot em tempo real do uso de CPU e memória, transformar essas leituras nos requests e limits certos em centenas de workloads é um esforço manual constante. A solução de otimização de desempenho do PerfectScale aprimora o desempenho do Kubernetes fazendo o right-sizing autônomo das workloads, prevenindo downtime e otimizando o uso de recursos para uma disponibilidade de 99,99%, de modo que os padrões de uso identificados com o kubectl top pod se traduzam diretamente em mudanças de configuração seguras e orientadas por dados.
Principais recursos do PerfectScale:
- Correção automática de problemas: Identifica e corrige instantaneamente riscos de resiliência, incluindo problemas de subprovisionamento de recursos como OOM, throttling de CPU e eviction, para maximizar o uptime e eliminar a latência.
- Right-sizing autônomo de CPU e memória: Analisa continuamente suas workloads e ajusta requests e limits de CPU e memória com base na demanda real, reduzindo o risco de throttling e cortando custos de nuvem — resolvendo o super e o subprovisionamento que o kubectl top pod ajuda você a detectar.
- Fortalecimento da infraestrutura: Oferece visibilidade holística dos seus nós para revelar proativamente configurações incorretas, prevenir o over-commitment dos nós com recomendações precisas de limits de memória, validar node affinities e taints e selecionar os tipos de nó mais adequados para seus pods.
- Priorização orientada por impacto: Resolve problemas críticos em tempo real com priorização automática, alinha os alertas aos seus SLAs/SLOs, envia notificações instantâneas por canais como Slack, MS Teams ou Datadog e transforma problemas em tickets com um clique.
Pronto para deixar os snapshots manuais e partir para a otimização autônoma? Saiba como o PerfectScale aumenta o desempenho do Kubernetes.
FAQ
Por que o kubectl top pod retorna "Metrics API not available"?
O Metrics Server não está instalado ou não está saudável no seu cluster. Verifique com kubectl get deployment metrics-server -n kube-system e, se estiver faltando, instale-o a partir do manifesto oficial de componentes.
O que a coluna CPU(cores) realmente significa? Ela é exibida em millicores (m). 1000m equivale a um core completo de CPU, então 250m corresponde a um quarto de core e 2m é uma quantidade insignificante de CPU.
O kubectl top pod serve para monitoramento de longo prazo?
Não. É um snapshot em tempo real do Metrics Server, não uma média histórica, então é mais indicado para verificações operacionais rápidas do que para análise de tendências. Use Prometheus/Grafana ou ferramentas semelhantes para monitoramento de longo prazo.
Como vejo as métricas por contêiner em vez de por pod?
Adicione a flag --containers: kubectl top pod <pod-name> --containers.
Como encontro os pods que mais consomem recursos em um namespace?
Use kubectl top pod -n <namespace> --sort-by=cpu ou --sort-by=memory para ordenar os pods por consumo, do maior para o menor.
Como sei se um pod está sub ou superprovisionado?
Compare o uso em tempo real do kubectl top pod com os requests e limits configurados no pod (visíveis via kubectl describe pod). Um uso consistentemente próximo do limit indica risco de subprovisionamento; um uso muito abaixo do request indica superprovisionamento.