在 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
选项。
我想要一个 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
选项。