如何优化k8s中HPA的弹性速率
本文分享自华为云社区《K8s 核心资源指标HPA性能优化之路》,作者:可以交个朋友。
一 背景
以弹性指标为cpu、memory为例。在Kubernetes 1.7版本中引入了聚合层,允许第三方应用程序注册相关API接口到kube-apiserver上。其中 /apis/metrics.k8s.io/v1beta1
一般由metrics-server程序提供,以插件的形式安装在K8s集群中。相关流程如下:
纵观整个链路如何优化HPA的弹性速率呢?
二 关键时间点分析
首先对于HPA controller
Kubernetes 将HPA pod自动扩缩实现为一个间歇运行的控制回路,间隔由kube-controller-manager的 --horizontal-pod-autoscaler-sync-period参数设置,默认间隔为15s。
然后kubelet指标汇总。kubelet提供指标端点:10250/metrics/resource 15刷新一次指标数据。容器指标由cadvisor负责采集,cAdvisor已经集成到kubelet程序当中。
metrics-server默认抓取时间为60s一次,60s的时间间隔内,kubelet的指标已经刷新4轮了,HPAcontroller也运行4轮了。
所以我们优化的思路可以从metrics-server程序入手,可以将HPA弹性响应速率提高45s左右。kube-controller-manager的参数不宜修改,设置过短会对集群控制面造成压力,产生过载风险。kubelet刷新指标间隔15s 同样也是一个合理且推荐的数值。
三 优化方案
metrics-server启动参数--metric-resolution
可用于设置指标保留的时间。默认是60s,我们可以将该值设置为15s 加快pod资源指标的获取速率。
未修改指标保存时间前,查看metrics-server日志可以发现平均60s抓取一次指标
修改metrics-server负载配置,添加启动参数containers: - command: - /metrics-server - --metric-resolution=15s # 添加该参数,加快指标更新速率 - --v=6 # 可设置日志级别,可以通过日志查看进程工作信息 - xxx
查看metrics-server日志发现抓取指标间隔为15s
四 验证过程
主要是对比优化该参数后,HPA弹性的速率是否提高。
基于负载app01创建伸缩策略,以cpu指标为例,HPA配置清单如下:
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: app01 namespace: hu spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: app01 minReplicas: 1 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 50
4.1 优化前
对工作负载进行压测,探知HPAcontroller感知metrics的变化并观察HPA弹性的灵敏度
通过上图我们可以发现,HPA对指标变化感知滞后:
其中60s-90s区间内,指标数值一直为250%,未发生变化。实际情况是HPAcontroller已经运转三次,但是每次获取的指标均为250%。
4m-7m15s区间内,每隔60s HPA状态刷新一次,也就是说60s后 HPAcontroller才能感知下游服务的状态变化。
可能大家也会有疑问,在执行 kubectl get xxx -w 的时候,每隔15s也刷新了一次数据,那是因为有其它value值发生了变化,例如REPLICAS值发生了变化,所以被记录了下来,并不是因为指标刷新触发的。
4.2 优化后
对工作负载进行压测,探知HPAcontroller感知metrics的变化并观察HPA弹性的灵敏度
通过上图我们可以发现,HPA对指标变化的获取提升明显,几乎每隔15s指标都会变化一次,如果获取的指标满足扩容条件则会立马扩容。
其中 60s-90s 区间内,其它选项保持不变(MINPODS、MAXPODS、REPLICAS),指标每隔15s就会刷新一次。HPA会根据当前获取的指标结合特定算法进行扩缩的实例的判断。
其中2m15s-4m 区间内,其它选项保持不变,指标固定每隔15s会刷新一次。
可能大家会有疑问,明明指标已经达到扩容条件了,例如60s那个时间点,这就和HPA算法有关系了,如果存在未就绪状态或者不健康的pod,这些pod会被搁置掉不参与计算,所以75s那个时间,并未看到扩容行为。但是这些动作不与metrics指标层面冲突,metrics-server每隔15s上报一次指标,剩下具体的扩缩就是HPA controller该做的了。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
RWKV 元始智能完成种子轮融资,非 Transformer 架构的开源大语言模型
元始智能是一家国产开源非Transformer架构大语言模型提供商,其核心产品RWKV兼具Transformer和RNN的优势:推理效率高且恒定,显存占用少且恒定,支持无限上下文,对芯片友好。 近日,RWKV元始智能完成种子轮融资,投资方为陆奇于2018年创立的奇绩创坛和某匿名投资者。目前元始智能已开始继续融第二轮。 RWKV是国产开源的首个非Transformer架构的大语言模型,目前已经迭代到第六代RWKV-6。 RWKV作者彭博在2022年5月开始训练RWKV-2,当时只有1亿(100M)参数规模,后续在2023年3月训练了RWKV-4 140亿(14B)参数版本。 RWKV-5的15亿和30亿参数版本已发布,且70亿参数版本会在2024年1月发布。而RWKV-6的15亿和30亿参数版本将在2024年2月发布,然后将继续训练70亿和140亿参数版本。 RWKV-5和RWKV-6系列的特点是支持全球100+种语言,也支持几十种编程语言,目前可以在 https://www.rwkv.com/ 体验在线Demo。
- 下一篇
想提高阅读代码的效率?试试这些工具吧!| 京东云技术团队
1.前言 程序员间有句名言——“Talk is cheap, show me the code!”源码的确相较于言语更接近程序真实的状态,包含了更多的一手信息。因此,无论是刚开始学习代码的小白还是久经沙场的代码大神,不管是学习优秀的开源项目还是做老项目的重构,代码阅读都是开发者必备的技能之一。但在业务场景越来越复杂、迭代越来越快的背景下,提高梳理代码的效率能够极大程度的提高开发人员的工作效率,进一步为业务创造新的价值。 工欲善其事必先利其器,阅读代码也能通过工具来提升效率,本文将介绍3种代码阅读辅助工具,大家不妨在工作中试用一下,看看是否能带来实际帮助。 2.工具 2.1 Source Insight SI使用静态代码分析技术,提供了多个维度代码分析结果展示,对代码阅读、快速查找、代码分析和代码格式化都有帮助。可惜的是只支持Windows系统,Mac如果要使用需要安装虚拟机。 ①代码可视化:提供各种图形可视化能力,包括继承关系图,CallGraph等; 继承关系图: CallGraph: ②代码检查:对于语法格式和样式进行检查; ④代码探索:查看函数和...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Mario游戏-低调大师作品
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题