這篇文章會實作佈署一個Pod,主要參考資料為官方文件與minikube教程。
官方文件:https://kubernetes.io/zh-cn/docs/tutorials/hello-minikube/#create-a-deployment
minikube文件:https://minikube.cn/docs/
在DAY3中有提到Pod是Kubernetes中最小的可佈署單位,裡面運行著一個或多個容器,這些容器共享同一個網路、存儲資源與在這Pod中訂定的規則。
通常要創建一個Pod會使用工作負載(workload),來創建Pod,因為在Kubernetes中如果你直接創立Pod,這個Pod雖然可以跑,但是當你要更新、修理甚至是銷毀回收時就會比較麻煩,你會需要手動去處理這些問題,這樣跟你手動將容器啟動並上架服務沒有甚麼區別。
workload是一種替使用者管理Pod,減輕負擔的資源類型。
底下為Kubernetes中所有的workload類型
這裡示範使用Deployments來創立一個Pod。
在開始之前要先build一個image並往minikube上載入。
執行下面的指令可以將image載入minikube中,這樣在準備建立時minikube才找的到image。
minikube image load [image名稱]
底下指令可查看minikube中所有的image
minikube image ls
接著進行設定yaml檔,在進行pod的佈署配置時,官方是建議透過撰寫yaml檔案來進行設定。
由於預設上Kubernetes都是從網路上的image倉庫拉取image,所以還要從設定檔案上做變更,讓它從本地上拉取image,所以要在yaml設定imagePullPolicy: Never。
下面是從官方網站上的Deployments設定範例抓下來改的,[Deployment名稱]填入想給Deployment的名稱,[標籤]請都填同樣的名稱,[容器名稱]請填入你要給容器的名稱,[image名稱]請填入你在minikube上的image名稱。
apiVersion: apps/v1
kind: Deployment
metadata:
name: [Deployment名稱]
labels:
app: [標籤]
spec:
replicas: 1
selector:
matchLabels:
app: [標籤]
template:
metadata:
labels:
app: [標籤]
spec:
containers:
- name: [容器名稱]
image: [image名稱]
imagePullPolicy: Never
ports:
- containerPort: 5000
這樣就將設定檔案寫好了。
輸入下面指令來將設定檔套用在kubernetes中。
kubectl apply -f [檔案路徑位置]
套用後kubernetes就會按照設定檔自動執行了。
使用kubectl get deployment [Deployment名稱] 指令查看
kubernetes預設上就是會從image hub上拉取image進行佈署,相對於從本地上載入image而言會簡單許多。
apiVersion: apps/v1
kind: Deployment
metadata:
name: google-samples
labels:
app: google-samples
spec:
replicas: 1
selector:
matchLabels:
app: google-samples
template:
metadata:
labels:
app: google-samples
spec:
containers:
- name: google-samples
image: gcr.io/google-samples/hello-app:1.0
imagePullPolicy: Always
ports:
- containerPort: 5000
輸入下面指令來將設定檔套用在kubernetes中。
kubectl apply -f [檔案路徑位置]
kubernetes會從網路上拉取該image來進行佈署。
使用kubectl get deployment [Deployment名稱] 指令查看
這裡只是用Deployments示範建立一個Pod,之後會將所有workload的特性更仔細的講解並實作一遍。
下一篇會介紹撰寫佈署kubernetes yaml檔時常用的設定。
minikube image load是minikube中獨有的,如果是在正式環境中是不會有這種從本地載入到kubernetes中的指令,基本都是從網路上的倉庫拉取。
imagePullPolicy有三種選項