在configmap更改时触发pod重新启动



我有一个配置映射文件,定义如下

apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-dashboard-cm-conf
namespace: {{ .Release.Namespace }}
data:
{{ (tpl (.Files.Glob "conf/*").AsConfig . ) | indent 2 }}

正如你在上面看到的,它占据了";conf";文件夹作为数据。一切都很好,但当我试图实现";注释";以触发";POD重启";在我的";部署文件。

annotations:
checksum/config-map: {{ include (print .Template.BasePath "/dashboard-conf-map.yaml") . | sha256sum }}

POD没有被重新启动;conf";文件夹已更改&a";舵升级";执行。

如果我使用具有如下定义的数据的简单配置映射;舵升级";确实导致POD重新启动

data:
parameter1: testparam1
parameter2: testparam2

我在这里有以下问题

  1. 是否有方法对文件夹执行校验和。

  2. 有没有办法在configmap中获得如下linux命令的输出。

find dashboard/conf/ -type f -exec md5sum {} ; |md5sum

  1. 我们可以对非YAML文件执行校验和吗
annotations:
checksum: {{ include (print .Template.BasePath "/logback-spring.xml") . | sha256sum }}

我得到以下错误错误:在chart-2/charts/dashboar/templates/conf1/logback-spring.xml上出现YAML解析错误:在解码JSON:JSON时,取消对JSON:无法将字符串分解为releaseutil类型的Go值。SimpleHead

  1. 我们可以对文件执行校验和吗;。样板BasePath";,我试过下面的组合,所有的结果都是错误的
checksum/config: {{ include (print .BasePath "../conf/values1.yaml") . | sha256sum }}
checksum/config: {{ include (print .Template.BasePath "/../../conf/values1.yaml") . | sha256sum }}
checksum/config: {{ include (print .Template.BasePath "/../conf/values1.yaml") . | sha256sum }} 

调用include:template:no-template时出错;chart-2/图表/仪表板/模板/conf/values1.yaml";与模板"相关联";gotpl";

调用include:template:no-template时出错;chart-2/图表/仪表板/模板//conf/values1.yaml";与模板"相关联";gotpl";

调用include:template:no-template时出错;chart-2/图表/仪表板/模板/..//conf/values1.yaml";与模板"相关联";gotpl";

include模板函数是一个Helm扩展,它执行命名模板,就像标准的template指令一样,但以字符串形式返回模板的内容。它与读取文件无关。

要读回文件,需要使用顶级.Files对象。特别需要注意的是,它无法读取图表templates目录中的文件;在文件名前面加上.Template.BasePath将不起作用,您需要将包含的文件移到其他地方。

假设您在主图表目录中创建了一个子目录conf

Chart.yaml
values.yaml
conf/
logback.xml
templates/
configmap.yaml

这里列出的许多函数——.Files.Get.Files.Glob.AsConfigtpl——都返回字符串,因此可以将它们组合在一起。例如,您可以将ConfigMap的渲染内容的校验和计算为:

annotations:
checksum/config-map: {{ (tpl (.Files.Glob "conf/*").AsConfig . ) | sha256sum }}

如果需要,也可以在单个非YAML文件上执行:.Files.Get返回一个字符串,因此

.Files.Get "conf/logback-spring.xml" | sha256sum

.Files.Get的根路径是图表的根路径。您可以检索templates目录中而非的任何文件,但无法访问图表外部。

如果你想用子图表来做这件事。

kind: <ResourceKind> # Deployment, StatefulSet, etc
spec:
template:
metadata:
annotations:
checksum/config: {{ include ("mylibchart.configmap") . | sha256sum }}

另一种选择是https://github.com/stakater/Reloader

您可以使用regex选择基于此PR的配置https://github.com/stakater/Reloader/pull/314

最新更新