學習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: {}