在 Helm 图表中设置 fqin 的最佳实践

Best practice for setting the fqin in a Helm chart

我想要一个 CI 管道来构建图像和 Helm 图表。其中一部分当然是在发布之前设置 Helm chart 的 FQIN。

有很多关于如何在安装过程中执行此操作的示例,但在打包过程中没有。我很惊讶我在 https://helm.sh 上找不到关于这个常见用例的示例。 无法手动编辑图表的值文件,因为它是一个 CI 管道。

在不引入复杂的 CICD 工具的情况下执行此操作的最佳做​​法是什么。

您的“完全限定图像名称”由三部分组成:注册表主机名、图像名称本身和图像标签。我建议将所有三个作为 Helm 值传递,即使只有其中一些会发生变化。

image: '{{ .Values.registry }}/{{ .Values.image }}:{{ .Values.tag }}'
registry: docker.io
image: my/image
tag: latest

(当 Docker Hub 开始限速时,我开始非常感谢您可以配置注册表地址以指向本地镜像的图表。)

那么在实际部署镜像的时候,需要指定tag。在 Kubernetes 中,您几乎需要为每个构建使用唯一标签。

docker build -t my/image:20211206 .
docker push my/image:20211206
helm upgrade --install --namespace myapp myapp ./charts/myapp \
  --set-string tag=20211206

如果您的 CI 系统可以写出 JSON 文件,请考虑将标记和其他部署时设置放入 JSON 文件并将其作为 helm install -f 选项,而不是 --set--set-string。语法更加熟悉,您将在重要时更好地控制对象类型。

还有一种替代方法涉及实际编辑图表作为构建的一部分。您可能有一个“GitOps”风格的工作流程,其中构建系统的一部分实际上提交给源代码控制,并且由此产生的推送触发下一步。这有一些优点,因为它很容易验证一个阶段的文件输出,并且很容易看到确切的部署历史(因为部署历史是源代码控制历史)。

为此,您的 CI 系统本身需要更改 values.yaml 中的 tag:Chart.yaml 有一个可以与之匹配的 appVersion: 设置,此外,如果您要对图表本身进行自动更改,最好增加图表的 version:。 CI 系统将进行这些更改、提交和推送,然后推送将触发自身进行下一步部署。由于现在正确的设置在 values.yaml 中,您不需要 --set-string 选项。