首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >helm3图表中如何设置字段app-version?

helm3图表中如何设置字段app-version?
EN

Stack Overflow用户
提问于 2021-11-02 21:49:09
回答 3查看 383关注 0票数 0

我使用helm在k8s中升级了我的spring应用程序。我有默认图表和使用命令

代码语言:javascript
复制
upgrade my-app my-app-chart --atomic --set image.tag=123

在my-app-chart目录中,我有文件Chart.yaml

代码语言:javascript
复制
apiVersion: v1
name: my-app-chart
description: A Helm chart for spring application my-app-chart
version: "1"
appVersion: "{{ .Values.image.tag }}"

我期望helm计算字段appVersion,在helm历史记录中我看到123,但现在我看到

代码语言:javascript
复制
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

如何正确设置字段appVersion?

EN

回答 3

Stack Overflow用户

发布于 2021-11-03 14:50:07

你不能在Chart.yaml afaik中有模板,看起来你是在反向操作。

我们使用helm-gradle plugin,很容易通过它的expansions说“图表版本是项目版本”

代码语言:javascript
复制
// expansions are replaced in the chart files if found in the form ${path.to.value}
expansions = [
        helm: [
                chartName:'my-chart',
                chartVersion: project.version
        ],
        anotherParam: project.version,
        path: [
                to: [
                        value: 'foobar'
                ]
        ]
]

Chart.yaml

代码语言:javascript
复制
appVersion: ${helm.chartVersion}

在使用maven的项目中,相同的maven插件将来不支持这种扩展,但是使用不同的maven插件来实现这一点是微不足道的。

这对于sed (或任何其他在构建图表之前替换文件中的文本的工具)来说也是微不足道的,这也是我们在引入这个插件之前所做的。

票数 1
EN

Stack Overflow用户

发布于 2021-11-03 03:12:52

这是要部署的应用程序的版本号。每次对应用程序进行更改时,此版本号都应递增。版本不应遵循语义版本控制。它们应该反映应用程序正在使用的版本。

以上是官方文档的内容,您可以通过helm初始化一个海图项目,然后在Chart.yaml中查看

票数 0
EN

Stack Overflow用户

发布于 2022-02-21 22:02:32

Chart.yamlvalues.yaml不会被解析为模板。

c.f.https://helm.sh/docs/topics/charts/#templates-and-values -

所有模板文件都存储在图表的templates/文件夹中。当Helm呈现图表时,它将通过模板引擎传递该目录中的每个文件。

Chart.yaml & values.yaml被设计为在目录中显式地,因此不能将模板操作({{...}})有效地嵌入其中。

因此,虽然您可以在Chart.yaml中提供一个用作备用/缺省基值的appVersion,但appVersion (在helm create foo生成的缺省图表中)在templates/deployment.yaml中只使用一次:

代码语言:javascript
复制
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"

(有趣的是,它用作大写A的AppVersionChart.yaml中列出的vut为小写A的appVersion )

当然,您可以只使用sed在运行时编辑图表,但是您必须先下载并解包,这会打开另一个蠕虫罐头。如果可以避免,请不要这样做-因为您似乎可以编辑图表,所以可以避免。

据文件显示,

此字段是信息性的,对图表版本计算没有影响。

实际上就是 -

appVersion:包含(可选)的应用程序版本。不需要是SemVer。推荐的引文。

因此,我的建议是完全删除它。完全不要依赖它。

如果您有一个在任何地方都可以使用的合理缺省值,请将其设置为values.yaml,不过最好将其保留为空,并要求它使用--set语句和/或一个--values文件进行be set at deployment

图表不需要从一个部署到另一个部署更改,除非模型本身需要是refactored...assuming的,您可以将其放在一个格式正确的存储库中。

代码语言:javascript
复制
helm upgrade "$name" "$chartRepo/$appName"

或者可能更有可能(在运行时设置变量)如下所示

代码语言:javascript
复制
helm upgrade -i -n "$targetEnv" "$appName" "$chartRepo/$appName" \
   --set "image.repository=$dockerRepo/$appName,image.tag=$appVersion"    

代码语言:javascript
复制
helm upgrade -i -n "$targetEnv" "$appName" "$chartRepo/$appName" -f run.yaml

(我知道这似乎很明显,但我看到很多人将appVersion硬编码到应用程序的每个版本的图表中,并将图表版本与应用程序发布版本固定在一起,即使图表没有其他变化。)

总结-“如何在helm3图表中设置字段app-版本?”

不要,Use run-time values.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69817305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档