Kubernetes 是否可以从helm subchart模板中提取样板YAML?
有没有办法将样板YAML从subchart模板移动到parent\u helpers.tpl或values.YAML 掌舵项目Kubernetes 是否可以从helm subchart模板中提取样板YAML?,kubernetes,yaml,kubernetes-helm,Kubernetes,Yaml,Kubernetes Helm,有没有办法将样板YAML从subchart模板移动到parent\u helpers.tpl或values.YAML 掌舵项目 MyHelmApp │ ├── Chart.yaml ├── values.yaml ├── templates │ ├── _helpers.tpl │ ├── configmap.yaml │ └── app-ingress-rules.yaml │ └── charts
MyHelmApp
│
├── Chart.yaml
├── values.yaml
├── templates
│ ├── _helpers.tpl
│ ├── configmap.yaml
│ └── app-ingress-rules.yaml
│
└── charts
│
├── app1
│ ├── Chart.yaml
│ ├── templates
│ │ ├── _helpers.tpl
│ │ ├── deployment.yaml
│ │ └── service.yaml
│ └── values.yaml
├── app2
│ ├── Chart.yaml
│ ├── templates
│ │ ├── _helpers.tpl
│ │ ├── deployment.yaml
│ │ └── service.yaml
│ └── values.yaml
└── app3
├── Chart.yaml
├── templates
│ ├── _helpers.tpl
│ ├── deployment.yaml
│ └── service.yaml
└── values.yaml
app1:
health:
livenessProbe:
path: /system_health
port: 8080
initialDelaySeconds: 15
periodSeconds: 20
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 3
readinessProbe:
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 3
app2:
health:
livenessProbe:
path: /system_health
port: 8080
initialDelaySeconds: 15
periodSeconds: 20
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 3
readinessProbe:
port: 8080
initialDelaySeconds: 5
periodSeconds: 10
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 3
(etc)
详细说明:我有3个子应用程序,它们的模板中都有样板YAML。这些模板中的值在父图表的values.yaml中定义,变量路径相同。例如:
app1、app2和app3部署。yaml都包含…
livenessProbe:
httpGet:
path: {{ .Values.health.livenessProbe.path }}
port: {{ .Values.health.livenessProbe.port }}
initialDelaySeconds: {{ .Values.health.livenessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.health.livenessProbe.periodSeconds }}
timeoutSeconds: {{ .Values.health.livenessProbe.timeoutSeconds }}
successThreshold: {{ .Values.health.livenessProbe.successThreshold }}
failureThreshold: {{ .Values.health.readinessProbe.failureThreshold }}
readinessProbe:
tcpSocket:
port: {{ .Values.health.readinessProbe.port }}
initialDelaySeconds: {{ .Values.health.readinessProbe.initialDelaySeconds }}
periodSeconds: {{ .Values.health.readinessProbe.periodSeconds }}
timeoutSeconds: {{ .Values.health.readinessProbe.timeoutSeconds }}
successThreshold: {{ .Values.health.livenessProbe.successThreshold }}
failureThreshold: {{ .Values.health.readinessProbe.failureThreshold }}
values.yaml(在父图表中)
回到问题上来:我想获取子图表模板中的相同内容,并将其移动到一个集中的位置,如父图表的_helpers.tpl或values.yaml;这可能吗?你能举例说明你是如何做到这一点的吗 Helm在一个具有共享模板名称空间的单一执行环境中,从所有父级和依赖关系图一起呈现它给定的所有YAML。从理论上讲,
app1
图表可以依赖于在父级的\u helpers.tpl
中定义的模板,并且在您显示的特定布局中,它将起作用
由于这种环境设置,还可以编写一个“图表”,它实际上不生成任何YAML,只包含模板。头盔3将包括“图书馆图表”作为一个具体的概念。更好的布局仍然是有一个包含共享模板的库,并引用它
MyHelmApp
\-- charts
+-- app1
| +-- Chart.yaml
| \-- templates/...
\-- common
+-- Chart.yaml
\-- templates
\-- _helpers.tpl
(but no *.yaml)
现在,MyHelmApp
依赖于app1
、app2
、和app3
,而这些都依赖于common
。这将允许您独立于其兄弟安装任何一个
赫尔姆没有办法将YAML的碎片“推”到其他位置的物体中(相对较新的Kubernetes的一部分可以做到这一点)。每个对象都必须为自己声明可能允许的任何潜在自定义。因此,在每个图表中,您必须声明
spec:
{{ include "common.probes" . | indent 2 }}
公共图表只定义模板,当调用它们时,它们将使用本地化到子图表的.Values
版本
{{- define "common.probes" -}}
livenessProbe:
httpGet:
path: {{ .Values.health.livenessProbe.path }}
et: cetera
{{ end -}}