我们要根据Kafka主题中的消息量水平缩放Pod。标准解决方案是将指标发布到Kubernetes的自定义指标API。但是,由于公司准则,我们不允许使用Kubernetes的自定义指标API。我们只允许使用非管理员功能。是否有使用kubernetes-nativ功能的解决方案,还是我们需要实施定制的解决方案?
答案 0 :(得分:2)
我不确定这是否满足您的需求,但是您可以使用Autoscaling on metrics not related to Kubernetes objects。
运行在Kubernetes上的应用程序可能需要基于与Kubernetes集群中的任何对象没有明显关系的指标进行自动扩展,例如描述与Kubernetes命名空间没有直接关联的托管服务的指标。在Kubernetes 1.10和更高版本中,您可以使用外部指标解决该用例。
使用外部指标需要您的监控系统知识;该设置类似于使用自定义指标时所需的设置。外部指标允许您根据监视系统中可用的任何指标自动扩展群集。只需如上所述提供一个
metric
和name
的{{1}}块,然后使用selector
度量类型而不是External
。如果Object
匹配了多个时间序列,则HorizontalPodAutoscaler将使用它们的值之和。外部指标同时支持metricSelector
和Value
目标类型,其功能与使用AverageValue
类型时的功能完全相同。例如,如果您的应用程序处理来自托管队列服务的任务,则可以将以下部分添加到HorizontalPodAutoscaler清单中,以指定每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