Helm 图表 YAML 文件中{}
的空值是什么意思?
在一些 Helm 图表中,我看到一些values.yaml
或override_values.yaml
文件,其中{}
空值。 例如
containerSecurityContext: {}
podSecurityContext: {}
YAML 文件中这些{}
值的用途是什么?这是否意味着使用默认值或父文件夹 YAML 文件值或其他内容?
您可以将这些{}
视为空占位符。当您使用helm create <chart-name>
创建原始 helm 图表时,在许多默认文件中,Helm 将创建一个包含裸公共变量的 values.yaml 文件。如果选择指定这些值(如containerSecurityContext
或podSecurityContext
),则将删除{}
并填充所需的状态。例如:
podSecurityContext:
fsGroup: 1000
securityContext:
runAsNonRoot: true
runAsUser: 1000
因此,主要要点是,如果您选择指定这些值,删除{}
会告诉 Helm 为其存储了一个值,否则{}
的存在会告诉 Helm 没有指定的状态。
它是空映射的YAML语法,类似于{}
JSON或JavaScript或其他语言的含义。 这并不意味着任何形式的继承,但它可能意味着将 Kubernetes 的默认值用于各种事情。
与 Helm 中的任何内容一样,values.yaml
文件是由图表模板读取的配置,因此如何使用它很重要。
空映射为"false",因此您可以在图表中使用它来有条件地发出块(如果设置了任何值):
{{- with .Values.containerSecurityContext }}
securityContext: {{- . | toYaml | nindent 2 }}
{{- end }}
图表之间本身没有任何"继承",但如果一个值经常未设置,Kubernetes 经常有可以使用的默认值。 要从 pod 安全上下文中选择一个任意示例,fsGroupChangePolicy
在 Kubernetes 级别有一个默认值,因此
# values_1.yaml
podSecurityContext:
fsGroupChangePolicy: OnRootMismatch # overrides Kubernetes's default
# values_2.yaml
podSecurityContext: {}
# fsGroupChangePolicy has a Kubernetes default of "Always"
图表的values.yaml
文件和任何其他helm install -f
文件都会合并,因此如果覆盖文件包含空映射{}
则此时图表values.yaml
文件的内容将保持不变(我不相信有办法删除图表级别设置的单个字段)。