kubernetes - 如何将另一个 yaml 文件中的 prometheus 规则包含在 stable/prometheus 图表 value.yaml 中?

标签 kubernetes prometheus kubernetes-helm

您好,我是 Kubernetes 和 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.yaml 中的 values-alerts.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>
...

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

谢谢,

最佳答案

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

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

但是,您可以在 templates 中包含 templates,如 helm guide 中所述。 (### 之后的评论):

### 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

因此,您可以在 values.yaml包含该文件,而不是在 values.yaml包含您需要的 templates/{{ template }} 标签。

不要忘记缩进,helm 模板是你的 friend !

关于kubernetes - 如何将另一个 yaml 文件中的 prometheus 规则包含在 stable/prometheus 图表 value.yaml 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56942637/

相关文章:

apache-kafka - Prometheus和Grafana下监控kafka

deployment - Helm : Pass a multiline env variable to deployment

kubernetes - Helm 预安装作业在服务帐户之前创建

kubernetes - Prometheus Pods 在 grafana 中重启

docker - 如何在 kubernete 的 pod yaml 文件中指定主机端口范围而不是主机端口?

kubernetes - 无法访问 Google Cloud 上的 Kubernetes 信息中心

kubernetes - 如何使用 kubeadm-init 配置参数- "controlPlaneEndpoint"?

amazon-web-services - 普罗米修斯 : Distinguish Application metrics

Prometheus:是否可以在 Prometheus Web UI 中创建/配置警报组?

kubernetes-helm - 值文件中的 Helm 连接列表