我使用helm在k8s中升级了我的spring应用程序。我有默认图表和使用命令
upgrade my-app my-app-chart --atomic --set image.tag=123在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 }}"我期望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如何正确设置字段appVersion?
发布于 2021-11-03 14:50:07
你不能在Chart.yaml afaik中有模板,看起来你是在反向操作。
我们使用helm-gradle plugin,很容易通过它的expansions说“图表版本是项目版本”
// 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中
appVersion: ${helm.chartVersion}在使用maven的项目中,相同的maven插件将来不支持这种扩展,但是使用不同的maven插件来实现这一点是微不足道的。
这对于sed (或任何其他在构建图表之前替换文件中的文本的工具)来说也是微不足道的,这也是我们在引入这个插件之前所做的。
发布于 2021-11-03 03:12:52
这是要部署的应用程序的版本号。每次对应用程序进行更改时,此版本号都应递增。版本不应遵循语义版本控制。它们应该反映应用程序正在使用的版本。
以上是官方文档的内容,您可以通过helm初始化一个海图项目,然后在Chart.yaml中查看
发布于 2022-02-21 22:02:32
Chart.yaml和values.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中只使用一次:
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"(有趣的是,它用作大写A的AppVersion,Chart.yaml中列出的vut为小写A的appVersion )
当然,您可以只使用sed在运行时编辑图表,但是您必须先下载并解包,这会打开另一个蠕虫罐头。如果可以避免,请不要这样做-因为您似乎可以编辑图表,所以可以避免。
据文件显示,
此字段是信息性的,对图表版本计算没有影响。
实际上就是 -
appVersion:包含(可选)的应用程序版本。不需要是SemVer。推荐的引文。
因此,我的建议是完全删除它。完全不要依赖它。
如果您有一个在任何地方都可以使用的合理缺省值,请将其设置为values.yaml,不过最好将其保留为空,并要求它使用--set语句和/或一个--values文件进行be set at deployment。
图表不需要从一个部署到另一个部署更改,除非模型本身需要是refactored...assuming的,您可以将其放在一个格式正确的存储库中。
helm upgrade "$name" "$chartRepo/$appName"或者可能更有可能(在运行时设置变量)如下所示
helm upgrade -i -n "$targetEnv" "$appName" "$chartRepo/$appName" \
--set "image.repository=$dockerRepo/$appName,image.tag=$appVersion" 或
helm upgrade -i -n "$targetEnv" "$appName" "$chartRepo/$appName" -f run.yaml(我知道这似乎很明显,但我看到很多人将appVersion硬编码到应用程序的每个版本的图表中,并将图表版本与应用程序发布版本固定在一起,即使图表没有其他变化。)
总结-“如何在helm3图表中设置字段app-版本?”
https://stackoverflow.com/questions/69817305
复制相似问题