yaml 格式 - daniel-qa/Azure-Kubernetes-Service GitHub Wiki
- yaml yaml 全名為 (Yet Another Markup Language),
是一種用來描述設定且易讀的文字格式 (human-readable text-based format)。
- 優點
方便:部署不需要再輸入一大堆參數 易維護:可以利用版本控制 (git, bitbucket, ..) 追蹤變化 彈性:很容易新增或刪除項目 使用 yaml 基本上只要弄清楚 map 與 list,大致上就沒有閱讀或寫作上的問題。
* map map 是由 key-value 組成。
# 註解內容 <=== 註解就用 # 符號
--- <=== 利用這個來區隔不同物件的設定
apiVersion: v1 <=== 指定使用 v1 版本 的 api
kind: Pod <=== 指定類型為 Pod
第一行 --- 是分隔線,如果想在一個 yaml 撰寫多個物件設定的話,可以利用 --- 做區分。
等於以下 JSON
{
"apiVersion": "v1",
"kind": "Pod"
}
再看一個更複雜的結構
---
apiVersion: v1
kind: Pod
metadata:
name: web <=== 這裡的意思就是指定 Pod 的名稱為 web
labels:
app: web <=== 替 Pod 打上 app:web 的標記
其中 metadata 中包含了 name 與 labels,而 labels 又包含了 app。習慣上,
我們會使用兩個空白來描述被包含的內容
對齊與空格數很重要,必須要一致。如果你想使用四個空格,那整份文件就必須使用四個空格來組成
對應的 JSON 會長這樣
{
"apiVersion": "v1",
"kind": "Pod",
"metadata":{
"name": "web",
"labels":{
"app": "web"
}
}
}
- list
list 由 - 開頭並加入一個空格,例如
args:
- parameters
- "custom message"
JSON 會變成
{
"args": ["parameters", "custom message"]
}
當然,map 也可以是 list 的成員,例如
spec:
containers: <=== 底下的 map 都是 list 的成員
- name: frontend
image: nginx
port: <=== 底下的 map 都是 list 的成員
- containerPort: 80
等於以下的 JSON
{
"spec":{
"containers":[{
"name": "frontend",
"image": "nginx",
"port": [{
"containerPort": "80"
}]
}]
}
}
描述第一個 Pod 物件 學會了上面的 yaml,我們就可以動手攥寫第一個 Pod 物件並嘗試部署到 k8s 中。事實上,我們已經寫好了!把上述的例子重新組合一下,並存成 pod.yaml
pod.yaml
---
apiVersion: v1 <=== 指定使用 v1 版本的 api
kind: Pod <=== 指定類型為 Pod
metadata: <=== 將 Pod 命名為 web,並加入 app:web 的標記
name: web
labels:
app: web
spec: <=== 規格描述
containers: <=== 描述容器
- name: frontend <=== 將容器命名為 frontend
image: nginx <=== 使用 nginx 映像檔
ports:
- containerPort: 80 <=== 指定使用 80 port
還記得如何利用 kubectl 部署 yaml 檔嗎?試試底下指令
$ kubectl apply -f pod.yaml
pod "web" created
恭喜你!終於完成了第一個 Pod 物件的部署。