根据Nginx Ingress指标对指定后端进行HPA
内容提要
本文介绍了使用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命令可用。