记一次kubernetes Evicted的处理

背景:

事情这样的:kubernetes1.21.3集群。容器运行时containerd。除了K8s-node-06节点。
image.png保留这个docker节点有很多原因。比如当时没有想好用什么打包镜像。默认让jenkins打包镜像。还有就是我的gitlab 10.8.7版本contarinerd运行时下无法启动。就保留了这个节点运行gitlab pod。当然了也把这个节点设置为了不可调度。不相其他应用调度到这个节点上来!最近一段时间gitlab应用频繁出现Evicted的问题:
origin_img_v2_19dc7774-0bdc-48dc-a868-7332339fe78g.png
这样就陷入了一个死循环:我的k8s-node-06设置为了不可调度,然后gitlab pod异常了 重新调度也调度不到节点上来…收到报错然后上线查找问题

处理问题过程:

1. 首先将k8s-node-06节点设置为可调度使gitlab pod正常运行

image.png

[root@k8s-master-01 ~]# kubectl uncordon k8s-node-06
node/k8s-node-06 uncordoned

image.png
等待gitlab pod running 后 将k8s-node-06节点恢复不可调度

[root@k8s-master-01 ~]# kubectl get pods -n kube-ops
[root@k8s-master-01 ~]# kubectl cordon k8s-node-06
node/k8s-node-06 cordoned
[root@k8s-master-01 ~]# kubectl get nodes

image.png

2. describe Evicted pod 定位解决

[root@k8s-master-01 ~]# kubectl describe pods gitlab-84d4998c96-b6z2j -n kube-ops

注: pod名词不一致 忽略。只是举个例子
origin_img_v2_21e090c3-65a2-46ea-8173-aa937652621g.png
目测存储资源不够了?百度搜索关键词:The node was low on resource: ephemeral-storage。参照:https://blog.csdn.net/u013355826/article/details/101020231。可以确定是存储资源不足了。登陆k8s-node-06节点经过查找文件发现Anchore Enine安装后,扫描后后数据文件太大造成的。就删除了anchore Engine
中的扫描记录文件!观察一段事件后目测是正常了…

3. 如何批量删除Evicted pod?

然后pod 列表中还有好多Evicted 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

总结:

  1. 做好资源的监控
  2. kubectl命令的熟练掌握,高效运用
  3. 当然了最重要的还是处理问题的思路。先查看日志去定位问题!
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
Kubernetes中,当节点面临资源压力时,可能会触发Pod驱逐(Eviction)的机制。Pod驱逐是指将一些Pod从节点上驱逐出去,以释放资源给其他Pod使用。驱逐的条件和策略可以通过Kubelet的配置进行设置。 根据引用的资料,可以通过配置Kubelet的eviction参数来控制Pod的驱逐行为。Kubelet的配置文件中可以设置eviction的硬阈值、软阈值、软阈值宽限期和最小回收量等参数。当节点资源使用超过这些阈值时,Kubelet会根据驱逐策略来选择性地将一些Pod驱逐出去。 根据引用的描述,如果在重启Kubernetes集群的某个节点的Docker之后,发现大多数Pod的状态为evicted,那么很可能是由于节点面临资源压力导致的。这可能是因为在节点重启后,资源消耗较大的Pod被驱逐出去,以保证节点的正常运行。 根据引用的代码片段,调用ParseThresholdConfig函数可以解析用户配置的阈值参数。这些阈值参数用于配置Pod驱逐的条件。在Kubelet的配置中,可以设置硬阈值、软阈值、软阈值宽限期和最小回收量等参数。这些参数可以根据实际需求进行调整,以适应集群的资源管理策略。 综上所述,k8s Evicted是指在Kubernetes集群中,当节点面临资源压力时,Kubelet会根据配置的阈值参数选择性地将一些Pod驱逐出去,以释放资源给其他Pod使用。节点重启后,如果发现大多数Pod的状态为evicted,那么可能是因为节点资源不足导致的驱逐行为。可以通过调整Kubelet的配置来控制Pod的驱逐行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

对你无可奈何2008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值