【问题标题】:embeding conf files into helm chart将 conf 文件嵌入到 helm chart
【发布时间】:2018-08-14 14:38:02
【问题描述】:

我是新掌舵人。我正在构建一个带有大量 conf 文件的 splunk helm 图表。我目前在 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

但我希望将 conf 文件放在单独的文件夹中,例如configs/helloworld.conf 并遇到了“tpl”,但我很难理解如何实现它。 - 任何人都可以建议最佳做法。在旁注中,splunk 具有总统顺序 >> 因此可能有许多 index.conf 文件在不同位置使用。有人对如何最好地实现这一点有任何想法吗?!??!

干杯。

【问题讨论】:

    标签: templates kubernetes splunk configmap kubernetes-helm


    【解决方案1】:

    如果文件的内容是静态的,那么您可以在图表中创建一个与模板目录 (not inside it) 处于同一级别的文件目录,然后像这样引用它们:

    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 控制内容,则会出现这种情况。如果您想单独公开每个值,那么有一个example in the helm documentation using range。但我认为很合适,或者你的情况是what the stable/mysql chart does。它有一个将值作为字符串的 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
    

    它会提取该内容并将其留给图表的用户进行设置,但您可以在 values.yaml 中设置默认值。

    如果您需要更大的灵活性,您只需要tplstable/keycloak chart 允许图表用户创建自己的配置映射和point it into the keycloak deployment via tpl。但我认为你的情况可能最接近 mysql 的情况。

    编辑:tpl 函数也可用于获取使用 Files.Get 加载的文件的内容,并有效地使该内容成为模板的一部分 - 如果您对此感兴趣,请参阅 How do I load multiple templated config files into a helm chart?

    【讨论】:

    • 如果您需要创建一个目录结构,一种方法可能是使用 subPaths 来安装它们,就像在 stackoverflow.com/a/49288088/9705485 中一样,但不完全确定这是否是您要问的。
    • 的意思是说......谢谢 - 我可能会使用第一种方法 - 如果我有许多同名文件的实例 >> index.conf 驻留在 splunk 目录的不同位置结构,是否适用于在文件夹中重新创建目录结构?例如文件/etc/apps/search/local/indexes.conf 文件/etc/apps/app1/local/indexes.conf 文件/etc/apps/app2/local/indexes.conf 文件/etc/system/local/indexes.conf
    • 如果文件需要位于这些位置,我认为您可以遵循 subPaths 建议来执行此操作。我不知道这些文件是否需要在这些位置。也许这是关于 splunk 和应用程序结构的单独问题。是 app1 和 app2 特定的应用程序吗?如果添加了新应用程序,您想要更新 splunk 部署,或者应用程序列表是否应该无限增长而不更新 splunk 版本?
    • 是的 - splunk 的 gui 将 conf 放置到与您正在使用的索引或工具相关的那些 (etc/apps/xxx/) 路径中。这些应用程序可能会有机地增长 - 但部署需要是可编写脚本的,因此 gui 更改需要反映在 helm 部署脚本中。或者,可以将全局 conf 设置应用于 etc/system/local .....这是一件很有趣的事情 - 但感谢您的帮助 - 我喜欢 stackoverflow !!
    • 在我看来,初始/全局文件可以使用 .Files.Glob 设置,并且您可以支持注入更多的配置映射,这些配置映射安装在用户选择的子路径上,方法与keycloak 图表允许用户注入他们自己的自定义领域。但我不完全确定。如果需要快速创建文件以响应 ui 事件,那么这听起来更像是需要编码才能写入文件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    相关资源
    最近更新 更多