如何基于容器网络流量指标进行弹性伸缩

news/发布时间2024/5/12 11:38:15

本文分享自华为云社区《【自定义指标HPA】基于容器网络流量指标进行弹性伸缩》,作者: 可以交个朋友。

一、背景

业务程序非CPU、memeory敏感类业务,希望可以基于流量指标进行HPA弹性伸缩,但是大部分程序并没有集成Prometheus SDK相关代码进行插桩。此时可以通过cAdvisor提供的容器网络流量指标实现业务峰谷期间的弹性扩缩容。

二、方案介绍

cAdvisor负责节点上的容器和节点本身资源的统计,内置在kubelet中,并通过kubelet的/metrics/cadvisor 接口对外提供API。它可以采集容器网络累积接收数据总量容器网络累积传输数据总量,即网络流入和流出指标。

参考指标:

container_network_receive_bytes_total 容器接受的网络流量,单位是字节数

image.png

container_network_transmit_bytes_total 容器传输的网络流量,单位是字节数

image.png

上面两个指标都是counter计数器类型,对应的值只增不减。在配置自定义指标转换规则时需要做下速率换算,将总量换算成每秒接受多少字节数的流量指标。

三、实践操作

3.1 安装Prometheus相关插件

建议使用华为云CCE产品,插件市场集成了kube-prometheus-stack,同时该插件也已经对接了CCE集群节点实现了节点cadvisor的指标监控。

image.png

插件安装完成后,可以通过访问prometheus UI查看指标信息:

image.png

3.2 配置Prometheus-adapter指标转换规则

kubectl -n monitoring edit configmap user-adapter-config

image.png
 - seriesQuery: 'container_network_receive_bytes_total{namespace!="",pod!=""}'seriesFilters: []resources:overrides:namespace:resource: namespacepod:resource: podname:matches: container_(.*)_totalas: "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: namespacepod:resource: podname:matches: container_(.*)_totalas: "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_totalcontainer_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

可以看到对应的指标和其返回的值。

image.png

也可以在CCE控制台进行自定义指标的查看,发现该指标已经可用:

image.png

3.4 测试HPA弹性功能

主要是观测能否根据该指标,即容器每秒接受的网络流量指标进行动态阔缩容。

编写HPA yaml文件,创建HPA弹性伸缩策略

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:name: hpa-app07namespace: default
spec:scaleTargetRef:apiVersion: apps/v1kind: Deploymentname: app07minReplicas: 1maxReplicas: 10metrics:- type: Podspods:metric:name: pod_network_receive_bytes_per_secondtarget:type: AverageValueaverageValue: 10

然后通过执行命令 while true; do curl clusterIP:port;done 进行压测,创造访问流量。

观测HPA实时动态kubectl get hpa xxx -w

image.png

可以看到随着流量指标数值的攀升,pod实例逐步开始扩容。直到扩容到实例上限。

image.png

停止压测观察HPA缩容变化,直到最后只剩下一个pod在运行。

image.png

四、补充

如何在CCE测查看负载实例的网络流量指标信息

image.png

负载级别网络流量指标展示:

image.png

Pod实例级别网络流量指标展示:

image.png

也可前往云原生观测-监控中心-仪表盘-选择Pod视图查看流量指标信息:

image.png

对比上述配置的自定义指标计算方式求的值基本吻合

image.png

 

点击关注,第一时间了解华为云新鲜技术~

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/55652788.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

Java 8 Supplier函数式接口介绍及代码样例

介绍 供应商接口(Supplier Interface)是 Java 8 引入的 java.util.function 包的一部分,用于在 Java 中实现函数式编程。它表示一个函数,该函数不接收任何参数,但会产生一个类型为 T 的值。 T:表示结果的类型 分配给 Supplier 类型对象的 lambda 表达式用于定义其 get(),…

MongoDB Server 用户名和密码登录

一、前言# 默认情况下,MongoDB实例启动运行时是没有启用用户访问权限控制的,也就是说,在实例本机服务器上都可以随意连接到实例进行各种操作,MongoDB不会对连接客户端进行用户验证,这是非常危险的 MongoDB Server默认不进行安全认证,即任何MongoDB Client都可以连接并拥有…

自我介绍+软工五问

作业要求这个作业属于哪个课程 软件工程2024这个作业要求在哪里 自我介绍+软工5问这个作业的目标 1. 注册一个博客园和Github账号,学习markdown文档的编写 2. 快速阅读教材并提出五个问题,让我们快速了解所学内容并对此进行思考。自我介绍 我叫徐天,来自黑龙江省。原本的专业…

读算法的陷阱:超级平台、算法垄断与场景欺骗笔记02_大数据

读算法的陷阱:超级平台、算法垄断与场景欺骗笔记02_大数据1. 大数据分析 1.1. 随着“大数据军备竞赛”与定价算法的广泛应用,线上购物平台与实体商铺的界限也变得越来越模糊 1.2. 在沃尔玛疯狂扩张的时代,它给地区性商业带来的伤害不亚于一场地震 1.2…

MacTeX 使用指南

MacTeX 发行版包含了一整套的 TeX/LaTeX 工具和程序。MacTeX 基本上是 TeX Live 的一个 macOS 版本。 安装 brew install --cask mactex使用 安装好 MacTeX 后,你会获得下列 5 款 GUI 工具:TeXShop: TeX/LaTeX 编辑器 BibDesk: 参考文献管理工具 LaTeXiT: 一种小巧的公式编辑…

多目标车辆行人的跟踪和计数案

多目标车辆行人的跟踪和计数案 如何使用 YOLOv4 目标检测完成对道路上的车辆、行人的检测、跟踪和计数。先放张图看效果。 绿框代表检测出的目标,粉色点代表每个检测框的中心点,红色数字用于跟踪该目标。当目标在画面上消失时,红色索引自动消失,有新目标出现时,生成新的索…