kubectl top

Pokazuje zużycie CPU i pamięci przez pody lub węzły.

kubectl top pokazuje bieżące zużycie CPU i pamięci w klastrze Kubernetes — albo dla całych węzłów (node), albo dla pojedynczych podów (pod). To twój podstawowy quick look, gdy ktoś dzwoni, że „coś muli”, a ty chcesz w sekundę zobaczyć, kto zżera procesor i RAM, bez odpalania całego Grafany. Uwaga na wstępie: komenda nie działa bez zainstalowanego metrics-server w klastrze — to on zbiera te dane, a kubectl top je tylko czyta.

Składnia i najważniejsze opcje

Podstawowa forma to kubectl top (pod|node) [NAZWA] [flagi]. Bez podania nazwy dostajesz listę wszystkich zasobów danego typu.

  • -n, --namespace — wskazuje przestrzeń nazw (domyślnie default); dotyczy tylko podów.
  • -A, --all-namespaces — pokazuje pody ze wszystkich namespace’ów naraz.
  • --containers — rozbija zużycie poda na poszczególne kontenery (tylko dla pod).
  • --sort-by — sortuje wynik po kolumnie, przyjmuje cpu albo memory.
  • -l, --selector — filtruje po etykietach, obsługuje =, == i !=.
  • --no-headers — pomija wiersz nagłówka, wygodne przy przetwarzaniu w skrypcie.
  • --sum — dopisuje wiersz z sumą zużycia dla wybranych podów.

Przykłady użycia

  • kubectl top nodes — pokazuje CPU i pamięć każdego węzła wraz z procentem wykorzystania względem pojemności. Pierwszy strzał, gdy szukasz przeciążonego węzła.
  • kubectl top pods -n produkcja — wypisuje zużycie wszystkich podów w przestrzeni produkcja.
  • kubectl top pods --all-namespaces --sort-by=memory — zbiera pody z całego klastra i sortuje od najbardziej pamięciożernych. Idealne na polowanie na wyciek pamięci.
  • kubectl top pod nginx-7d9 --containers — rozbija jeden pod na kontenery, żeby zobaczyć, który dokładnie kontener przesadza.
  • kubectl top pods -l app=api --sort-by=cpu — bierze tylko pody z etykietą app=api i ustawia je wg zużycia CPU.

Częste błędy i pułapki

Najczęstszy zgrzyt to komunikat w stylu „Metrics API not available” albo „error: metrics not available yet”. To prawie zawsze brak metrics-server albo fakt, że dopiero wstał i nie zdążył zebrać próbek (poczekaj 1-2 minuty po starcie poda). Druga sprawa: kubectl top pokazuje realne, chwilowe zużycie, a nie requests ani limits — nie myl tych liczb z tym, co pod ma przydzielone. Pamiętaj też, że --containers i --sum działają wyłącznie dla podów; przy node zostaną zignorowane lub rzucą błąd. I drobiazg: top nie odświeża się jak linuksowy top — to pojedynczy zrzut, więc do podglądu na żywo musisz to zapętlić albo sięgnąć po monitoring.

Powiązane komendy: kubectl describe node, kubectl get pods, kubectl logs, kubectl get –raw /apis/metrics.k8s.io, oraz linuksowe top i htop dla podglądu na samym hoście.