多线舵图模板的继承
Inheritance of multiline helm chart template
我想将资源设置为 pods 带有子图中资源部分模板的掌舵图。因为它应该是子图中的几个不同的资源模板。
我有 values.yaml , main-values.yaml 和 templates/deployment.yaml
更新 helm chart 的命令是
helm upgrade -i mynamespace ./kubernetes/mynamespace --namespace mynamespace --create-namespace -f kubernetes/mynamespace/main-values.yaml --reset-values
文件被剪切以仅显示示例:
主要-values.yaml :
namespace: mynamespace
baseUrl: myurl.com
customBranch: dev
components:
postgresql:
nodeport: 5432
elasticsearch:
nodeport: 9200
resources_minimum:
requests:
memory: "100M"
cpu: "100m"
limits:
memory: "300M"
cpu: "200m"
values.yaml
namespace:
baseUrl:
customBranch:
components:
service:
name: service
image: docker-registry.service.{{ .Values.customBranch }}
imagePullPolicy: Always
resources: "{{ .Values.resources_minimum }}"
tag: latest
port: 8080
accessType: ClusterIP
cut
而deployment.yaml是
cut
containers:
- name: {{ $val.name }}
securityContext:
{{- toYaml $.Values.securityContext | nindent 12 }}
image: "{{ tpl $val.image $ }}:{{ $val.tag | default "latest" }}"
imagePullPolicy: {{ $val.imagePullPolicy }}
resources: "{{ tpl $val.resources $ }}"
cut
并且资源的部署部分根本不起作用。然而,带有中间模板 {{ .Values.customBranch }} 的图像部分工作正常,nodeport 模板在 services.yaml
spec:
type: {{ $val.accessType }}
ports:
- port: {{ $val.port }}
name: mainport
targetPort: {{ $val.port }}
protocol: TCP
{{ if and $val.nodeport }}
nodePort: {{ $val.nodeport }}
我试过 $val、toYaml、tpl 和纯 $.Values options in resources section of deployment.yaml and got several errors like:
error converting YAML to JSON: yaml: invalid map key: map[interface {}]interface {}{".Values.resources_minimum":interface {}(nil)}
或
error converting YAML to JSON: yaml: line 29: could not find expected ':'
和其他类似的错误。
是否无法将多行的yaml值resources_minimum通过values.yaml推送到deployment.yaml?
我应该使用哪种语法?
您可以建议我阅读哪些文档?
无法在 values.yaml 文件中使用模板代码。
但是您可以 merge
几个 values.yaml 文件来重用配置值。
主要-values.yaml
components:
service:
image: docker-registry.service.dev
resources:
requests:
memory: "100M"
cpu: "100m"
limits:
memory: "300M"
cpu: "200m"
values.yaml
components:
service:
name: service
imagePullPolicy: Always
tag: latest
port: 8080
accessType: ClusterIP
如果将其添加到模板中,它将包含来自两个值文件的值:
components: {{ deepCopy .Values.components | merge | toYaml | nindent 6 }}
merge
+ deepCopy
将 merge the values 您所有的值文件。
toYaml
将以 yaml 语法输出结果。
- 您还必须检查正确的缩进。 6 只是一个猜测。
致电helm template --debug ...
这甚至会生成无效的 yaml 输出,您可以在其中轻松检查正确的缩进并查看其他错误。
好的。研究员帮助我提供了优雅的解决方案。
values.yaml :
resource_pool:
minimum:
limits:
memory: "200M"
cpu: "200m"
requests:
memory: "100M"
cpu: "100m"
...
components:
service:
name: service
image: docker.image
imagePullPolicy: Always
tag: latest
resources_local: minimum
和deployment.yaml:
{{- range $keyResources, $valResources := $.Values.resource_pool }}
{{- if eq $val.resources_local $keyResources }}
{{ $valResources | toYaml | nindent 12}}
{{- end }}
{{- end }}
有什么建议可以阅读以熟悉所有 Helm 技巧吗?
我想将资源设置为 pods 带有子图中资源部分模板的掌舵图。因为它应该是子图中的几个不同的资源模板。 我有 values.yaml , main-values.yaml 和 templates/deployment.yaml 更新 helm chart 的命令是
helm upgrade -i mynamespace ./kubernetes/mynamespace --namespace mynamespace --create-namespace -f kubernetes/mynamespace/main-values.yaml --reset-values
文件被剪切以仅显示示例: 主要-values.yaml :
namespace: mynamespace
baseUrl: myurl.com
customBranch: dev
components:
postgresql:
nodeport: 5432
elasticsearch:
nodeport: 9200
resources_minimum:
requests:
memory: "100M"
cpu: "100m"
limits:
memory: "300M"
cpu: "200m"
values.yaml
namespace:
baseUrl:
customBranch:
components:
service:
name: service
image: docker-registry.service.{{ .Values.customBranch }}
imagePullPolicy: Always
resources: "{{ .Values.resources_minimum }}"
tag: latest
port: 8080
accessType: ClusterIP
cut
而deployment.yaml是
cut
containers:
- name: {{ $val.name }}
securityContext:
{{- toYaml $.Values.securityContext | nindent 12 }}
image: "{{ tpl $val.image $ }}:{{ $val.tag | default "latest" }}"
imagePullPolicy: {{ $val.imagePullPolicy }}
resources: "{{ tpl $val.resources $ }}"
cut
并且资源的部署部分根本不起作用。然而,带有中间模板 {{ .Values.customBranch }} 的图像部分工作正常,nodeport 模板在 services.yaml
spec:
type: {{ $val.accessType }}
ports:
- port: {{ $val.port }}
name: mainport
targetPort: {{ $val.port }}
protocol: TCP
{{ if and $val.nodeport }}
nodePort: {{ $val.nodeport }}
我试过 $val、toYaml、tpl 和纯 $.Values options in resources section of deployment.yaml and got several errors like:
error converting YAML to JSON: yaml: invalid map key: map[interface {}]interface {}{".Values.resources_minimum":interface {}(nil)}
或
error converting YAML to JSON: yaml: line 29: could not find expected ':'
和其他类似的错误。
是否无法将多行的yaml值resources_minimum通过values.yaml推送到deployment.yaml? 我应该使用哪种语法? 您可以建议我阅读哪些文档?
无法在 values.yaml 文件中使用模板代码。
但是您可以 merge
几个 values.yaml 文件来重用配置值。
主要-values.yaml
components:
service:
image: docker-registry.service.dev
resources:
requests:
memory: "100M"
cpu: "100m"
limits:
memory: "300M"
cpu: "200m"
values.yaml
components:
service:
name: service
imagePullPolicy: Always
tag: latest
port: 8080
accessType: ClusterIP
如果将其添加到模板中,它将包含来自两个值文件的值:
components: {{ deepCopy .Values.components | merge | toYaml | nindent 6 }}
merge
+deepCopy
将 merge the values 您所有的值文件。toYaml
将以 yaml 语法输出结果。- 您还必须检查正确的缩进。 6 只是一个猜测。
致电helm template --debug ...
这甚至会生成无效的 yaml 输出,您可以在其中轻松检查正确的缩进并查看其他错误。
好的。研究员帮助我提供了优雅的解决方案。 values.yaml :
resource_pool:
minimum:
limits:
memory: "200M"
cpu: "200m"
requests:
memory: "100M"
cpu: "100m"
...
components:
service:
name: service
image: docker.image
imagePullPolicy: Always
tag: latest
resources_local: minimum
和deployment.yaml:
{{- range $keyResources, $valResources := $.Values.resource_pool }}
{{- if eq $val.resources_local $keyResources }}
{{ $valResources | toYaml | nindent 12}}
{{- end }}
{{- end }}
有什么建议可以阅读以熟悉所有 Helm 技巧吗?