如何基于容器网络流量指标进行弹性伸缩
本文分享自华为云社区《【自定义指标HPA】基于容器网络流量指标进行弹性伸缩》,作者: 可以交个朋友。
一、背景
业务程序非CPU、memeory敏感类业务,希望可以基于流量指标进行HPA弹性伸缩,但是大部分程序并没有集成Prometheus SDK相关代码进行插桩。此时可以通过cAdvisor提供的容器网络流量指标实现业务峰谷期间的弹性扩缩容。
二、方案介绍
cAdvisor负责节点上的容器和节点本身资源的统计,内置在kubelet中,并通过kubelet的/metrics/cadvisor
接口对外提供API。它可以采集容器网络累积接收数据总量
和容器网络累积传输数据总量
,即网络流入和流出指标。
参考指标:
container_network_receive_bytes_total
容器接受的网络流量,单位是字节数
container_network_transmit_bytes_total
容器传输的网络流量,单位是字节数
上面两个指标都是counter
计数器类型,对应的值只增不减。在配置自定义指标转换规则时需要做下速率换算,将总量换算成每秒接受多少字节数的流量指标。
三、实践操作
3.1 安装Prometheus相关插件
建议使用华为云CCE产品,插件市场集成了kube-prometheus-stack,同时该插件也已经对接了CCE集群节点实现了节点cadvisor的指标监控。
插件安装完成后,可以通过访问prometheus UI查看指标信息:
3.2 配置Prometheus-adapter指标转换规则
kubectl -n monitoring edit configmap user-adapter-config
- seriesQuery: 'container_network_receive_bytes_total{namespace!="",pod!=""}' seriesFilters: [] resources: overrides: namespace: resource: namespace pod: resource: pod name: matches: container_(.*)_total as: "pod_${1}_per_second" metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>}[3m])) by (<<.GroupBy>>)/1000 - seriesQuery: 'container_network_transmit_bytes_total{namespace!="",pod!=""}' seriesFilters: [] resources: overrides: namespace: resource: namespace pod: resource: pod name: matches: container_(.*)_total as: "pod_${1}_per_second" metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>}[3m])) by (<<.GroupBy>>)/1000
注意: 修改后需要重启monitoring命名空间下的custom-metrics-apiserver
负载实例。
其中metricsQuery: sum(rate(<<.Series>>{<<.LabelMatchers>>}[3m])) by (<<.GroupBy>>)/1000
配置表示 最近3min内pod每秒接受的请求量,由于container_network_receive_bytes_total
和container_network_transmit_bytes_total
是counter类型的指标,指标数值会一直递增,所以需要将指标做下速率换算。 除以/1000 则表示以kb为单位,默认单位是字节数,查出来的值会很大,该处可以根据实际情况进行配置。
resources
处配置则是将Prometheus中查询的指标和K8s集群中的资源进行匹配映射。
name
处配置则是将Prometheus查询出来的指标,进行重命名处理,增强指标可读性。 3.3 验证自定义弹性指标是否可用
调用接口访问自定义指标:
kubectl get --raw="/apis/custom.metrics.k8s.io/v1beta1/namespaces/default/pods/*/pod_network_receive_bytes_per_second" |jq
可以看到对应的指标和其返回的值。
也可以在CCE控制台进行自定义指标的查看,发现该指标已经可用:
3.4 测试HPA弹性功能
主要是观测能否根据该指标,即容器每秒接受的网络流量指标进行动态阔缩容。
编写HPA yaml文件,创建HPA弹性伸缩策略
apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: hpa-app07 namespace: default spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: app07 minReplicas: 1 maxReplicas: 10 metrics: - type: Pods pods: metric: name: pod_network_receive_bytes_per_second target: type: AverageValue averageValue: 10
然后通过执行命令 while true; do curl clusterIP:port;done
进行压测,创造访问流量。
观测HPA实时动态kubectl get hpa xxx -w
可以看到随着流量指标数值的攀升,pod实例逐步开始扩容。直到扩容到实例上限。
停止压测观察HPA缩容变化,直到最后只剩下一个pod在运行。
四、补充
如何在CCE测查看负载实例的网络流量指标信息
负载级别网络流量指标展示:
Pod实例级别网络流量指标展示:
也可前往云原生观测-监控中心-仪表盘-选择Pod视图查看流量指标信息:
对比上述配置的自定义指标计算方式求的值基本吻合
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Open-Sora:开源 Sora 复现方案,成本降低 46%,序列扩充至近百万
Colossal-AI开源了完整的Sora复现架构方案Open-Sora,声称可降低46%复现成本,并将模型训练输入序列长度扩充至819K patches。 Sora 算法复现方案 在Sora的技术报告中,Sora使用了一个视频压缩网络将各种尺寸的视频压缩成一个隐空间(latent space)的时空块序列(a sequence of patial temporal patch),然后使用了Diffusion Transformer进行去噪,最后进行解码生成视频。 Open-Sora将Sora可能使用的训练pipeline归纳为下图。 目前Open-Sora已涵盖: 提供完整的Sora复现架构方案,包含从数据处理到训练推理全流程。 支持动态分辨率,训练时可直接训练任意分辨率的视频,无需进行缩放。 支持多种模型结构。由于Sora实际模型结构未知,我们实现了adaLN-zero、cross attention、in-context conditioning(token concat)等三种常见的多模态模型结构。 支持多种视频压缩方法。用户可自行选择使用原始视频、VQVAE(视频原生的模型)...
- 下一篇
精细调度:Apache DolphinScheduler脚本深度解析
在现代数据处理和工作流管理中,Apache DolphinScheduler以其灵活性和强大的调度能力受到开发者的广泛欢迎。 本文将逐步解析DolphinScheduler的关键脚本,希望能提供一个详尽的操作指南,帮助大家掌握安装、配置和操作的每一步。 建立在./bin/env/下目录的配置文件建立好的前提。 安装流程解析 ./install.sh 通过source获取install_env.sh和dolphinscheduler_env.sh中的环境变量,如master、worker的基本信息。 在当前机器上创建安装目录,并给目录授权。 向其他节点发送dolphinscheduler的解压文件 停止所有的服务 删除zk上的dolphinscheduler根节点 启动dolphinscheduler所有的服务。 拷贝文件到工作节点 workDir=`dirname $0` workDir=`cd ${workDir};pwd` source ${workDir}/env/install_env.sh # 获取workers=${workers:-"ds1:default,ds2:def...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2整合Redis,开启缓存,提高访问速度