kubectl run

Tworzy i uruchamia pojedynczy pod z podanym obrazem.

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=OBRAZobraz 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 -i daje interaktywną powłokę.
  • --rm — usuwa pod po jego zakończeniu; działa tylko przy podłączeniu (-i lub --attach).
  • --restart — polityka restartu: Always (domyślna), OnFailure albo Never.
  • --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.