为啥我应该在 K8s pod 定义 YAML 中的“值”前面有一个破折号?

Posted

技术标签:

【中文标题】为啥我应该在 K8s pod 定义 YAML 中的“值”前面有一个破折号?【英文标题】:Why should I have a dash in front of "value" in a K8s pod definition YAML?为什么我应该在 K8s pod 定义 YAML 中的“值”前面有一个破折号? 【发布时间】:2021-04-02 04:46:48 【问题描述】:

值键在“名称”列表下但前面没有破折号是什么意思? (我应该如何阅读和理解这个)

apiVersion: v1
kind: Pod
metadata:
  name: postgres
  labels:
    tier: db-tier
spec:
  containers:
    - name: postgres
      image: postgres
      env:
        - name: POSTGRES_PASSWORD
          value: mysecretpassword

这样做不会产生有效的 K8s YAML。这是为什么呢?

apiVersion: v1
kind: Pod
metadata:
  name: postgres
  labels:
    tier: db-tier
spec:
  containers:
    - name: postgres
      image: postgres
      env:
        - name: POSTGRES_PASSWORD
        - value: mysecretpassword

【问题讨论】:

【参考方案1】:

pod 定义 YAML 文件的 env 部分接受键值对的 array

破折号表示数组中的一个元素。

我建议查看 YAML 规范:https://www.commonwl.org/user_guide/yaml/#arrays

另外推荐绝对初学者的Kubernetes课程,非常棒:

https://www.udemy.com/course/learn-kubernetes/

【讨论】:

【参考方案2】:

如果我们认为您的建议与实际解决方案相反,那么 kubernetes 会处理您的格式

env:
    - name: POSTGRES_PASSWORD
    - value: mysecretpassword
    - name: variable
    - value: answer

作为:-

env: [name:POSTGRES_PASSWORD, value:mysecretpassword, name:variable, value:answer]

这样,K8s 将无法映射键值对的实际对象。

所以在yaml中定义数组的实际格式,或者我们可以说在yaml中定义数组的语法如下。

例如:-

env:
    - name: POSTGRES_PASSWORD
      value: mysecretpassword
    - name: POSTGRES_USER
      value: root

这将被视为:-

env: [name:POSTGRES_PASSWORD, value:mysecretpassword, name:POSTGRES_USER, value:root]

如需更多帮助,您可以访问so link 1 和so link 2。

【讨论】:

以上是关于为啥我应该在 K8s pod 定义 YAML 中的“值”前面有一个破折号?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用heredoc在k8s pod yaml定义中创建yaml文件?

K8S 创建pod yaml文件详解

k8s yaml格式的Pod配置文件

k8s yaml格式的pod定义文件完整内容

k8s的yaml说明

k8s deployment