kubectl run tworzy i uruchamia pojedynczy pod z wybranego obrazu kontenera — bez pisania pliku YAML, prosto z linii poleceń. To kubernetesowy odpowiednik docker run: idealny, gdy chcesz szybko coś przetestować, wejść do tymczasowej powłoki w klastrze albo sprawdzić, czy obraz w ogóle startuje. Do produkcji się nie nadaje (od tego są Deploymenty), ale do debugowania i nauki — pierwsza komenda, po którą sięgasz.
Składnia i najważniejsze opcje
Podstawowa forma wygląda tak: kubectl run NAZWA --image=OBRAZ [flagi]
--image=OBRAZ— obraz kontenera do uruchomienia, np.--image=nginx(flaga wymagana).-i(lub--stdin) — trzyma otwarte standardowe wejście, żebyś mógł wpisywać polecenia do kontenera.-t(lub--tty) — przydziela pseudoterminal; razem z-idaje interaktywną powłokę.--rm— usuwa pod po jego zakończeniu; działa tylko przy podłączeniu (-ilub--attach).--restart— polityka restartu:Always(domyślna),OnFailurealboNever.--env="KLUCZ=wartosc"— ustawia zmienną środowiskową; flagę można powtarzać.--port=PORT— deklaruje port, który kontener wystawia.--dry-run=client -o yaml— nie tworzy poda, tylko wypisuje gotowy manifest YAML na ekran.
Przykłady użycia
kubectl run nginx --image=nginx— uruchamia pojedynczy pod z serwerem Nginx w tle.kubectl run -it --rm debug --image=busybox -- sh— wchodzisz do interaktywnej powłoki w tymczasowym podzie, który zniknie po wyjściu.kubectl run klient --image=curlimages/curl --rm -it --restart=Never -- curl http://moja-usluga— szybki test łączności do usługi z wnętrza klastra.kubectl run app --image=redis --env="REDIS_PORT=6379" --port=6379— pod z ustawioną zmienną środowiskową i zadeklarowanym portem.kubectl run web --image=nginx --dry-run=client -o yaml > pod.yaml— generuje szablon manifestu zamiast tworzyć poda; świetne na start własnego YAML-a.
Częste błędy i pułapki
To tworzy pod, nie Deployment. Kiedyś kubectl run robił replikę z kontrolerem; dziś domyślnie powstaje goły pod. Jeśli go skasujesz, nikt go nie odtworzy — do trwałych usług użyj kubectl create deployment.
Argumenty po -- to polecenie w kontenerze. Wszystko po podwójnym myślniku trafia do kontenera, nie do kubectl. kubectl run x --image=busybox -- sleep 3600 nadpisuje domyślny entrypoint.
--rm bez -i nic nie da — pod nie zostanie posprzątany, bo kubectl od razu odłącza się od kontenera. Sklejaj z -it.
Pod w stanie CrashLoopBackOff zwykle oznacza, że kontener nie ma co robić i kończy pracę, a domyślna polityka Always wciąż go restartuje. Przy jednorazowych zadaniach dodaj --restart=Never.
Powiązane komendy: kubectl create deployment, kubectl exec, kubectl logs, kubectl delete pod, kubectl get pods, kubectl describe pod.