空值 {} Kubernetes Helm chart yaml 文件的含义是什么?



Helm 图表 YAML 文件中{}的空值是什么意思?

在一些 Helm 图表中,我看到一些values.yamloverride_values.yaml文件,其中{}空值。 例如

containerSecurityContext: {}
podSecurityContext: {}

YAML 文件中这些{}值的用途是什么?这是否意味着使用默认值或父文件夹 YAML 文件值或其他内容?

您可以将这些{}视为空占位符。当您使用helm create <chart-name>创建原始 helm 图表时,在许多默认文件中,Helm 将创建一个包含裸公共变量的 values.yaml 文件。如果选择指定这些值(如containerSecurityContextpodSecurityContext),则将删除{}并填充所需的状态。例如:

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文件的内容将保持不变(我不相信有办法删除图表级别设置的单个字段)。

最新更新