我正在研究为 selenium 网格提供的舵图。我可以看到这里使用了 YAML 锚点和别名。
然而,当我使用 helm install dry run 时,这些锚点会逐字显示在生成的清单中:
-helm install --namespace selenium-spot --debug --dry-run guava ./charts/selenium-grid/
metadata:
name: selenium-chrome-node
namespace: selenium-spot
**labels: &chrome_node_labels**
app: selenium-chrome-node
app.kubernetes.io/name: selenium-chrome-node
app.kubernetes.io/managed-by: helm
app.kubernetes.io/instance: guava
app.kubernetes.io/version: 4.8.1-20230221
app.kubernetes.io/component: selenium-grid-4.8.1-20230221
helm.sh/chart: selenium-grid-0.15.3
spec:
replicas: 1
selector:
matchLabels:
app: selenium-chrome-node
app.kubernetes.io/instance: guava
template:
metadata:
**labels: *chrome_node_labels**
是否有任何我在这里看不到的二次渲染?我在这里遗漏了什么我期待锚
"&"
复制它下面的所有值和别名"*"
将它插入到任何使用它的地方。
Helm 图表的输出是纯文本,恰好解析为 YAML。除了验证生成的文档实际上是有效的 YAML 之外,Helm 不会解析和重新序列化它;您得到的是模板的实际输出。即使不使用 YAML 锚点,您也可以看到内联 vs. 块列表、缩进和额外空行的差异,即使它们对 YAML 序列化无关紧要,这些也会在输出中忠实地再现。
根据我的经验,YAML 锚点在 Helm 图表中并不是真正惯用的,特别是因为同一个块可以在多个文件中重复。写个helper template比较常见
{{/* _helpers.tpl */}}
{{- define "mychart.labels" -}}
app: selenium-chrome-node
app.kubernetes.io/name: selenium-chrome-node
et: cetera
{{ end -}}
然后你可以在它出现的任何地方包含该模板,即使它在多个文件中。
{{/* deployment.yaml */}}
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
{{ include "mychart.labels" . | indent 4 }}
spec:
template:
metadata:
labels:
{{ include "mychart.labels" . | indent 8 }}