yaml基础
学习k8s就不得不学习下yaml语法了
yaml是一种简洁的非标记语言,YAML以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁易读。
YAML语法规则:
大小写敏感
使用缩进表示层级关系
缩进时不允许使用Tab键,只允许使用空格
缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
”#” 表示注释,从这个字符一直到行尾,都会被解析器忽略
字符串可以不用引号标注
列表项,通过减号“-”加一个空格,多个项使用同样缩进级别做为同一列表部分
map结构里面的键值对(key/value)用冒号“:”来分割
数组用“[]”包括起来,hash用“{}”来包括
以上就是yaml的语法
在Kubernetes中,只需要知道两种结构类型即可:
Lists
Maps
scalar 在k8s中不使用此类型
使用YAML用于K8s的定义带来的好处包括:
便捷性:不必添加大量的参数到命令行中执行命令
可维护性:YAML文件可以通过源头控制,跟踪每次操作
灵活性:YAML可以创建比命令行更加复杂的结构
YAML Maps
YAML Maps
map,散列表 ,使用冒号(:)表示键值对,同一缩进的所有键值对属于一个map,例如:
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-app: kubernetes-dashboard
addonmanager.kubernetes.io/mode: Reconcile
name: kubernetes-dashboard
namespace: kube-system
如果要把多个kind写于一个文件需要用到
--- 为可选的分隔符 ,当在一个文件中定义多个结构时需要
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
k8s-app: kubernetes-dashboard
addonmanager.kubernetes.io/mode: Reconcile
name: kubernetes-dashboard
namespace: kube-system
#以上labels,name,namespace为同一级,因为都缩进了相同的空格
--- #分隔符,因为此yaml文件定义了二个不同的kind类型
apiVersion: apps/v1
kind: Deployment
metadata:
name: kubernetes-dashboard
namespace: kube-system
labels:
k8s-app: kubernetes-dashboard
kubernetes.io/cluster-service: "true"
addonmanager.kubernetes.io/mode: Reconcile
YAML Lists
List 数组,使用连字符(-)表示,例如:
volumeMounts:
- name: kubernetes-dashboard-certs
mountPath: /certs
- name: tmp-volume
mountPath: /tmp
数据结构嵌套
map嵌套map
apiVersion: v1
kind: ConfigMap
metadata: #map嵌套map
labels: #map嵌套map
k8s-app: kubernetes-dashboard #map嵌套map
# Allows editing resource and makes sure it is created first.
addonmanager.kubernetes.io/mode: EnsureExists
name: kubernetes-dashboard-settings
namespace: kube-system
map嵌套list
volumes: #map
- name: kubernetes-dashboard-certs #list map
secret:
secretName: kubernetes-dashboard-certs
- name: tmp-volume
emptyDir: {}
list嵌套list
在k8s的yaml中比较少见
list嵌套map
volumes: #map
- name: kubernetes-dashboard-certs #list map嵌套list
secret: #map list嵌套map
secretName: kubernetes-dashboard-certs
- name: tmp-volume
emptyDir: {}
转载于:https://blog.51cto.com/running/2324101