如何在 Kubernetes 的 PrometheusRule 中定义变量

问题描述 投票:0回答:2

我当前在 Kubernetes 的 PrometheusRule 实现如下:(注意有一个硬编码的数字 10000000000:

---
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  namespace: mytest
  labels:
    team: myteam
  name: myname
spec:
  groups:
  - name: mygroup
    rules:
    - alert: MemoryUsage
      annotations:
        message: MemoryUsage at ec2 {{ $labels.cluster_id }} is {{printf "%.2f" $value}}%.  Threshold is 80%.
      expr: 100 * memory_average{container="XXX"...} / 10000000000 > 80
      for: 20m
      labels:
        severity: warning

问题 1:如何定义一个变量来替换硬编码数字 10 000 000 000? IE。在 PromethusRole 中何处以及如何定义类似的内容:

max_memory=10 000 000 000
,然后将 expr 替换为类似这样的内容?

expr: 100 * memory_average{container="XXX"...} / var.max_memory > 80

问题2:我希望不同集群的max_memory值不同。在 PromethusRole 中,如何定义具有如下逻辑的变量?谢谢!

if  {{ $labels.cluster_id }} == "ClusterA":
    max_memory = 10000000000
else If  {{ $labels.cluster_id }} == "ClusterB":
    max_memory = 7000000000
kubernetes prometheus prometheus-alertmanager
2个回答
1
投票

您正在谈论

templatizing
您的清单。您将需要一个模板系统来为您生成这些 YAML 然后您可以将它们应用到您的集群。

有多种方法可以实现此目的,您可以首先尝试mustachekustomize。这些将允许您按照您所描述的方式创建模板,并且当您生成清单时,这些值将被替换,并且您将拥有可应用于集群的现成清单。

对于更高级的应用程序,您可以查看基于 Python 的 jinja 模板系统。这也是

ansible
用于生成 playbook 清单的系统。


0
投票

对于问题 1:如何定义一个变量来替换硬编码数字 10 000 000 000? IE。在 PromethusRole 中哪里以及如何定义这样的东西: max_memory=10 000 000 000 ,然后将 expr 替换为这样的东西?

您可以使用如下所示的内容(如果您使用 Helm 图表并从 Values.yaml 文件获取值)

expr: 100 * memory_average{container="XXX"...} / var.max_memory > {{ .Values.memoryThresholdValue}}

Values.Yaml

memoryThresholdValue : anyValue

问题2:我希望不同集群的max_memory值不同。在PromethusRole中,如何定义具有如下逻辑的变量?谢谢!

这里您也可以使用

{{ .Values.maxvalue}}
,如果您的变量是在 helm 模板文件中定义的,则使用如下所示的内容 -

expr: max_over_time(reloader_last_reload_successful{namespace=~".+", ingress= {{ include "kube-prometheus-stack.operator.fullname" . }} }[5m]) == {{ .Values.nginxValue }}
© www.soinside.com 2019 - 2024. All rights reserved.