Rancher&k8s主机调度不均衡问题解决

本文讲述了在Rancher Kubernetes集群中遇到的容器调度不均衡问题,通过分析调度策略并尝试设置资源预留无效后,采用Descheduler组件进行二次调度。配置Descheduler以根据节点上的Pod数量进行平衡,当节点Pod数量超过阈值时进行重新调度,有效解决了负载不均的问题。后续计划结合Prometheus监控指标进一步优化调度策略。
摘要由CSDN通过智能技术生成


最终方案《Rancher&k8s根据监控指标进行容器调度》

前言

最近发现Rancher集群的主机负载不均衡,有的主机只有十几个容器,有的主机有三十几个容器。容器部署采用默认主机调度规则,主机没有污点,容器有设置cpu和内存资源预留,但是发现容器调度不均衡,经常往资源占用高的主机部署。如截图红框中的主机明明资源相对富余,但新容器却不往该主机部署。导致个别主机实际负载高、个别主机空闲的情况。
在这里插入图片描述

一、环境信息

Rancher 版本:v2.5.11
Kubernetes 版本: v1.20.12

二、问题分析

起初怀疑是因为没有合理设置工作负载的资源预留(requests)导致调度器无视主机负载情况,所以为每个工作负载结合实际资源用量都设置了CPU和内存的资源预留,但是重新部署了之后情况没有改善,部署仍然不均衡。
查阅了k8s的调度策略之后,发现影响调度的因素很多,k8s调度分为断言(Predicates) 和优先级(Priorities) 两个阶段。首先根据污点、资源申请、是否指定节点、节点亲和性等设置排除不符合条件的节点;其次根据节点的pod数量、资源占用情况、是否存在所需镜像、节点亲和性等因素对节点进行评分,从而得出节点优先级。

三、解决方案

经过一番调试后仍然无法确定具体导致不均衡的因素,最终通过Descheduler组件二次调度达到均衡的效果。

四、Descheduler部署配置

1、获取yaml配置
git clone https://github.com/kubernetes-sigs/descheduler.git

git clone https://gitee.com/chest-hair/descheduler.git
从官方代码仓库拉取文件,在kubernetes目录下找到rbac.yaml、configmap.yaml和cronjob.yaml三个文件。
2、调整configmap.yaml配置
我期望它根据容器数量来平衡调度,所以把cpu和memory参数去除,pods上限调为27。当节点非系统pods数量超过27个时,会将多余的pods转移到其他节点。

             thresholds:
               #"cpu" : 20
               #"memory": 20
               "pods": 20
             targetThresholds:
               #"cpu" : 50
               #"memory": 50
               "pods": 27

3、部署组件

  • 通过Rancher导入yaml进行部署
  • 通过kubectl工具部署
    kubectl create -f kubernetes/rbac.yaml
    kubectl create -f kubernetes/configmap.yaml
    kubectl create -f kubernetes/job.yaml
    

4、查看调度日志
descheduler-cronjob定时任务每两分钟会执行一次调度。位于system项目》kube-system命名空间》descheduler-cronjob工作负载。
节点出现Node is overutilized说明该节点超过阈值,会进行重新调度。在这里插入图片描述


总结

1、为每个工作负载(Pods)添加资源预留(Reques),需要预留多少资源,可进入主机通过docker status命令查看容器资源使用情况来判断。
2、利用Descheduler组件进行Pods二次调度,按Pods数量进行调度,常规应用可设置Pods上限为:比两倍主机内存(G)少5个,例如16G主机则配置为27。视实际情况而定。

后续优化

通过容器数量去平衡仍然存在一定不合理性,最合理的还是根据节点实际负载来调度。后续的优化思路是通过Prometheus监控主机的实际CPU和内存使用率,将监控结果写入到节点label,再利用调度规则实现平衡。
已实现根据监控指标进行调度,详见《Rancher&k8s根据监控指标进行容器调度》

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

魔希达

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

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

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

打赏作者

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

抵扣说明:

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

余额充值