我刚刚看到我的一些豆荚被kubernetes赶走了。他们会发生什么?只是像那样闲逛,还是我必须手动删除它们?
Answers:
我使用的一种快速解决方法是在事件发生后手动删除所有驱逐的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
-a
参数无效。
在命名空间中删除处于失败状态的Pod default
kubectl -n default delete pods --field-selector=status.phase=Failed
status.phase=Evicted
。我设法做到了kubectl -n default delete pods --field-selector=status.phase!=Running
。但要小心,这将删除一切
kubectl -n default get pods --field-selector=status.phase=Failed
。
Evicted
为我摆脱了豆荚。
逐出的豆荚应手动删除。您可以使用以下命令删除所有处于Error
状态的Pod 。
kubectl get pods --all-namespaces --field-selector 'status.phase==Failed' -o json | kubectl delete -f -
根据是否满足软驱逐或硬驱逐阈值,将在有或没有宽限期的情况下终止Pod中的容器,PodPhase
标记为,Failed
并删除Pod。如果您的应用程序作为部署的一部分运行,则Kubernetes将创建并安排另一个Pod-可能在另一个不超过其驱逐阈值的节点上。
要知道,驱逐不一定必须由阈值引起的,但也可以通过调用kubectl drain
来清空一个节点或手动通过Kubernetes API。
kubectl get pods -n mynamespace
kubectl describe pod <pod>
发言权?
kubectl describe
说:“状态:失败原因:被驱逐的消息:Pod该节点的资源不足:[MemoryPressure]。”
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垃圾收集器。
kubectl edit pod kube-controller-manager-<master_name> -n kube-system
它,则pod is invalid
在保存配置文件后会出现错误。
以防万一有人想要自动删除所有命名空间的所有驱逐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
要Evicted
强制删除所有吊舱,可以尝试以下单行命令:
$ kubectl get pod -A | sed -nr '/Evicted/s/(^\S+)\s+(\S+).*/kubectl -n \1 delete pod \2 --force --grace-period=0/e'
提示:使用command的p
修饰符代替只会打印实际命令来执行删除作业:s
sed
e
$ kubectl get pod -A | sed -nr '/Evicted/s/(^\S+)\s+(\S+).*/kubectl -n \1 delete pod \2 --force --grace-period=0/p'
这是有关如何对阈值进行硬编码的“官方”指南(如果您不想看到太多被驱逐的豆荚):kube-control-manager
但是一个已知的问题是如何安装kube-control-manager ...
bellow命令从所有名称空间删除所有失败的Pod
kubectl get pods -A | grep Evicted | awk '{print $2 " -n " $1}' | xargs -n 3 kubectl delete pod
Evicted
了13天的吊舱。看起来被逐出的豆荚不会被移除(或者可能只是一个错误)。