滾動更新用在更新不同版本的容器時,可以自動化將舊的容器版本更換成新的版本。依照預設流程會先起一個新版本的容器,確定穩定運作後再把一個舊版本容器刪掉,接著起一個新版本容器...直到替換完所有容器版本。
在實驗開始前,一樣記得透過簡單的nodeSelector指定佈署節點,我的節點命名如下表:
節點名稱 | k8s-node02(Kubernetes節點) | edge(KubeEdge節點) |
---|---|---|
(標籤名)name | k8s-node02 | edge |
首先在Kubernetes上使用版本更新替換NGINX版本:
# k8s-nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: k8s-nginx-deploy
namespace: default
labels:
app: k8s-nginx-deploy
spec:
replicas: 3
selector:
matchLabels:
app: k8s-nginx-deploy
template:
metadata:
labels:
app: k8s-nginx-deploy
spec:
containers:
- image: nginx:latest
name: nginx
ports:
- containerPort: 80
nodeSelector:
name: k8s-node02
kubectl apply -f k8s-nginx-deploy.yaml
kubectl get pods
確認服務正常運行後進行滾動更新:
# kubectl set image deployment <deployment-name> <container-name>=<images> --record
kubectl set image deployment k8s-nginx-deploy nginx=nginx:stable --record
# 查看滾動更新情形
# kubectl rollout status deployment <deployment-name>
kubectl rollout status deployment k8s-nginx-deploy
# 查看deployment目前使用的images版本
kubectl get deployments -o wide
# 查看滾動更新歷史紀錄
# kubectl rollout history deployment <deployment-name>
kubectl rollout history deployment k8s-nginx-deploy
查看滾動更新的整個過程
檢查images已經成功替換成nginx:stable
最後因為我們有加上--record參數,所以這次滾動更新會寫入歷史紀錄中:
寫入歷史紀錄後也可以根據歷史紀錄指定回滾成哪個版本的images:
現在我們有兩個歷史紀錄,同時目前NGINX版本是latest
# 透過歷史紀錄指定更新回哪一版本,這裡我們指定revision=2,把版本換回latest
# kubectl rollout undo deployment <deployment-name> --to-revision=N
kubectl rollout undo deployment k8s-nginx-deploy --to-revision=2
查看滾動更新過程,可以發現NGINX版本重新改成stable;而且這次更新同樣被記錄在歷史紀錄中:
接著我們在KubeEdge節點上試試看:
# edge-nginx-deploy.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deploy
namespace: default
labels:
app: nginx-deploy
spec:
replicas: 3
selector:
matchLabels:
app: nginx-deploy
template:
metadata:
labels:
app: nginx-deploy
spec:
containers:
- image: nginx:latest
name: nginx
ports:
- containerPort: 80
nodeSelector:
name: edge
kubectl apply -f edge-nginx-deploy.yaml
# 確認NGINX服務佈署節點
kubectl get pods -o wide
# 從deployment查看佈署狀態,可同時確認更新前的NGINX版本
kubectl get deployment -o wide
確認完成佈署後,進行滾動更新
kubectl set image deployment edge-nginx-deploy nginx=nginx:stable --record
查看滾動更新狀態:
可以看到滾動更新後,NGINX版本已經從latest變為stable。
所以從今天的測試中可以發現,在Kubernetes以及KubeEdge(v1.4)中都可以實現服務的滾動更新