在前一章介紹完ReplicaSet,再來會介紹建立Deployment。
前一章有提到,基本上都是會用Deployment去控制ReplicaSet,下面的教學就可以看出建立Deployment跟ReplicaSet有何關係。
首先建立一個nginx-example.yaml,並將下面內容複製進去。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
並在該yaml檔所在的目錄執行 apply
kubectl apply -f nginx-example.yaml
這樣就可以建立Deployment,如果要確認有沒有建立成功,則可以使用get deployments
kubectl get deployments
可以看到下圖有成功建立,如果你這時get pods的話,可以看到有三個pod正在建立。
並且透過下圖可知,在建立完Deployment前,是沒有ReplicaSet的,但是建立之後,就會出現名為nginx-deployment-7848d4b86f的ReplicaSet。
並且看到DESIRED跟CURRENT都是3,代表他期望有三個pod且當前有三個pod,不過由於READY是0,代表pod都還沒準備好,等一下再做get rs,就可以發現READY變成3了,代表pod都已經準備好可以運作了。
透過下面的指令,可以更新Deployment內image,以這個範例來說,可以將pod內的image從1.14.2改成1.16.1
kubectl set image deployment/nginx-deployment nginx=nginx:1.16.1 --record
這樣可以將image更新,這時去get pods可以看到pods有重啟,但是Deployment並沒有重啟。
如果已經不再需要Deployment,則可以用下面的指令刪除Deployment。
kubectl delete deployment nginx-deployment
由於前面的metadata.name為nginx-deployment,所以這邊刪除要指定刪nginx-deployment。
刪除後就會像下面這樣:
在這章可以看出Deployment跟ReplicaSet是互相依靠的,就算當下沒有ReplicaSet,產生Deployment時也會順便產生一份。
在上面有示範更新Deployment內image,會看到他先建立新的pod,再把舊的pod給下掉,這種方式跟你使用哪種strategy有關,因此下一章會介紹Deployment所使用的不同strategy。