如何在稳定/ prometheus图表values.yaml中包含来自另一个yaml文件的prometheus规则?

时间:2019-07-08 21:15:17

标签: kubernetes prometheus kubernetes-helm

嗨,我是Kubernetes and Helm Chart的新手。在这里(How to set prometheus rules in stable/prometheus chart values.yaml?)提出了类似的问题并得到了答案

但是我正在寻找一种在另一个文件中定义规则,然后将该文件包含在values.yaml中的方法,以便于维护(因为我有2000多个警报行...)

尤其是我在values.yaml中所拥有的:

serverFiles:
  alerts:
    groups:
    - name: kubernetes-apps
      rules:
      - alert: KubePodCrashLooping
        annotations:
          message: Pod {{ $labels.namespace }}/{{ $labels.pod }} ({{ $labels.container
            }}) is restarting {{ printf "%.2f" $value }} times / 5 minutes.
          runbook_url: https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubepodcrashlooping
        expr: rate(kube_pod_container_status_restarts_total{component="kube-state-metrics"}[15m])
          * 60 * 5 > 0
        for: 1h
        labels:
          severity: critical
... 
<2000 more lines>
...
  rules: {}
  prometheus.yml:
    rule_files:
      - /etc/config/rules
      - /etc/config/alerts

这就是我想在新的values.yaml中实现的目标:

serverFiles:
  alerts: {{ include from values-alerts.yaml }}
  rules: {}
  prometheus.yml:
    rule_files:
      - /etc/config/rules
      - /etc/config/alerts

这是我要包含在values-alerts.yaml中的values.yaml文件:

alerts:
  groups:
  - name: kubernetes-apps
    rules:
    - alert: KubePodCrashLooping
      annotations:
        message: Pod {{ $labels.namespace }}/{{ $labels.pod }} ({{ $labels.container
          }}) is restarting {{ printf "%.2f" $value }} times / 5 minutes.
        runbook_url: https://github.com/kubernetes-monitoring/kubernetes-mixin/tree/master/runbook.md#alert-name-kubepodcrashlooping
      expr: rate(kube_pod_container_status_restarts_total{component="kube-state-metrics"}[15m])
        * 60 * 5 > 0
      for: 1h
      labels:
        severity: critical
... 
<2000 more lines>
...

请告知这是否可行,或者是否还有其他更好的方法。

谢谢

1 个答案:

答案 0 :(得分:1)

我的理解是,您想复制最后一个代码段中概述的代码,并且不想在代码段本身中添加默认值,对吗?

如果是这种情况,则不应使用values.yamlvalues.yaml文件应包含模板的键值对之类的默认值。

不过,您可以按照helm guide中的说明在templates中加入templates(在###之后的注释):

### Define a template (this can be a seperate file)
{{- define "mychart.labels" }}  
  labels:
    generator: helm
    date: {{ now | htmlDate }}
{{- end }}
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-configmap
  {{- template "mychart.labels" }} ### Include the template

收益:

# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: running-panda-configmap
  labels:
    generator: helm
    date: 2016-11-02

因此,您可以including中的文件values-alert而不是values.yaml中的include,而templates/可以放在标签中

别忘了缩进,并且{{ template }}是你的朋友!