我正在修改一个使用HorizontalPodAutoscaler(HPA)自动缩放的部署。此部署是管道的一部分,在管道中,工作人员从pubsub订阅中读取消息,进行一些工作并发布到下一个主题。现在,我使用configmap来定义部署的管道(configmap包含输入订阅和输出主题)。 HPA根据输入订阅上的消息数自动缩放。我希望能够从configmap中提取HPA的订阅名称?有办法吗?
HPA示例:
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
name: my-deployment-hpa
namespace: default
labels:
name: my-deployment-hpa
spec:
minReplicas: 1
maxReplicas: 10
metrics:
- external:
metricName: pubsub.googleapis.com|subscription|num_undelivered_messages
metricSelector:
matchLabels:
resource.labels.subscription_id: "$INPUT_SUBSCRIPTION"
targetAverageValue: "2"
type: External
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: my-deployment
理想情况下,当前$INPUT_SUBSCRIPTION
的HPA中的值可以来自配置映射。
答案 0 :(得分:0)
将此答案作为社区Wiki发布,以获得更好的可见性,并在评论中提供了答案。
回答帖子中的问题:
如果可能,我希望能够从configmap中提取HPA的订阅名称?有办法吗?
正如用户@Abdennour TOUMI指出的那样,无法用HPA
设置ConfigMap
使用的度量标准:
不幸的是,您不能..但是可以使用prometheus-adapter + HPA。检查此Tuto:itnext.io/...
关于手动解决方法,您可以使用脚本从configMap
中提取所需的指标名称,并使用模板替换并应用新的HPA
。
使用configMap
,例如:
apiVersion: v1
kind: ConfigMap
metadata:
name: example
data:
metric_name: "new_awesome_metric" # <-
not_needed: "only for example"
以及以下脚本:
#!/bin/bash
# variables
hpa_file_name="hpa.yaml"
configmap_name="example"
string_to_replace="PLACEHOLDER"
# extract the metric name used in a configmap
new_metric=$(kubectl get configmap $configmap_name -o json | jq '.data.metric_name')
# use the template to replace the $string_to_replace with your $new_metric and apply it
sed "s/$string_to_replace/$new_metric/g" $hpa_file_name | kubectl apply -f -
此脚本将需要带有模板的
hpa.yaml
才能将其用作资源(问题中的示例可以与更改一起使用:
resource.labels.subscription_id: PLACEHOLDER
有关更多参考,此HPA定义可以基于本指南:
Cloud.google.com: Kubernetes Engine: Tutorials: Autoscaling-metrics: PubSub