如何从 HTTP 请求绑定 helm chart 中的值?

How to bind values in a helm chart from an HTTP request?

我想根据 HTTP 请求的 return 绑定一些变量。我想象这样的事情:

name: {{ curl -s 'https://something.com/users/1' | jq -r '.name' }}

有没有合适的方法来做这样或类似的事情?

Helm 无法执行 运行 shell 命令或其他子进程,也没有通用的方法来进行 HTTP 标注。

最接近的方法是在主机 shell 中结合使用命令替换 --set option:

name: {{ .Values.name }}
helm install ... \
  --set name=$(curl -s 'https://something.com/users/1' | jq -r '.name')

这将在整个安装过程中创建一个固定值; helm get values 会告诉你那是什么。

因为这实际上创建了一个固定的安装时间值,您还可以 运行 curl 命令,将结果添加到图表的 values.yaml 文件或另一个 helm install -f YAML 文件,并将结果提交到源代码管理。这将为您提供在给定时间点使用了哪些部署值的可跟踪历史记录。

根据您使用该值的方式,您还可以让应用程序将 HTTP 调用本身作为其启动序列的一部分,或者使用初始化容器进行调用并将其结果留在 emptyDir 体积。这些方法会在 pod 启动时而不是在部署时进行调用,并且会为每个副本重复调用,但是如果远程值发生变化,您可以更轻松地重新启动 pods 而无需重新部署。