首页 > 其他分享 >kubernetes负载感知调度

kubernetes负载感知调度

时间:2024-08-14 15:48:40浏览次数:11  
标签:负载 kubernetes 调度 节点 集群 感知 热点 利用率

背景

kubernetes 的原生调度器只能通过资源请求来调度 pod,这很容易造成一系列负载不均的问题,
并且很多情况下业务方都是超额申请资源,因此在原生调度器时代我们针对业务的特性以及评估等级来设置 Requests/Limit 比例来提升资源利用效率。
在这种场景下依然存在很多问题:

  1. 节点负载不均:原生 Kubernetes Scheduler 根据 Requests 和节点可分配总量来调度 Pod,既不考虑实时负载,也不估计使用量,这种纯静态的调度导致节点资源利用率分配不均。
    在流量波动性业务的场景下,在流量高峰时,部分节点利用率突破安全阈值,但是很多节点的利用率特别点,节点利用率相差特别大
  2. 业务周期性:在离线集群分离,在线集群底峰存在巨大资源浪费

本文主要讨论如果解决问题一,在线集群内部提升资源利用率

在线集群 Cpu 离散系数0.45,整个集群高峰时 Cpu 利用率仅25%左右;下图 Cpu 使用率离散图:

file

破局

基于上述情况,高峰时 Cpu 利用率仅25%肯定不是合理的情况,业界做的好的50%+。想要继续提升利用率,必须解决节点负载不均问题:

  1. 感知节点真实负载:要解决节点负载不均问题,必须要上报节点当前真实的负载
  2. 基于负载的正向调度插件:在默认调度器的基础上增加基于负载的调度插件,在正向调度是尽量保证节点间水位平均
  3. 基于负载的重调度组件:当业务不断波动,节点可能会因为应用负载变化导致节点负载出现差别,需要重调度迁移 Pod 重新达到平均

实践

关注的两个开源项目:

Koordinator: https://koordinator.sh/

Crane: https://gocrane.io/

相对于 Koordinator 专门为混部而生的软件,Crane以 Finops 为出发点,二者相比Koordinator更适合我们,在离线混部也是下一步计划。

调研测试

上线之后:
file

遇到的问题

  1. 热点节点问题:在业务高峰时,节点负载变高,会出现热点节点,这个时候需要重调度组件介入,把 Pod 重新调度到其他节点上

需要前置打散热点节点,这就需要对应用进行资源画像,在调度中分散这种类型的应用,避免业务高峰热点节点的产生
2. 在1中的情况下,扩容部分节点缓解集群压力时,新上的节点会迅速被热点Pod占满,导致节点负载升高,再次触发重调度

调整调度插件中负载均衡打分插件的权重,让节点负载更均衡,避免热点节点问题
3. 找到合适的节点规格,小规格节点,更容器出现热点节点

在我们的业务场景下下,当前来看48c节点热点节点出现几率小于32c

标签:负载,kubernetes,调度,节点,集群,感知,热点,利用率
From: https://www.cnblogs.com/leason001/p/18359138

相关文章

  • 拆除kubeadm部署的Kubernetes 集群
    kubeadm拆除Kubernetes集群工作节点在拆除集群之前,先从集群中删除所有的工作节点,而后拆除各控制平面节点。若仅拆除单个已然处于正常工作状态的节点:先禁止该节点作为调度目标:kubectlcordonNODE然后排空该节点:kubectldrainNODE待排空操作完成后,从控制平面上删除该节点......
  • 附038.Kubernetes_v1.30.3高可用部署架构二
    部署组件该Kubernetes部署过程中,对于部署环节,涉及多个组件,主要有kubeadm、kubelet、kubectl。kubeadm介绍Kubeadm为构建Kubernetes提供了便捷、高效的“最佳实践”,该工具提供了初始化完整Kubernetes过程所需的组件,其主要命令及功能有:kubeadminit:用于搭建Kuberne......
  • dapr部署到kubernetes
    apiVersion:apps/v1kind:Deploymentmetadata:name:dev-backendnamespace:dapr-demo03labels:app:app-backendservice:service-backendspec:replicas:3selector:matchLabels:app:dev-backendtemplate:metadata:......
  • 深入理解微服务中的负载均衡算法与配置策略
    上一期我们详细探讨了微服务之间的通信,特别是介绍了如何集成Ribbon。简单来说,通过使用resttemplate类进行RPC调用时,我们内部增加了一个拦截器来实现负载均衡。然而,我们并未深入讨论具体的负载均衡算法。因此,本章节的重点是介绍如何从多个副本中选择合适的节点进行服务调用。这将帮......
  • kubernetes基于csi使用rbd存储
    描述ceph-csi扩展各种存储类型的卷的管理能力,实现第三方存储ceph的各种操作能力与k8s存储系统的结合。通过ceph-csi使用cephrbd块设备,它动态地提供rbd以支持Kubernetes持久化存储,并将这些rbd映射给pod做为块设备持久化数据使用。Ceph将pod存在块设备的数据以副本......
  • 利用Jenkins Pipeline高效部署Kubernetes服务
    什么是JenkinsPipelineJenkinsPipeline是一种持续集成和持续交付(CI/CD)的功能,它允许开发者将复杂的构建、测试和部署流程编码为一系列称为“管道”的自动化步骤。这些步骤以Groovy脚本的形式编写,并且可以在Jenkins中可视化管理。Pipeline提供了代码化和可重用的构建过程,支持更......
  • Kubeadm方式部署3master,2work集群(Kubernetes-1.22.0)
    目录一.环境准备二.安装Docker和keepalived三.安装kubernetes四.获取镜像五.集群部署启动六. 配置haproxy七.配置keepalived八. 初始化集群九.配置加入集群十.配置使用网络插件十一. kubernetes命令自动补全Kubernetes-1.22.0可视化部署-CSDN博客......
  • 探索 Kubernetes 持久化存储之 Rook Ceph 初窥门径
    在Kubernetes生态系统中,持久化存储是支撑业务应用稳定运行的基石,对于维护整个系统的健壮性至关重要。对于选择自主搭建Kubernetes集群的运维架构师来说,挑选合适的后端持久化存储解决方案是关键的选型决策。目前,Ceph、GlusterFS、NFS、Longhorn和openEBS等解决方案已在业界......
  • Kubernetes 中必备的 10 个告警处置方法
    本文翻译自:https://sematext.com/blog/top-10-must-have-alerts-for-kubernetes/运行Kubernetes集群,显然不止是启动,还需要持续监控,以确保Kubernetes中的服务能正常运行。不过,您不想整天盯着一堆Kubernetes仪表板(即便仪表板再多么美观)。您希望使用适当的警报来设置Kuber......
  • nginx配置web服务|反向代理|负载均衡
    目录http模块server模块(虚拟主机配置)location模块基本语法匹配类型等号匹配(=)正则匹配(~)忽略大小写的正则匹配(~*)常见指令嵌套location反向代理负载均衡步骤1:定义Upstream块步骤2:配置Server和Location块示例配置负载均衡策略Q&A1.location里root和alias的区别是什么?Ngi......