学习自:
K8s中yaml文件详解(超详细)_yaml list-CSDN博客
0、前言
YAML文件是一种类似JSON的配置文件,相比JSON,YAML使用起来更简洁、强大、方便。
它实质上是一种通用的数据串行化格式。
1、语法规则
- 区分大小写
- 用缩进表明层级,同一缩进代表同一层级;
- 只允许空格缩进,不允许TAB;
- 可以缩进任意空格数,只要保证同级的缩进空格数一样;
- 用#注释
- 两种结构类型:Map和List
Map:键值对
用K:V样式来表示键值对信息,例如:
apiVersion: V1 kind: Pod
其中V也可以是另一个Map:
apiVersion: v1 kind: Pod metadata: name: kube100-site labels: app:web
该Yaml文件中,metadata这个K对应的V为一个Map,嵌套的labels的V也是一个Map。
实际使用中可以根据情况进行多层嵌套。
YAML文件根据缩进数来知道内容间的关联,只要保证同一级内容的缩进空格数一致即可。例如,name和labels是同级缩进,因此YAML处理器知道它们属于同一Map。而app由于在labels下缩进更大,因此app是labels的V。
List:列表、数组
List的标志是缩进的破折号(-),一个破折号就代表一个List中的一个元素:
city: -beijing -shanghai -shenzhen -guangzhou
这里的YAML文件在JSON格式下,就表示为:
{ "args":["beijing","shanghai","shenzhen","guangzhou"] }
有时候会存在List的元素为Map,Map的V为List的情况。区分依据为:
- 一个破折号就代表一个List的元素;
- 一个破折号下边跟了多个K:V,说明这多个K:V共同构成了一个Map,这个Map就是List的这个元素
从一个破折号到下个破折号之间的所有项都属于同一个List元素,新的破折号则代表新的List元素;
例如
apiVersion: v1 kind: Pod metadata: name: kube100-site labels: app: web spec: containers: - name: front-end image: nginx ports: - containerPort: 80 - name: flaskapp-demo image: jcdemo/flaskapp ports: 8080
这个YAML文件中,containers的V就是由两个List元素组成的,分别是上图标红、标蓝的部分,而这两个List元素又各是一个Map。
如果用json文件表示,写为:
{ …… "spec":{ "containers":[{"name":"front-end","image":"nginx","ports":{["containerPort":0]}},
{"name":"flaskapp-demo","image":"jcdemo/flaskapp","ports":8080}] }
2、容器Pod的Yaml文件
学习自:[k8s] 常见yml配置和详细解释_容器初始化配置yaml-CSDN博客
apiVersion: v1 kind: Pod metadata: name: my-pod # Pod 的名称 labels: app: my-app # Pod 的标签,可用于选择器和服务发现 spec: containers: - name: my-container # 容器的名称 image: nginx # 使用的容器镜像 ports: - containerPort: 80 # 容器内部暴露的端口号 protocol: TCP # 端口的协议类型 resources: # 容器所需的资源限制和需求 limits: cpu: "0.5" # CPU 使用上限 memory: "256Mi" # 内存使用上限 requests: cpu: "0.2" # CPU 最小需求 memory: "128Mi" # 内存最小需求 env: # 容器的环境变量 - name: ENV_VAR1 value: value1 - name: ENV_VAR2 valueFrom: secretKeyRef: name: my-secret # 引用的 Secret 对象的名称 key: secret-key # 从 Secret 对象中获取的键名 volumeMounts: # 容器的挂载路径 - name: data-volume # 挂载的卷的名称 mountPath: /data # 挂载的路径 volumes: # Pod 的卷 - name: data-volume # 卷的名称 emptyDir: {} # 空的卷,生命周期与 Pod 相关联 #可以添加 metadata.annotations 字段用于存放其他注释信息 metadata: annotations: description: This is a sample Pod configuration file. # 描述该配置文件的注释
标签:Map,缩进,name,labels,List,Yaml,Pod,K8S From: https://www.cnblogs.com/ShineLeBlog/p/18395928