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-idaje normalnie wyglądającą sesję powłoki.--— separator: wszystko po nim trafia do kontenera, a nie dokubectl. 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/appw 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 kontenernginxw 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 nazwprodukcja; ś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.