Grafana 图表的 helm 模板转义值

Posted

技术标签:

【中文标题】Grafana 图表的 helm 模板转义值【英文标题】:helm template escaped values for Grafana charts 【发布时间】:2021-05-15 16:46:06 【问题描述】:

聪明的SOers。事实证明,Grafana 仪表板 json 文件使用与 helm 相同的 来进行变量替换。我有一个 grafana 图表,其中包含这些 到令人不快的程度。

当我想将该图表放入模板时,如下所示:

apiVersion: v1
kind: ConfigMap
metadata:
  name: super-dashboard
  namespace: monitoring
  labels:
    grafana_dashboard: "1"
data:
  super-dashboard.json: |-
 .Files.Get "super-dashboard.json"  | indent 4 

只要super-dashboard.json 中没有任何东西,它就可以很好地工作:

"legendFormat": "status Status",.

不幸的是,我们的仪表板确实有一条可悲的线。当我运行 helm 时,我得到:

Error: UPGRADE FAILED: parse error at (templates/dashboards/super-dashboard.json:282): function "status" not defined

自然地,它正在寻找一些在 helm 模板语言中不存在的方法 status,因此失败了。如果我能忽略解析那个纠缠不清的文件就好了。哦,各位聪明的互联网高手们,您对寻求集体智慧的卑微寻求者有什么明智的建议吗?

【问题讨论】:

你是如何安装图表的? .Files.Get 路径不应导致模板引擎重新解释包含的文件;为此,您需要显式调用tplhelm template 是否适用于图表,如果适用,生成的 YAML 在此块周围看起来或多或少正确吗? 我正在安装图表:helm upgrade --install mychart -f ./mychart/values.yaml ./mychart json 文件与模板位于同一目录中。 (./mychart/template/) 这里有一些讨论:github.com/helm/helm/issues/2798 我喜欢 ntfrnzn 的想法,但如果我在相关目录中包含这些文件中的任何一个,我就会收到错误消息。如果我将它们放在目录之外,它们就不会被拾取。 【参考方案1】:

问题是我的super-dashboard.json 文件与模板位于相同的目录中,并且 helm 试图对其进行模板化。解决方案是具有如下目录结构:

mychart/
  templates/
    super-dashboard.yaml
  files/
    super-dashboard.json

那么yaml文件有:

 .Files.Get "files/super-dashboard.json" | indent 4 

我以为您必须将文件放在同一目录中,但它必须位于图表的根目录下。

【讨论】:

以上是关于Grafana 图表的 helm 模板转义值的主要内容,如果未能解决你的问题,请参考以下文章

使用其他属性更新 helm 图表

通过 Terraform Helm 提供程序设置 grafana.ini

使用 helm 部署时基于环境的不同 grafana.ini

helm install 后 Grafana pod 不断重启

prometheus(或grafana)查询来评估grafana loki使用的存储?

Grafana入门教程