iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 15
0
IoT

從開源kubernetes雲端運算到kubeedge雲邊協同系列 第 15

Day 15 KubeEdge 服務滾動更新

  • 分享至 

  • xImage
  •  

滾動更新用在更新不同版本的容器時,可以自動化將舊的容器版本更換成新的版本。依照預設流程會先起一個新版本的容器,確定穩定運作後再把一個舊版本容器刪掉,接著起一個新版本容器...直到替換完所有容器版本。
在實驗開始前,一樣記得透過簡單的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
  • container-name
    在YAML檔中spec.containers底下的name(見上面YAML檔中的第21行)
  • images
    想要替換的新版本images
  • --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)中都可以實現服務的滾動更新


上一篇
Day 14 KubeEdge與Service應用(使用NodePort)
下一篇
Day 16 KubeEdge: 指定佈署節點(NodeSelector)
系列文
從開源kubernetes雲端運算到kubeedge雲邊協同30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言