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

💡 原文中文,约3100字,阅读约需8分钟。
📝

内容提要

本文介绍了使用容器网络流量指标进行弹性伸缩的方法,包括安装Prometheus插件、配置指标转换规则和验证自定义指标的可用性。通过测试HPA弹性功能,观察容器每秒接受的网络流量指标对扩缩容的影响。

🔎

延伸解读

为什么选择网络流量指标做HPA

文章指出,对于非CPU、内存敏感的业务,若程序未集成Prometheus SDK,无法直接暴露业务指标,此时可借助cAdvisor采集的容器网络流量指标实现弹性伸缩。cAdvisor内置于kubelet,通过/metrics/cadvisor接口提供容器网络累积接收和传输数据总量,即网络流入和流出指标,为无插桩场景提供了可行的替代方案。

指标转换的关键:从累计值到每秒速率

cAdvisor提供的container_network_receive_bytes_total和container_network_transmit_bytes_total均为counter类型,数值只增不减,不能直接用于HPA。文章强调需在Prometheus-adapter的metricsQuery中使用rate函数进行速率换算,例如sum(rate(<<.Series>>{<<.LabelMatchers>>}[3m])) by (<<.GroupBy>>)/1000,表示最近3分钟内Pod每秒接收的流量,

配置自定义指标的注意事项

在Prometheus-adapter的ConfigMap中,需通过seriesQuery筛选namespace和pod非空的指标,利用resources.overrides将namespace和pod映射到K8s资源,并通过name.matches和name.as将原始指标重命名为更易读的pod_network_receive_bytes_per_second等名称。文章特别提醒,修改配置后必须重启custom-metrics-apiserver负载实例,否则自定义指标可能无法生效。

验证与测试弹性伸缩的完整流程

配置完成后,可通过kubectl get --raw调用custom.metrics.k8s.io接口验证自定义指标是否可用,或在CCE控制台查看。随后编写HPA yaml,指定基于Pods类型的pod_network_receive_bytes_per_second指标,并设置averageValue阈值。通过压测命令生成流量,观察HPA动态扩容至上限,停止压测后逐步缩容至最小副本数,从而验证基于网络流量指标的弹性伸缩效果。

❓

Q&A

如何使用cAdvisor获取容器的网络流量指标?

cAdvisor内置在kubelet中,可以通过kubelet的/metrics/cadvisor接口获取容器的网络流入和流出指标。

如何将网络流量指标转换为每秒流量指标?

需要将总量换算为每秒流量指标,使用速率换算公式,例如sum(rate(container_network_receive_bytes_total[3m]))。

如何在华为云CCE中安装Prometheus插件?

建议使用华为云CCE产品,在插件市场中集成kube-prometheus-stack进行安装。

如何验证自定义弹性指标的可用性?

可以通过调用接口访问自定义指标,使用命令kubectl get --raw="/apis/custom.metrics.k8s.io/v1beta1/namespaces/default/pods/*/pod_network_receive_bytes_per_second"来查看指标值。

HPA弹性伸缩策略如何编写?

编写HPA yaml文件,指定scaleTargetRef、minReplicas、maxReplicas和metrics等参数来创建弹性伸缩策略。

如何观察HPA的动态扩缩容过程?

可以通过执行压测命令生成流量,并使用kubectl get hpa xxx -w命令实时观察HPA的扩缩容变化。

🏷️

标签

➡️

继续阅读