Zacząłem kapsuły na polecenie
$ kubectl run busybox --image=busybox --restart=Never --tty -i --generator=run-pod/v1
Coś poszło nie tak i teraz nie mogę tego usunąć Pod
.
Próbowałem użyć metod opisanych poniżej, ale Pod
wciąż są odtwarzane.
$ kubectl delete pods busybox-na3tm
pod "busybox-na3tm" deleted
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
busybox-vlzh3 0/1 ContainerCreating 0 14s
$ kubectl delete pod busybox-vlzh3 --grace-period=0
$ kubectl delete pods --all
pod "busybox-131cq" deleted
pod "busybox-136x9" deleted
pod "busybox-13f8a" deleted
pod "busybox-13svg" deleted
pod "busybox-1465m" deleted
pod "busybox-14uz1" deleted
pod "busybox-15raj" deleted
pod "busybox-160to" deleted
pod "busybox-16191" deleted
$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
default busybox-c9rnx 0/1 RunContainerError 0 23s
kubernetes
kubectl
yman
źródło
źródło
kubectl get all -o name
?kubectl get events
co tworzy te obiekty?kubctl get rc
sprawdzić, czy został utworzony ReplicationController. Jeśli tak, usuń to, a następnie usuń pody.kubectl get deployment
kubectl delete deployment <deployment_name>
. Aby uzyskać nazwę wdrożenia, zróbkubectl get deployments
Odpowiedzi:
Musisz usunąć wdrożenie, co z kolei powinno usunąć pody i zestawy replik https://github.com/kubernetes/kubernetes/issues/24137
Aby wyświetlić listę wszystkich wdrożeń:
Następnie, aby usunąć wdrożenie:
Gdzie NAMESPACE to przestrzeń nazw, w której się znajduje, a DEPLOYMENT to
name
wdrożenie.W niektórych przypadkach może również działać z powodu zadania lub zestawu demonów. Sprawdź poniższe i uruchom odpowiednie polecenie usuwania.
źródło
kubectl create
polecenia.kubectl get jobs
kubectl delete replicasets,subscriptions,deployments,jobs,services,pods --all -n <namespace>
Zamiast próbować dowiedzieć się, czy jest to wdrożenie, deamonset, statefulset ... czy co (w moim przypadku był to kontroler replikacji, który ciągle obejmował nowe pody :) Aby ustalić, co to było, co obejmowało obraz, ja otrzymałem wszystkie zasoby za pomocą tego polecenia:
kubectl get all
Oczywiście możesz także pobrać wszystkie zasoby ze wszystkich przestrzeni nazw:
kubectl get all --all-namespaces
lub zdefiniuj przestrzeń nazw, którą chcesz sprawdzić:
kubectl get all -n NAMESPACE_NAME
Kiedy zobaczyłem, że kontroler replikacji jest odpowiedzialny za mój problem, usunąłem go:
kubectl delete replicationcontroller/CONTROLLER_NAME
źródło
jeśli twój pod ma nazwę taką jak
name-xxx-yyy
, może być kontrolowany przez replicasets.apps o nazwiename-xxx
, powinieneś najpierw usunąć ten zestaw replik przed usunięciem podakubectl delete replicasets.apps name-xxx
źródło
kubectl delete --all jobs -n <namespace>
kubectl get replicasets.apps -n <namespace>
(lub - wszystkimi przestrzeniami nazw)Zwróć także uwagę na zestawy stanowe
aby usunąć wszystkie stanowe zestawy w przestrzeni nazw
aby usunąć je jeden po drugim
źródło
W niektórych przypadkach kapsuły nadal nie znikną, nawet po usunięciu rozmieszczenia. W takim przypadku, aby wymusić ich usunięcie, możesz uruchomić poniższe polecenie.
kubectl delete pods podname --grace-period=0 --force
źródło
Recreate
.Zapewni to informacje o wszystkich zasobnikach, wdrożeniach, usługach i zadaniach w przestrzeni nazw.
pody mogą być tworzone przez wdrożenia lub zadania
Jeśli usuniesz wdrożenie lub zadanie, ponowne uruchomienie podów może zostać zatrzymane.
źródło
Wiele odpowiedzi tutaj mówi, aby usunąć określony obiekt k8s, ale możesz usunąć wiele obiektów naraz, zamiast jednego po drugim:
kubectl delete deployments,jobs,services,pods --all -n <namespace>
W moim przypadku używam klastra OpenShift z OLM - Operator Lifecycle Manager . OLM kontroluje wdrożenie, więc kiedy usunąłem wdrożenie, nie wystarczyło, aby zatrzymać ponowne uruchamianie strąków.
Dopiero gdy usunąłem OLM i jego subskrypcję , wdrożenie, usługi i pody zniknęły.
Najpierw wypisz wszystkie obiekty k8s w twojej przestrzeni nazw:
OLM nie ma na liście
get all
, więc szukam go konkretnie:Teraz usuń wszystkie obiekty, w tym OLM, subskrypcje, wdrożenia, zestawy replik itp .:
Wyświetl ponownie obiekty - wszystkie zniknęły:
źródło
Gdy kapsuła jest odtwarzana automatycznie, nawet po ręcznym usunięciu kapsuły, wówczas te kapsuły zostały utworzone przy użyciu wdrożenia. Podczas tworzenia stanowiska automatycznie tworzy ReplicaSet i Pods. W zależności od liczby replik kapsuły wymienionej w skrypcie wdrażania początkowo utworzy tę liczbę zasobników. Gdy spróbujesz ręcznie usunąć dowolny pod, automatycznie utworzy on ponownie ten pod.
Tak, czasami trzeba siłą usunąć strąki. Ale w tym przypadku polecenie siły nie działa.
źródło
Zamiast usuwać NS możesz spróbować usunąć replicaSet
Następnie usuń replicaSet
źródło
Po skorzystaniu z interaktywnego samouczka otrzymałem kilka podów, usług i wdrożeń:
Aby wszystko wyczyścić,
delete --all
działało dobrze:To pozostawiło mi (wydaje mi się) pusty klaster Kubernetes:
źródło
Jeśli masz zadanie, które nadal działa, musisz je przeszukać i usunąć:
kubectl get job --all-namespaces | grep <name>
i
kubectl delete job <job-name>
źródło
Możesz
kubectl get replicasets
sprawdzić stare wdrożenie na podstawie wieku lub czasuUsuń stare wdrożenie na podstawie czasu, jeśli chcesz usunąć ten sam aktualnie działający moduł aplikacji
źródło
Napotkałem również problem, użyłem poniższego polecenia, aby usunąć wdrożenie.
ale strąki wciąż się odtwarzały, więc przekroczyłem sprawdzenie zestawu replik za pomocą poniższego polecenia
następnie edytuj zestaw replik na 1 do 0
źródło
Główną przyczyną zadanego pytania był atrybut specyfikacji deployment / job / replicasets,
strategy->type
który definiuje, co powinno się zdarzyć, gdy pod zostanie zniszczony (niejawnie lub jawnie). W moim przypadku tak byłoRecreate
.Zgodnie z odpowiedzią @ nomad , usunięcie zestawów wdrożeniowych / zadań / replik jest prostym rozwiązaniem pozwalającym uniknąć eksperymentowania ze śmiercionośnymi kombinacjami przed zepsuciem klastra jako początkujący użytkownik.
Wypróbuj następujące polecenia, aby zrozumieć działania za kulisami, zanim przejdziesz do debugowania:
źródło
W moim przypadku wdrożyłem za pomocą pliku YAML, takiego jak
kubectl apply -f deployment.yaml
i wydaje się, że rozwiązaniem jest usunięcie za pośrednictwemkubectl delete -f deployment.yaml
źródło
Doświadczyłem podobnego problemu: po usunięciu wdrożenia (
kubectl delete deploy <name>
) pody nadal działały i były automatycznie tworzone ponownie po usunięciu (kubectl delete po <name>
).Okazało się, że skojarzony zestaw replik nie został z jakiegoś powodu usunięty automatycznie, a po usunięciu tego (
kubectl delete rs <name>
) można było usunąć pody.źródło
W przypadku wdrożeń, które mają zestawy stanowe (lub usługi, zadania itp.), Możesz użyć tego polecenia:
To polecenie kończy wszystko, co działa w określonym
<NAMESPACE>
I mocny
źródło