Właśnie widziałem, jak niektóre z moich kapsuł zostały eksmitowane przez kubernetes. Co się z nimi stanie? po prostu kręcę się w ten sposób czy muszę je ręcznie usunąć?
kubernetes
reachlin
źródło
źródło
Evicted
stanie od 13 dni. Wygląda na to, że eksmitowane strąki nie są usuwane (a może to tylko błąd).DiskPressure
), który można znaleźć za pomocąkubectl describe pods my-pod-name --namespace prod
Odpowiedzi:
Szybkim obejściem, którego używam, jest ręczne usunięcie wszystkich eksmitowanych podów po incydencie. Możesz użyć tego polecenia:
kubectl get pods --all-namespaces -o json | jq '.items[] | select(.status.reason!=null) | select(.status.reason | contains("Evicted")) | "kubectl delete pods \(.metadata.name) -n \(.metadata.namespace)"' | xargs -n 1 bash -c
źródło
-a
argument jest nieprawidłowy.Aby usunąć pody w stanie niepowodzenia w przestrzeni nazw
default
źródło
status.phase=Evicted
. Udało mi się to zrobić przezkubectl -n default delete pods --field-selector=status.phase!=Running
. Ale uważaj, to spowodowałoby usunięcie wszystkiegokubectl -n default get pods --field-selector=status.phase=Failed
.Evicted
strąków dla mnie.Eksmitowane strąki należy usunąć ręcznie. Możesz użyć następującego polecenia, aby usunąć wszystkie pody w
Error
stanie.kubectl get pods --all-namespaces --field-selector 'status.phase==Failed' -o json | kubectl delete -f -
źródło
W zależności od tego, czy został osiągnięty miękki lub twardy próg eksmisji , Kontenery w Kapsuły zostaną zakończone z lub bez okresu karencji,
PodPhase
zostaną oznaczone jakoFailed
a Pod usunięte. Jeśli Twoja aplikacja zostanie uruchomiona w ramach np. Wdrożenia, Kubernetes utworzy i zaplanuje kolejny Pod - prawdopodobnie na innym węźle nie przekraczającym progów eksmisji.Należy pamiętać, że eksmisja niekoniecznie musi być spowodowana przez progi, ale można ją również wywołać za pośrednictwem w
kubectl drain
celu opróżnienia węzła lub ręcznie za pośrednictwem interfejsu Kubernetes API .źródło
kubectl get pods -n mynamespace
kubectl describe pod <pod>
mówi?kubectl describe
mówi „Stan: niepowodzenie Przyczyna: eksmitowany Wiadomość: Pod W węźle brakowało zasobów: [MemoryPressure]”.Kube-controller-manager
istnieje domyślnie z działającą instalacją K8s. Wygląda na to, że domyślnie jest to maksymalnie 12500 zakończonych podów, zanim rozpocznie się GC.Bezpośrednio z dokumentacji K8s: https://kubernetes.io/docs/reference/command-line-tools-reference/kube-controller-manager/#kube-controller-manager
źródło
kubectl edit pod kube-controller-manager-<master_name> -n kube-system
,pod is invalid
wyświetla mi się błąd po zapisaniu pliku konfiguracyjnego.Jeśli masz pody ze
Completed
statusem, który chcesz zachować:kubectl get pods --all-namespaces --field-selector 'status.phase==Failed' -o json | kubectl delete -f -
źródło
Na przykład w przypadku, gdy ktoś chce automatycznie usunąć wszystkie eksmitowane pody dla wszystkich przestrzeni nazw:
Foreach( $x in (kubectl get po --all-namespaces --field-selector=status.phase=Failed --no-headers -o custom-columns=:metadata.name)) {kubectl delete po $x --all-namespaces }
kubectl get po --all-namespaces --field-selector=status.phase=Failed --no-headers -o custom-columns=:metadata.name | xargs kubectl delete po --all-namespaces
źródło
Odpowiednik OpenShift polecenia Kalvina, aby usunąć wszystkie „eksmitowane” pody:
eval "$(oc get pods --all-namespaces -o json | jq -r '.items[] | select(.status.phase == "Failed" and .status.reason == "Evicted") | "oc delete pod --namespace " + .metadata.namespace + " " + .metadata.name')"
źródło
Jeszcze jedno polecenie bash, aby usunąć eksmitowane strąki
kubectl get pods | grep Evicted | awk '{print $1}' | xargs kubectl delete pod
źródło
Aby usunąć wszystkie
Evicted
strąki na siłę, możesz wypróbować to jednowierszowe polecenie:$ kubectl get pod -A | sed -nr '/Evicted/s/(^\S+)\s+(\S+).*/kubectl -n \1 delete pod \2 --force --grace-period=0/e'
Wskazówki: użyj
p
modyfikatoras
poleceniased
zamiast poe
prostu wydrukuje rzeczywiste polecenie, aby wykonać zadanie usuwania:$ kubectl get pod -A | sed -nr '/Evicted/s/(^\S+)\s+(\S+).*/kubectl -n \1 delete pod \2 --force --grace-period=0/p'
źródło
Oto `` oficjalny '' przewodnik, jak na stałe zakodować próg (jeśli nie chcesz widzieć zbyt wielu eksmitowanych podów ): kube-controller-manager
Ale znanym problemem jest to, jak zainstalować kube-controller-manager ...
źródło
Jeszcze inny sposób
awk
.Aby zapobiec ludzkiemu błędowi, który mógłby doprowadzić mnie do szaleństwa (usuwanie pożądanych podów), sprawdzam przed wynikiem
get pods
polecenia:kubectl -n my-ns get pods --no-headers --field-selector=status.phase=Failed
Jeśli to wygląda dobrze, zaczynamy:
kubectl -n my-ns get pods --no-headers --field-selector=status.phase=Failed | \ awk '{system("kubectl -n my-ns delete pods " $1)}'
źródło
Poniższe polecenie usuwa wszystkie uszkodzone pody ze wszystkich przestrzeni nazw
kubectl get pods -A | grep Evicted | awk '{print $2 " -n " $1}' | xargs -n 3 kubectl delete pod
źródło
poniższe polecenie pobierze wszystkie eksmitowane pody z domyślnej przestrzeni nazw i usunie je
kubectl get pods | grep Evicted | awk '{print$1}' | xargs -I {} kubectl delete pods/{}
źródło