Próbowałem usunąć plik ReplicationController
z 12 zasobnikami i mogłem zobaczyć, że niektóre zasobniki utknęły w Terminating
stanie.
Mój klaster Kubernetes składa się z jednego węzła płaszczyzny sterowania i trzech węzłów roboczych zainstalowanych na maszynach wirtualnych Ubuntu.
Co może być przyczyną tego problemu?
NAME READY STATUS RESTARTS AGE
pod-186o2 1/1 Terminating 0 2h
pod-4b6qc 1/1 Terminating 0 2h
pod-8xl86 1/1 Terminating 0 1h
pod-d6htc 1/1 Terminating 0 1h
pod-vlzov 1/1 Terminating 0 1h
kubernetes
Dimuthu
źródło
źródło
Odpowiedzi:
Możesz użyć następującego polecenia, aby wymusić usunięcie POD.
źródło
--force
aby nakarmić strąki.Wymuś usunięcie zasobnika:
--force
Flaga jest obowiązkowe.źródło
kube-system
przestrzeni nazw.ktl get pods -o custom-columns=:metadata.name | xargs kubectl delete pod --force --grace-period=0
Usuń blok finalizatorów z zasobu (pod, wdrożenie, ds itp.) Yaml:
źródło
delete -grace-period=0 --force
nie zrobiłem. Byłbym też wdzięczny za wyjaśnienie, co dokładnie robi.Praktyczna odpowiedź - zawsze możesz usunąć zamykający moduł, uruchamiając:
Odpowiedź historyczna - w wersji 1.1 występował problem polegający na tym, że czasami strąki pozostawały w stanie Zakończenia, jeśli ich węzły zostały nieczysto usunięte z klastra.
źródło
kubectl delete pod NAME --grace-period=0
kubectl delete ...
jestSIG_TERM
żądanie zostanie wysłane do pojemnika. Ale co jeśli po okresie karencji pojemnik nadal działa?Terminating
Utknąłem kilka strąków , niektóre napisane na wynos, inne w nodejs. ReplicationController został usunięty, a kontener nadal działakubectl delete pod PODNAME --grace-period=0
pracował dla mnie, jak sugerował Clayton.Znalazłem to polecenie bardziej proste:
Usunie wszystkie zasobniki w stanie Zakończenia w domyślnej przestrzeni nazw.
źródło
kube-system
use:for p in $(kubectl get pods -n kube-system| grep Terminating | awk '{print $1}'); do kubectl delete pod $p --grace-period=0 --force -n kube-system;done
W moim przypadku
--force
opcja nie do końca działała. Nadal widziałem kapsułę! Utknął w trybie kończącym / nieznanym. Więc po uruchomieniuPobiegłem
źródło
Jeśli
--grace-period=0
nie działa, możesz:źródło
Natknąłem się na to niedawno podczas usuwania przestrzeni nazw gawronu - utknął w stanie Zakończenia.
Jedyną rzeczą, która pomogła, było usunięcie finalizatora kubernetes poprzez bezpośrednie wywołanie interfejsu API k8s z curl, jak sugerowano tutaj .
kubectl get namespace rook-ceph -o json > tmp.json
tmp.json
(zostaw pustą tablicę"finalizers": []
)kubectl proxy
w innym terminalu do celów uwierzytelniania i uruchom następujące żądanie curl do zwróconego portucurl -k -H "Content-Type: application/json" -X PUT --data-binary @tmp.json 127.0.0.1:8001/k8s/clusters/c-mzplp/api/v1/namespaces/rook-ceph/finalize
Szczegółowy porzucenie wieży Ceph tutaj .
źródło
Pierwotne pytanie brzmi „ Co może być przyczyną tego problemu? ”, A odpowiedź została omówiona na stronie https://github.com/kubernetes/kubernetes/issues/51835 & https://github.com/kubernetes/kubernetes/issues / 65569 i patrz https://www.bountysource.com/issues/33241128-unable-to-remove-a-stopped-container-device-or-resource-busy
Jest to spowodowane wyciekaniem montażu dokującego do innej przestrzeni nazw.
Możesz zalogować się do hosta pod w celu sprawdzenia.
źródło
Natknąłem się na to niedawno, aby uwolnić zasoby w moim klastrze. oto polecenie ich usunięcia.
mam nadzieję, że pomoże to komuś, kto to przeczyta
źródło