YAML(/ˈjæməl/,尾音類似camel駱駝)是一個可讀性高,用來表達資料序列化的格式。YAML參考了其他多種語言,包括:C語言、Python、Perl,並從XML、電子郵件的數據格式(RFC 2822)中獲得靈感。Clark Evans在2001年首次發表了這種語言[1],另外Ingy döt Net與Oren Ben-Kiki也是這語言的共同設計者[2]。目前已經有數種程式語言或手稿語言支援(或者說解析)這種語言。
YAML是"YAML Ain't a Markup Language"(YAML不是一種標記語言)的遞迴縮寫。在開發的這種語言時,YAML 的意思其實是:"Yet Another Markup Language"(仍是一種標記語言)[3],但為了強調這種語言以數據做為中心,而不是以標記語言為重點,而用反向縮略語重新命名。
就用k0s裡面部署的yaml來進行舉例
apiVersion: apps/v1 # key值叫apiVersion,value是apps/v1
kind: Deployment
maps的value也可以是一個maps
metadata: # 這邊就是階層式的宣告,metadata底下有個叫name的key-value設定值,基本上是使用2個空白進行同階的處理,大原則就是一致的縮排空白數量
name: k0s-nginx
如果在yaml中有array的資料想要使用,可以使用-
進行資料分隔,
list的value也可以是maps,maps的value也可以是list,視自己的需求來決定yaml怎麼組成
spec:
containers:
- command
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
- args: # 同args : [proxy,sidecar]
- proxy
- sidecar
apiVersion
: 簡單說就是版本號,目前是v1版,但是這個版本還是會根據k8s的版本迭代。kind
: 要建立的資源類型,有Pod、Deployment、Job、Ingress、Service,主要還是以Deployment為主要講解類型。metadata
: pod的meta資訊
spec
: k8s的參數,有container、name、image、command、args、workingDir、ports、env、resource、volumeMounts、livenessProbe、readinessProbe、livecycle、terminationMessagePath、imagePullPolicy、securityContext、stdin、stdinOnce、tty..等等。以下為一個簡單的nginx Deployment yaml檔
apiVersion: apps/v1 # 版本v1
kind: Deployment
metadata:
name: k0s-nginx
spec:
selector:
matchLabels:
app: nginx
replicas: 1
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80