将配置文件嵌入到Helm Chart中

7

我是一个新手,正在学习helm。我正在构建一个包含多个配置文件的Splunk Helm Chart。我目前在ConfigMap中使用类似于以下内容的语法...

apiVersion: v1
kind: ConfigMap
metadata:
  name: splunk-master-configmap
data:
  indexes.conf: |
    # global settings
    # Inheritable by all indexes: no hot/warm bucket can exceed 1 TB.
    # Individual indexes can override this setting.
    homePath.maxDataSizeMB = 1000000

但我更喜欢将配置文件放在单独的文件夹中,例如configs/helloworld.conf,并发现了"tpl",但不知道如何实现。- 有人能建议最佳实践吗?另外,splunk有优先级顺序>>,因此可能会在各个位置使用许多indexes.conf文件。有没有人对如何最好地实现这一点有什么想法?!?!干杯。
1个回答

17

如果文件的内容是静态的,那么你可以在图表中创建一个与templates目录不在里面同级的files目录,并像这样引用它们:

kind: ConfigMap
metadata:
  name: splunk-master-configmap
data:
  {{ (.Files.Glob "files/indexes.conf").AsConfig | indent 2 }}
  {{ (.Files.Glob "files/otherfile.conf").AsConfig | indent 2 }}
# ... and so on

如果您想引用文件内变量的值以便从values.yaml控制内容,那么这种方法就会失效。如果您想单独公开每个值,则helm文档中有一个使用range的示例。但我认为stable/mysql图表所做的适合您的情况。它拥有一个将值作为字符串传递的ConfigMap:

{{- if .Values.configurationFiles }}
apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ template "mysql.fullname" . }}-configuration
data:
{{- range $key, $val := .Values.configurationFiles }}
  {{ $key }}: |-
{{ $val | indent 4}}
{{- end }}
{{- end -}}

values.yaml允许图表的用户设置和覆盖文件及其内容:

# Custom mysql configuration files used to override default mysql settings
configurationFiles:
#  mysql.cnf: |-
#    [mysqld]
#    skip-name-resolve
#    ssl-ca=/ssl/ca.pem
#    ssl-cert=/ssl/server-cert.pem
#    ssl-key=/ssl/server-key.pem

这段内容是关于IT技术的翻译:

它注释掉了该内容并将其留给图表用户设置,但您可以在values.yaml中设定默认值。

如果需要更多灵活性,则只需要使用tplstable/keycloak chart允许图表用户创建自己的configmap,并通过tpl将其指向keycloak部署。但我认为您的情况可能与mysql最接近。

编辑:tpl函数还可用于获取Files.Get加载的文件内容,并有效地使该内容成为模板的一部分-如果您对此感兴趣,请参见如何将多个模板化配置文件加载到helm chart中?


如果您需要创建目录结构,一种方法是使用子路径进行挂载,就像在 https://dev59.com/t1UM5IYBdhLWcg3wINak#49288088 中所示。虽然我不完全确定这是否是您要求的。 - Ryan Dawson
谢谢 - 我可能会使用第一种方法 - 如果我有许多相同命名的文件实例>>indexes.conf,它们位于splunk目录结构的各个位置上,是否可以在files文件夹中重新创建目录结构?例如:files/etc/apps/search/local/indexes.conf files/etc/apps/app1/local/indexes.conf files/etc/apps/app2/local/indexes.conf files/etc/system/local/indexes.conf - Nick Gleed
我认为你可以按照subPaths的建议来实现,如果需要将文件放在这些位置。我不知道这些文件是否必须放在这些位置。也许这是一个关于splunk和你的应用程序结构的单独问题。app1和app2是特定的应用程序吗?如果添加了新的应用程序,您是否希望更新splunk部署,或者应用程序列表是否会无限增长而不更新splunk版本? - Ryan Dawson
1
是的 - Splunk 的 GUI 将 conf 文件放置在与您正在使用的索引或工具相关的路径中(例如 /etc/apps/xxx/)。这些应用程序很可能会有机地增长 - 但部署需要可脚本化,因此 GUI 更改需要反映在 Helm 部署脚本中。或者,全局 conf 设置可以应用于 etc/system/local..... 这是 Splunk 的一件事情 - 但感谢您的帮助 - 我喜欢 StackOverflow!! - Nick Gleed
我认为可以使用.Files.Glob来设置初始/全局文件,并支持注入更多的配置映射,这些映射可以挂载在用户选择的子路径上,采用与keycloak图表相同的方法允许用户注入自定义领域。但我不是完全确定。如果需要根据UI事件快速创建文件,则更像是需要编写代码来编写文件的内容。 - Ryan Dawson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接