论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
DevOps与敏捷开发
›
如何优化k8s中HPA的弹性速率
如何优化k8s中HPA的弹性速率
莫张周刘王
金牌会员
|
2024-4-7 10:14:44
|
显示全部楼层
|
阅读模式
楼主
主题
689
|
帖子
689
|
积分
2067
本文分享自华为云社区《
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该做的了。
点击关注,第一时间了解华为云新鲜技术~
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
莫张周刘王
金牌会员
这个人很懒什么都没写!
楼主热帖
06、etcd 写请求执行流程
四、WinUI3下TitleBar的自定义
软件测试项目实战经验附视频以及源码【 ...
不同于Oracle:MySQL的insert会阻塞upd ...
MySQL用户和权限管理
网上书店管理系统项目【Java数据库编程 ...
c# sqlsugar,hisql,freesql orm框架全 ...
如何用同一套账号接入整个研发过程? ...
【云原生】三、详细易懂的Docker 容器 ...
CGCS2000坐标系和WGS84坐标系的区别与 ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表