YAML文件格式語法

yaml基礎

學習k8s就不得不學習下yaml語法了
yaml是一種簡潔的非標記語言,YAML以數據爲中心,使用空白,縮進,分行組織數據,從而使得表示更加簡潔易讀。api

YAML語法規則:

大小寫敏感
使用縮進表示層級關係
縮進時不容許使用Tab鍵,只容許使用空格
縮進的空格數目不重要,只要相同層級的元素左側對齊便可
」#」 表示註釋,從這個字符一直到行尾,都會被解析器忽略
字符串能夠不用引號標註
列表項,經過減號「-」加一個空格,多個項使用一樣縮進級別作爲同一列表部分
map結構裏面的鍵值對(key/value)用冒號「:」來分割
數組用「[]」包括起來,hash用「{}」來包括數組

以上就是yaml的語法數據結構

在Kubernetes中,只須要知道兩種結構類型便可:app

Lists
Maps
scalar  在k8s中不使用此類型

使用YAML用於K8s的定義帶來的好處包括:ide

便捷性:沒必要添加大量的參數到命令行中執行命令
可維護性:YAML文件能夠經過源頭控制,跟蹤每次操做
靈活性:YAML能夠建立比命令行更加複雜的結構學習

YAML Maps

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

YAML Lists

List 數組,使用連字符(-)表示,例如:code

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: {}
相關文章
相關標籤/搜索