当前,我们有一条数据流管道:api调用-> google pub / sub-> BigQuery。 api调用的次数取决于网站的访问量。
我们创建了一个kubernetes部署(在GKE中),用于将数据从发布/订阅中提取到BigQuery。此部署具有带有metricName: pubsub.googleapis.com|subscription|num_undelivered_messages
和targetValue: "5000"
的水平容器自动缩放器(HPA)。这种结构能够在流量突然增加时自动缩放。但是,它将导致尖锐的缩放。
我所说的尖刻如下:
以下是尖峰图表(流量上升,但稳定且不尖峰): The spiky number of unacknowledged message in pub/sub
如果未确认消息的数量超过20k,我们将在堆栈驱动器中设置一个警报,在这种情况下,它将始终频繁触发。
在这种情况下,有没有办法使HPA变得更稳定(非尖峰)?
任何评论,建议或答案都很好。
谢谢!
答案 0 :(得分:0)
我一直在处理相同的行为。我最终要做的是使用移动平均线平滑num_undelivered_messages
。我设置了一个k8s cron,每分钟将最后20分钟的时间序列数据的平均值发布到自定义指标。然后将HPA配置为响应自定义指标。
这很好,但并不完美。我观察到,一旦平均值收敛到实际值,HPA就会将服务缩减得太低。因此,我最终仅添加了一个常数,因此自定义指标只是平均值+常数。我发现我的具体案例的价值为25,000。
有了这个,并且在输入targetAverageValue之后,自动缩放非常稳定。
我不确定这是由于缺陷还是仅由于num_undelivered_messages
指标在高负载下的性质所致。
编辑: 我使用了stackdriver / monitoring golang软件包。有一种简单的方法可以汇总时间序列数据。参见“汇总数据” https://cloud.google.com/monitoring/custom-metrics/reading-metrics
https://cloud.google.com/monitoring/custom-metrics/creating-metrics