登录
注册
开源
企业版
高校版
搜索
帮助中心
使用条款
关于我们
开源
企业版
高校版
私有云
模力方舟
登录
注册
代码拉取完成,页面将自动刷新
开源项目
>
开发工具
>
测试工具
&&
捐赠
捐赠前请先登录
取消
前往登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
Watch
不关注
关注所有动态
仅关注版本发行动态
关注但不提醒动态
15
Star
29
Fork
41
openEuler
/
rubik
代码
Issues
3
Pull Requests
3
Wiki
统计
流水线
服务
JavaDoc
PHPDoc
质量分析
Jenkins for Gitee
腾讯云托管
腾讯云 Serverless
悬镜安全
阿里云 SAE
Codeblitz
SBOM
我知道了,不再自动展开
236
rubik: optimize triggers & resource manager & psi
已合并
vegbir:main
openEuler:master
vegbir
创建于 2024-11-01 11:13
克隆/下载
HTTPS
SSH
复制
下载 Email Patch
下载 Diff 文件
### 描述 我们重构如下: 1. 触发器模块 2. 资源管理器模块 3. PSI服务模块 初始,我们声明了`Trigger`接口。`Trigger`接口将触发器结构分解为执行器(`Executor`接口)和结构管理器(`Setter`接口)两部分。 随后基于该接口实现了`TreeTrigger`。`TreeTrigger`提供了树形的`Trigger`管理方式(即`Setter`接口)。 并且我们提供了`resourceanalysis`和`eviction`两个基础`Executor`接口的实现,从而实现了两个单例Trigger(即`resourceanalysisTrigger`和`evictionTrigger`),并通过工厂类接口将单例Trigger返回给调用者。 为了实现Trigger之间的数据传递,我们构造Factor类型保存相关数据。 但存在问题: 1. Executor生命周期不符合逻辑。Exector的生命周期应该追随服务,但是当前需要用户手动停止。例如`resourceanalysis`使用了`cadvisor`获取资源利用率。因此主代码里增加了`StopUsedExecutors`,用于停止`Executor`。 2. 接口耦合。当前`resourceanalysisTrigger`中资源管理器是确定的,但是不同服务可能会使用不同的资源管理器甚至是不同参数的同一种资源管理器。若拓展新的资源管理器,资源分析的相关代码冗余。 3. 重复代码:`resourceanalysisTrigger`和`evictionTrigger`有部分代码是重复的。统计资源利用率也存在重复。 因此,我们进行重构: 1. 抽象资源管理器为`Manager`接口,`cadvisor`是其中一种实现。我们提供了工厂类方法返回`Manager`的生成器,以及对应管理器的配置选项。用户可自定义配置选项,并传入对应的`Manager`生成器。 2. 抽象资源分析类,资源分析类向外提供不同类型的分析器生成器。 3. 抽象基础触发器模板`BaseTemplate`。`BaseTemplate`进一步抽象`Executor`接口为`Transformation`和`Action`。`Transformation`类型表示将输入通过计算后返回特定输出(如`resourceanalysisTrigger`),`Action`类型则是对输入进行操作,不返回数据(如`evictionTrigger`)。参数通过统一使用上下文变量传递,并定义标准键用于传递数据。 4. 提供通用的`Transformation`(Eviction)和`Action`(MaxResource)。 5. 适配PSI。PSI服务管理Resource Manager的启停。执行不同类型操作Trigger的声明由服务定义。 6. 提供kubernetes clientSet单例。对于多模块通用变量,定义统一全局单例,避免重复链接消耗资源。 ### 关联issue NA ### 修改类型 - 代码重构 ### API变更 NA ### 测试用例 ### 验证报告 启动离线和在线业务,并给在线业务加压 ```bash [root@master ~]# kubectl get pods -A NAMESPACE NAME READY STATUS RESTARTS AGE default online 1/1 Running 0 36m default test 1/1 Running 0 50s ``` 在线业务加压后可以看到: ```bash 2024-11-01 07:51:35.894 [rubik] level=warn /root/workSpace/repos/gitee/rubik/pkg/common/log/log.go:246:Warnf() cpu resource of pod 4560b296-3ca8-42f9-a227-88e9a129703e reaches psi avg10 threshold (cur: 44.33, threshold: 5) 2024-11-01 07:51:35.894 [rubik] level=error /root/workSpace/repos/gitee/rubik/pkg/common/log/log.go:251:Errorf() failed to monitor PSI metrics: failed to execute psi_cpu_trigger: failed to transform pod: failed to find target pod ``` 此时由于离线业务不适用内存,因此无需删除 随后为离线业务加压,可以看到: ```bash 2024-11-01 07:52:55.936 [rubik] level=warn /root/workSpace/repos/gitee/rubik/pkg/common/log/log.go:246:Warnf() cpu resource of pod 4560b296-3ca8-42f9-a227-88e9a129703e reaches psi avg10 threshold (cur: 49.12, threshold: 5) 2024-11-01 07:52:55.937 [rubik] level=info /root/workSpace/repos/gitee/rubik/pkg/common/log/log.go:241:Infof() find the pod(test) with the highest utilization(99.46910913006141) 2024-11-01 07:52:55.937 [rubik] level=info /root/workSpace/repos/gitee/rubik/pkg/common/log/log.go:241:Infof() evicting pod "test" ``` 离线业务被删除。 
怎样手动合并此 Pull Request
git checkout master
git pull https://gitee.com/vegbir/rubik.git main
git push origin master
评论
13
提交
1
文件
18
检查
代码问题
0
批量操作
展开设置
折叠设置
审查
Code Owner
审查人员
weibaohui
weibaohui
Jianmin
jianminw
yangzhao_kl
yangzhao_kl
haozi007
duguhaotian
leon wang
wonleing
鲁卫军
lu-wei-army
gaodaweiky
gaodaweiky
zmr_2020
zmr_2020
zhongtao
taotao-sauce
liuxu
liuxu180400617
未设置
最少人数
0
测试
weibaohui
weibaohui
Jianmin
jianminw
yangzhao_kl
yangzhao_kl
haozi007
duguhaotian
leon wang
wonleing
鲁卫军
lu-wei-army
gaodaweiky
gaodaweiky
zmr_2020
zmr_2020
zhongtao
taotao-sauce
liuxu
liuxu180400617
未设置
最少人数
0
优先级
不指定
严重
主要
次要
不重要
标签
openeuler-cla/yes
lgtm
approved
ci_successful
sig/sig-CloudNative
关联 Issue
未关联
Pull Request 合并后将关闭上述关联 Issue
里程碑
未关联里程碑
参与者
(4)
1
https://gitee.com/openeuler/rubik.git
git@gitee.com:openeuler/rubik.git
openeuler
rubik
rubik
点此查找更多帮助
搜索帮助
Git 命令在线学习
如何在 Gitee 导入 GitHub 仓库
Git 仓库基础操作
企业版和社区版功能对比
SSH 公钥设置
如何处理代码冲突
仓库体积过大,如何减小?
如何找回被删除的仓库数据
Gitee 产品配额说明
GitHub仓库快速导入Gitee及同步更新
什么是 Release(发行版)
将 PHP 项目自动发布到 packagist.org
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册