这就是我目前的情况:
与基本helm create一起来的是一个values.yaml文件和一个带有deployment.yaml的template文件夹。已对Deployment文件进行了调整,以管理码头映像中的弹簧引导应用程序。
现在,values.yaml包含了如下内容
myApp:
repository: myApp.mycompany.com/demo/my-app-customers
tag: stable而deployment.yaml包含
spec:
template:
spec:
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.myApp.repository }}:{{ .Values.myApp.tag }}"假设我必须管理另一个春启动应用程序,非常接近“我的应用-客户”是什么。我想我只需要在values.yaml中再添加一行,就像这样:
mySecondApp:
repository: myApp.mycompany.com/demo/my-app-others
tag: stable但是这不适用于deployment.yaml,因为它使用.Values.myApp.repository。这意味着我需要创建另一个文件deployment-others.yaml,它使用.Values.mySecondApp.repository来部署第二个应用程序。因此,不可能在不同的应用程序中使用相同的模板。
发布于 2019-10-11 12:46:34
这样做的标准方法是拥有一个second-deployment.yaml文件,它本质上是第一个文件的副本,但具有不同的标签和值引用。通常在_helpers.tpl中放置一些模板来生成标签块之类的东西,您可以为公共环境变量扩展这些模板,或者您可以将一些配置卸载到ConfigMap中以减少重复。
Helm的模板层根本不知道YAML语法,所以只要每个文件生成有效的YAML,你就可以做任何你想做的事情。它可以在一个文件中包含多个文档,并且可以通过模板生成它们。不过,这可能会很棘手。基本的大纲可能看起来
{{- range list .Values.myApp .Values.mySecondApp -}}
---
...
spec:
template:
spec:
containers:
- name: {{ $.Chart.Name }}
image: "{{ .repository }}:{{ .tag }}"
...
{{ end -}}如果尝试这样做,您需要知道.是值对象的片段,而不是像通常那样的根对象;例如,请注意$.Chart.Name显式引用顶级图表名称。
发布于 2019-10-10 21:04:50
如果部署资源几乎相同,您只需将Helm图表看作一个抽象,并使用--set标志指定值。
helm install --set repository=myApp.mycompany.com/demo/my-first-app --name my-first-app /path/to/helm/chart my-first-app
helm install --set repository=myApp.mycompany.com/demo/my-second-app --name my-second-app /path/to/helm/chart my-second-apphttps://stackoverflow.com/questions/58325907
复制相似问题