设置多行字符串时,例如
mariadb:
database: &databaseName keycloakdb
port: &databaseServicePort 3306
extraEnv: |
- name: DB_PORT
value: *databaseServicePort
- name: DB_DATABASE
value: *databaseName
构建values.yaml时,extraEnv中的 anchor 不会扩展。它们被“按原样”传递到模板,解析器会在模板中抛出错误,因为它找不到 anchor 。 将 extraEnv 更改为数组而不是字符串不是一个选项,因为它需要传递到外部 helm 图表。
最佳答案
这实际上就是 YAML 的工作原理。 anchor 不是通用的替换机制;它们是指定相同的完整列表、映射或标量值出现在文件中多个位置的方法。您只能使用 alias node作为其他字段的完整值。
mariadb: &mariadb
database: &databaseName keycloakdb
options: *mariadb # the mapping including a `database:` key
dbName: *databaseName # the scalar string "keycloakdb"
aString: text including *databaseName # literally the string "*databaseName"
在大多数情况下,我会避免使用 YAML anchor 。在 Helm 上下文中更是如此,您可以使用其模板系统来填充内容。
在这里,我会避免尝试在 Helm 值中提供任意大的 Kubernetes YAML block 。相反,在模板文件中设置环境变量:
# templates/deployment.yaml
env:
- name: DB_PORT
value: {{ .Values.mariadb.port }}
- name: DB_DATABASE
value: {{ .Values.mariadb.database }}
{{- with .Values.extraEnv }}
{{- toYaml . | indent 2 }}
{{- end }}
关于yaml - Helm 值.yaml : Use Anchors in multiline string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73538649/