根据Nginx Ingress指标对指定后端进行HPA

💡 原文中文,约5700字,阅读约需14分钟。
📝

内容提要

本文介绍了使用Nginx Ingress指标对指定后端进行HPA的方法,实现基于不同域名和路径的请求量弹性指定后端工作负载。操作步骤包括创建弹性目标工作负载、查询指标、创建apiservices资源、添加externalRules规则、重启服务、创建HPA规则等。通过压测验证弹性效果。

🔎

延伸解读

为何选择Nginx Ingress指标做HPA

当应用性能瓶颈不在CPU或内存时,基于资源指标的HPA可能无法准确反映实际负载。Nginx Ingress的请求量指标(如nginx_ingress_controller_requests)能直接体现不同域名和路径的流量变化,据此配置HPA可实现更精准的弹性伸缩,尤其适合流量波动大且资源消耗平稳的服务。

命名空间限制与external方案

HPA的scaleTargetRef和describedObject字段无法指定命名空间,因此指标来源、HPA和弹性目标通常需在同一命名空间。但Nginx Ingress与业务工作负载常处于不同命名空间,此时采用external类型的HPA可以忽略指标来源的命名空间,通过配置resources.namespaced: false实现跨命名空间指标引用。

externalRules配置的关键点

在prometheus-adapter的configmap中添加externalRules时,需定义metricsQuery、seriesQuery和name等字段。其中resources.namespaced: false用于忽略指标来源的命名空间,使HPA能查询到不同命名空间下的指标。修改后需重启prometheus-adapter服务,并等待约1分钟使配置生效。

HPA规则中的指标筛选与目标值

创建HPA时,通过external.metric.selector.matchLabels可对指标进行过滤,例如指定exported_service和host标签,从而只针对特定后端和域名的请求量进行弹性。目标值类型仅支持Value和AverageValue,averageValue表示每个Pod平均处理的请求速率,需根据实际压测结果合理设置。

❓

Q&A

如何使用Nginx Ingress指标配置HPA?

可以通过nginx_ingress_controller_requests指标为应用配置HPA,以实现基于不同域名和路径的请求量弹性。

在配置HPA时需要注意哪些命名空间问题?

HPA规则中的scaleTargetRef和describedObject字段无法指定命名空间,需在同一命名空间内。

创建HPA规则时需要设置哪些参数?

需要设置最小和最大副本数,以及外部指标的筛选条件。

如何验证HPA的弹性效果?

可以通过压测访问域名和路径,观察是否正常触发弹性来验证HPA效果。

在创建external类型的apiservices资源时,状态为false正常吗?

是的,创建后apiservices的状态为false是正常现象,添加externalRules后状态会变为true。

环境准备中需要部署哪些组件?

需要部署nginx-ingress和kube-prometheus-stack,确保kubectl命令可用。

🏷️

标签

➡️

继续阅读