为啥我应该在 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 中的“值”前面有一个破折号?的主要内容,如果未能解决你的问题,请参考以下文章