1

我正在使用 helm 版本 2.14.1。我为一个应用程序创建了 helm 图表,该应用程序将由用户部署以在 kubernetes 集群上测试他们的代码。我想为用户名值添加标签,这样我就可以按用户检索部署(按用户标签部署)。有没有办法像我们在 Java 中使用System.getProperty("user.name"). 我的 helm 模板是这样的:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ include "common.fullname" . }}--{{ Release.name }}
  labels:
    application: {{ include "common.name" . }}
    branch: "{{ Release.name }}"
    username: "{{ System.user.name }}"   # need to fetch the logged in user from system here
spec:
...

helm install有没有一种标准的方法来实现这一点,或者无论如何我可以允许用户在使用或命令时从命令行输入用户名helm template

编辑:虽然,--set为我的图表设置值对我有用,但我还需要在依赖项中设置相同的值。像这样的东西:

值.yaml

username: "" 

dependency1:
 username: {{ .Values.username }} 

dependency2:
 username: {{ .Values.username }}

...

当然上面的实现是行不通的。我还需要在依赖项中引用设置值

4

2 回答 2

1

这是基于评论的社区 wiki 答案,并发布以提高可见性。随意扩展它。

您可以使用helm template带有--set选项的命令:

--set stringArray              set values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2)
--set-file stringArray         set values from respective files specified via the command line (can specify multiple or separate values with commas: key1=path1,key2=path2)
--set-string stringArray       set STRING values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2)

--set将值传递到图表的其他方法中,参数具有最高优先级。这意味着默认值来自values.yaml可以被父图表覆盖的values.yaml,而父图表又可以被用户提供的值文件覆盖,而用户提供的值文件又可以被--set参数覆盖。

您可以在官方文档中查看更多详细信息和示例。

于 2020-09-28T08:11:38.180 回答
0

我已经解决了这个问题。感谢@MichaelAlbers 和@WytrzymałyWiktor 的帮助。所以解决方案如下。

helm template path/to/chart --set global.username=username

然后在所有模板中将此值称为{{ .Values.global.username }}. 这也适用于任何依赖关系图。

于 2020-10-06T16:59:15.447 回答