kubectl exec

Uruchamia polecenie w kontenerze działającego poda.

kubectl exec uruchamia polecenie wewnątrz działającego kontenera w podzie na klastrze Kubernetes. To twój odpowiednik docker exec w świecie k8s: wchodzisz do środka, sprawdzasz logi aplikacji, odpalasz interaktywną powłokę albo jednorazowo wykonujesz komendę, nie ruszając samego poda. Klasyczne narzędzie do debugowania, gdy aplikacja gada coś dziwnego, a ty chcesz zobaczyć, co naprawdę dzieje się w kontenerze.

Składnia i najważniejsze opcje

Podstawowa forma: kubectl exec (POD | TYP/NAZWA) [-c CONTAINER] [flagi] -- COMMAND [ARG...]

  • -c, --container — wybiera kontener w podzie. Pominięty? Kubernetes weźmie pierwszy zdefiniowany kontener (i nie zawsze ten, o który ci chodzi).
  • -i, --stdin — przekazuje twój stdin do kontenera. Niezbędne, gdy chcesz cokolwiek wpisywać interaktywnie.
  • -t, --tty — alokuje pseudo-TTY. Razem z -i daje normalnie wyglądającą sesję powłoki.
  • -- — separator: wszystko po nim trafia do kontenera, a nie do kubectl. Bez tego twoje flagi mogą zostać zjedzone przez kubectl.
  • -n, --namespace — wskazuje przestrzeń nazw poda (flaga globalna). Bez niej działasz w domyślnej.
  • --pod-running-timeout — jak długo czekać, aż pojawi się działający pod (domyślnie 1m).
  • -q, --quiet — wycisza komunikaty pomocnicze kubectl, zostawia czysty output polecenia.

Przykłady użycia

  • kubectl exec my-pod -- ls /app — jednorazowo listuje katalog /app w pierwszym kontenerze poda i kończy działanie.
  • kubectl exec -it my-pod -- /bin/bash — otwiera interaktywną powłokę bash; tu naprawdę „wchodzisz do środka” kontenera.
  • kubectl exec -it my-pod -c nginx -- sh — wskazuje konkretny kontener nginx w wielokontenerowym podzie i odpala w nim powłokę sh (gdy bash nie jest zainstalowany).
  • kubectl exec my-pod -n produkcja -- env — wypisuje zmienne środowiskowe kontenera z przestrzeni nazw produkcja; świetne do sprawdzenia, czy config się załadował.
  • kubectl exec -it deploy/api -- psql -U admin — odpala polecenie w jednym z podów wskazanego deploymentu (kubectl sam wybierze pod).

Częste błędy i pułapki

Zapomniany -- to klasyk. Jeśli polecenie ma własne flagi (np. ls -la), bez separatora kubectl może je przechwycić. Wpychaj -- zawsze przed komendą, a śpisz spokojnie.

-t bez terminala — gdy odpalasz exec -it w skrypcie albo pipeline CI bez prawdziwego TTY, dostaniesz błąd w stylu „unable to use a TTY”. W automatyzacji używaj samego -i (albo nic), nie -it.

Brak powłoki w kontenerze — minimalistyczne obrazy (distroless, scratch) często nie mają bash ani sh. Wtedy exec zwróci „executable file not found”. Rozważ debugowanie przez kubectl debug z kontenerem efemerycznym.

Zły kontener — w podzie z kilkoma kontenerami pominięcie -c wrzuci cię do pierwszego z listy, niekoniecznie aplikacyjnego. Sprawdź nazwy przez kubectl describe pod.

Powiązane komendy: kubectl logs (podgląd logów), kubectl attach (podpięcie do działającego procesu), kubectl debug (kontenery efemeryczne), kubectl describe oraz docker exec jako odpowiednik z Dockera.