没有自定义指标的水平Pod自动缩放

时间:2020-04-02 11:10:47

标签: kubernetes apache-kafka openshift metrics autoscaling

我们要根据Kafka主题中的消息量水平缩放Pod。标准解决方案是将指标发布到Kubernetes的自定义指标API。但是,由于公司准则,我们不允许使用Kubernetes的自定义指标API。我们只允许使用非管理员功能。是否有使用kubernetes-nativ功能的解决方案,还是我们需要实施定制的解决方案?

1 个答案:

答案 0 :(得分:2)

我不确定这是否满足您的需求,但是您可以使用Autoscaling on metrics not related to Kubernetes objects

运行在Kubernetes上的应用程序可能需要基于与Kubernetes集群中的任何对象没有明显关系的指标进行自动扩展,例如描述与Kubernetes命名空间没有直接关联的托管服务的指标。在Kubernetes 1.10和更高版本中,您可以使用外部指标解决该用例。

使用外部指标需要您的监控系统知识;该设置类似于使用自定义指标时所需的设置。外部指标允许您根据监视系统中可用的任何指标自动扩展群集。只需如上所述提供一个metricname的{​​{1}}块,然后使用selector度量类型而不是External。如果Object匹配了多个时间序列,则Horizo​​ntalPodAutoscaler将使用它们的值之和。外部指标同时支持metricSelectorValue目标类型,其功能与使用AverageValue类型时的功能完全相同。

例如,如果您的应用程序处理来自托管队列服务的任务,则可以将以下部分添加到Horizo​​ntalPodAutoscaler清单中,以指定每30个未完成的任务需要一个工作线程。

Object

在可能的情况下,最好使用自定义指标目标类型而不是外部指标,因为集群管理员可以更轻松地保护自定义指标API。外部指标API可能允许访问任何指标,因此群集管理员在公开它时应格外小心。

您还可以查看zalando-incubator/kube-metrics-adapter并使用Prometheus收集器external metrics

这是配置为基于Prometheus查询获取指标的HPA的示例。该查询在注释- type: External external: metric: name: queue_messages_ready selector: "queue=worker_tasks" target: type: AverageValue averageValue: 30 中定义,其中metric-config.external.prometheus-query.prometheus/processed-events-per-second是将与查询结果关联的查询名称。必须在度量标准定义的processed-events-per-second中定义匹配的query-name标签。这样就可以将多个Prometheus查询与单个HPA相关联。

matchLabels