Kubernetes中被驱逐的豆荚会发生什么?

我刚刚看到我的一些豆荚被kubernetes赶走了。 他们会发生什么? 只是像那样闲逛,还是我必须手动删除它们?

reachlin asked 2020-07-24T19:13:34Z
10个解决方案
44 votes

我使用的一种快速解决方法是在事件发生后手动删除所有驱逐的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
Kalvin answered 2020-07-24T19:14:07Z
15 votes

删除命名空间default中处于失败状态的Pod

kubectl -n default delete pods --field-selector=status.phase=Failed
ticapix answered 2020-07-24T19:14:27Z
8 votes

根据是否满足软驱逐或硬驱逐阈值,将在有或没有宽限期的情况下终止Pod中的容器,将kubectl drain标记为Failed,并删除Pod。 如果您的应用程序是运行的一部分,例如 在部署中,将由Kubernetes创建并计划另一个Pod-可能在另一个不超过其驱逐阈值的节点上。

请注意,逐出不一定是由阈值引起的,还可以通过kubectl drain调用以清空节点,或通过Kubernetes API手动进行。

Simon Tesar answered 2020-07-24T19:14:52Z
7 votes

逐出的豆荚应手动删除。 您可以使用以下命令删除处于Error状态的所有Pod。

kubectl get pods --all-namespaces --field-selector 'status.phase==Failed' -o json | kubectl delete -f -
Hansika Madushan Weerasena answered 2020-07-24T19:15:12Z
3 votes

相当于Kalvin删除所有“驱逐”的Pod的OpenShift命令:

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')"
ffghfgh answered 2020-07-24T19:15:32Z
3 votes

如果您要保留状态为Completed的吊舱,请执行以下操作:

kubectl get pods --all-namespaces --field-selector 'status.phase==Failed' -o json | kubectl delete -f -
mefix answered 2020-07-24T19:15:52Z
2 votes

以防万一某人想要自动删除所有命名空间的所有驱逐Pod:

  • 电源外壳
    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
LucasPC answered 2020-07-24T19:16:21Z
1 votes

默认情况下,存在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垃圾收集器。

Stefano Pirrello answered 2020-07-24T19:16:54Z
0 votes

这是有关如何对阈值进行硬编码的“官方”指南(如果您不想看到太多被驱逐的豆荚):kube-control-manager

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

tikael answered 2020-07-24T19:17:18Z
0 votes

另一个bash命令删除被驱逐的Pod

kubectl get pods | grep Evicted | awk '{print $1}' | xargs kubectl delete pod
Roman Marusyk answered 2020-07-24T19:17:38Z
translate from https://stackoverflow.com:/questions/46419163/what-will-happen-to-evicted-pods-in-kubernetes