kubectl delete

Usuwa zasoby po nazwie lub z pliku manifestu.

kubectl delete usuwa zasoby z klastra Kubernetes — pody, deploymenty, serwisy, configmapy, cokolwiek API zna. Możesz wskazać zasób po typie i nazwie, podać plik manifestu (ten sam, którym tworzyłeś zasób przez kubectl apply), albo zgarnąć całe grupy po etykietach. Domyślnie kasowanie jest „miękkie”: Kubernetes wysyła zasobowi sygnał, daje czas na uprzątnięcie się (graceful termination) i dopiero potem go usuwa.

Składnia i najważniejsze opcje

Podstawowa forma to kubectl delete TYPE NAME lub kubectl delete -f plik.yaml.

  • -f, --filename — usuwa zasoby opisane w pliku, katalogu lub URL (możesz powtórzyć flagę).
  • -l, --selector — usuwa wszystko pasujące do etykiet, np. -l app=nginx.
  • --all — kasuje wszystkie zasoby danego typu w przestrzeni nazw (uważaj!).
  • -n, --namespace — wskazuje przestrzeń nazw; bez tego działasz w default.
  • --grace-period — sekundy na łagodne zamknięcie; 0 tylko razem z --force.
  • --force — natychmiast usuwa zasób z API, pomijając graceful shutdown.
  • --cascade — strategia usuwania zależności: background (domyślnie), foreground lub orphan.
  • --field-selector — filtr po polach, np. --field-selector status.phase=Running.

Przykłady użycia

  • kubectl delete pod nginx-abc123 — usuwa pojedynczy pod po nazwie.
  • kubectl delete -f deployment.yaml — kasuje dokładnie te zasoby, które utworzył ten manifest.
  • kubectl delete pods -l app=nginx — usuwa wszystkie pody z etykietą app=nginx.
  • kubectl delete deployment web -n produkcja — usuwa deployment w przestrzeni produkcja (a z nim podległe pody).
  • kubectl delete pod nginx-abc123 --grace-period=0 --force — wymusza natychmiastowe usunięcie zawieszonego poda.

Częste błędy i pułapki

--all to klasyczna mina: kubectl delete pods --all wymiata wszystkie pody w bieżącej przestrzeni nazw, a jeśli zapomnisz -n, możesz trafić nie tam, gdzie myślisz. Pamiętaj, że usunięcie poda zarządzanego przez deployment nic nie da na dłużej — kontroler natychmiast odtworzy go z ReplicaSet; kasuj wtedy deployment, nie pod.

--force --grace-period=0 brzmi jak panaceum na zawieszony pod, ale usuwa wpis z API zanim kubelet faktycznie sprzątnie kontener — przy StatefulSet czy zasobach trzymających dane grozi to niespójnością. Używaj go świadomie, nie odruchowo. Jeśli boisz się o efekt, dodaj --dry-run=client i zobacz, co poleciałoby, zanim naciśniesz Enter.

Powiązane komendy: kubectl apply, kubectl get, kubectl describe, kubectl scale, kubectl rollout.