学习k8s就不得不学习下yaml语法了
yaml是一种简洁的非标记语言,YAML以数据为中心,使用空白,缩进,分行组织数据,从而使得表示更加简洁易读。api
大小写敏感
使用缩进表示层级关系
缩进时不容许使用Tab键,只容许使用空格
缩进的空格数目不重要,只要相同层级的元素左侧对齐便可
”#” 表示注释,从这个字符一直到行尾,都会被解析器忽略
字符串能够不用引号标注
列表项,经过减号“-”加一个空格,多个项使用一样缩进级别作为同一列表部分
map结构里面的键值对(key/value)用冒号“:”来分割
数组用“[]”包括起来,hash用“{}”来包括数组
以上就是yaml的语法数据结构
在Kubernetes中,只须要知道两种结构类型便可:app
Lists Maps scalar 在k8s中不使用此类型
使用YAML用于K8s的定义带来的好处包括:ide
便捷性:没必要添加大量的参数到命令行中执行命令
可维护性:YAML文件能够经过源头控制,跟踪每次操做
灵活性:YAML能够建立比命令行更加复杂的结构学习
YAML Mapsspa
map,散列表 ,使用冒号(:)表示键值对,同一缩进的全部键值对属于一个map,例如:命令行
apiVersion: v1 kind: ServiceAccount metadata: labels: k8s-app: kubernetes-dashboard addonmanager.kubernetes.io/mode: Reconcile name: kubernetes-dashboard namespace: kube-system
若是要把多个kind写于一个文件须要用到scala
--- 为可选的分隔符 ,当在一个文件中定义多个结构时须要
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
List 数组,使用连字符(-)表示,例如:code
volumeMounts: - name: kubernetes-dashboard-certs mountPath: /certs - name: tmp-volume mountPath: /tmp
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
volumes: #map - name: kubernetes-dashboard-certs #list map secret: secretName: kubernetes-dashboard-certs - name: tmp-volume emptyDir: {}
在k8s的yaml中比较少见
volumes: #map - name: kubernetes-dashboard-certs #list map嵌套list secret: #map list嵌套map secretName: kubernetes-dashboard-certs - name: tmp-volume emptyDir: {}