在kubernetes被驱逐的豆荚将会发生什么?

问题描述 投票:29回答:8

我刚刚看到我的一些豆荚被kubernetes驱逐出境。会发生什么事?只是像那样闲逛或者我必须手动删除它们?

kubernetes
8个回答
33
投票

我使用的一种快速解决方法是在事件发生后手动删除所有被驱逐的pod。您可以使用此命令:

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

7
投票

根据是否已经满足的软或硬eviction threshold,Pod中的容器将在有或没有宽限期的情况下终止,PodPhase将被标记为Failed并删除Pod。如果您的应用程序作为例如部署时,Kubernetes将创建并安排另一个Pod - 可能在另一个不超过其驱逐阈值的节点上。

请注意,驱逐不一定必须由阈值引起,但也可以通过kubectl drain调用到empty a node或通过Kubernetes API手动调用。


6
投票

删除命名空间default中的“失败”状态的窗格

kubectl -n default delete pods --field-selector=status.phase=Failed

4
投票

应手动删除被驱逐的pod。您可以使用以下命令删除Error状态中的所有pod。

kubectl get pods --all-namespaces --field-selector 'status.phase==Failed' -o json | kubectl delete -f -

3
投票

OpenShift相当于Kalvin删除所有'Evicted'豆荚的命令:

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')"

1
投票

如果您有要保持的Completed状态的pod:

kubectl get pods --all-namespaces --field-selector 'status.phase==Failed' -o json | kubectl delete -f -

0
投票

这是关于如何硬编码门槛的“官方”指南(如果你不想看到太多被驱逐的豆荚):kube-controll-manager

但一个已知问题是如何安装kube-controller-manager ...


0
投票

默认情况下,Kube-controller-manager存在工作K8s安装。在GC启动之前,默认情况下默认最多为12500个已终止的pod。

直接来自K8s文档:https://kubernetes.io/docs/reference/command-line-tools-reference/kube-controller-manager/#kube-controller-manager

--terminated-pod-gc-threshold int32默认值:12500 终止的pod垃圾收集器开始删除已终止的pod之前可以存在的已终止pod的数量。如果<= 0,则禁用终止的pod垃圾收集器。

© www.soinside.com 2019 - 2024. All rights reserved.