Tim*_*Tim 1 kubernetes-helm helm3
我使用 helm 在 k8s 中升级了 spring 应用程序。我有默认图表并使用命令
upgrade my-app my-app-chart --atomic --set image.tag=123
Run Code Online (Sandbox Code Playgroud)
在 dir my-app-chart 中我有文件 Chart.yaml
apiVersion: v1
name: my-app-chart
description: A Helm chart for spring application my-app-chart
version: "1"
appVersion: "{{ .Values.image.tag }}"
Run Code Online (Sandbox Code Playgroud)
我希望 helm 评估字段 appVersion 并且在 helm 历史记录中我看到 123,但现在我看到
C:\git\ci\top-ci-example-project-multi-module>helm history -n top-ci my-app
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
150 Wed Nov 3 00:30:09 2021 superseded my-app-chart-0.1.0 0.1.0 Rollback to 148
151 Wed Nov 3 00:38:38 2021 failed my-app-chart-1 {{ .Values.image.tag }} Upgrade "top-ci-example-mul
ti-module-one" failed: timed out waiting for the condition
152 Wed Nov 3 00:38:49 2021 deployed my-app-chart-0.1.0 0.1.0 Rollback to 150
Run Code Online (Sandbox Code Playgroud)
如何正确设置字段appVersion?
Chart.yaml&values.yaml不被解析为模板。
cf https://helm.sh/docs/topics/charts/#templates-and-values -
所有模板文件都存储在图表的 templates/ 文件夹中。当 Helm 渲染图表时,它将通过模板引擎传递该目录中的每个文件。
Chart.yaml&按照设计values.yaml明确不在该目录中,因此不能将模板操作 ( {{...}}) 有效地嵌入其中。
因此,虽然您可以提供一个 appVersionChart.yaml作为后备/默认基值,但appVersion仅在(在由 生成的默认图表中helm create foo)使用一次,即templates/deployment.yaml-
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
Run Code Online (Sandbox Code Playgroud)
(有趣的是,它的使用方式AppVersion与大写 A 相同,但列出时与小写 AChart.yaml相同。)appVersion
当然,您可以只sed在运行时编辑图表,但是您必须先下载并解开软件包,这会打开另一罐蠕虫。如果可以避免,就不要这样做 - 而且由于您似乎能够编辑图表,因此您可以避免它。
根据文档,
该字段仅供参考,对图表版本计算没有影响。
事实上,完全是可选的-
appVersion:其中包含的应用程序的版本(可选)。不必是 SemVer。报价推荐。
所以,我的建议是完全删除它。根本不要依赖它。
如果您有一个在任何地方都可以的正常默认值,请将其设置为values.yaml,但最好将其留空并要求在部署时使用--set语句和/或--values文件进行设置。
图表不需要在部署之间进行更改,除非模型本身需要重构......假设您将其放在格式正确的存储库中。
helm upgrade "$name" "$chartRepo/$appName"
Run Code Online (Sandbox Code Playgroud)
或者更有可能(在运行时设置变量)类似
helm upgrade -i -n "$targetEnv" "$appName" "$chartRepo/$appName" \
--set "image.repository=$dockerRepo/$appName,image.tag=$appVersion"
Run Code Online (Sandbox Code Playgroud)
或者
helm upgrade -i -n "$targetEnv" "$appName" "$chartRepo/$appName" -f run.yaml
Run Code Online (Sandbox Code Playgroud)
(我知道这似乎很明显,但我看到很多人为应用程序的每个appVersion版本都硬编码到图表中,并将图表版本固定到应用程序发布版本,即使图表没有以其他方式更改。)
总结 - “如何在 helm3 图表中设置字段应用程序版本?”
不。使用运行时值。
| 归档时间: |
|
| 查看次数: |
17973 次 |
| 最近记录: |