K8S 之 Deployment聲明式地升級應用

作用:通過Deployment聲明式平滑升級POD

一、創建Deployment文件

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: kubia
  namespace: test
spec:
  replicas: 3
  template:
    metadata:
      name: kubia
      labels:
        app: kubia
    spec:
      containers:
        - name: nodejs
          image: luksa/kubia:v1       #鏡像爲v1版本

二、創建service提供負載服務

apiVersion: v1
kind: Service
metadata:
  name: kubia
  namespace: test
spec:
  ports:
    - name: http
      port: 80
      targetPort: 8080
  selector:
    app: kubia              #標籤匹配到kubia

三、創建delplyment與service

[root@test-nodes1 k8s-yaml-file]# kubectl create -f kubia-deployment-v1.yaml --record
deployment.apps/kubia created
[root@test-nodes1 k8s-yaml-file]# kubectl get all -n test
NAME                         READY   STATUS    RESTARTS   AGE
pod/kubia-66b4657d7b-77t4k   1/1     Running   0          9m5s
pod/kubia-66b4657d7b-ggdft   1/1     Running   0          9m5s
pod/kubia-66b4657d7b-qtckn   1/1     Running   0          9m5s

NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/kubia   3/3     3            3           9m6s

NAME                               DESIRED   CURRENT   READY   AGE
replicaset.apps/kubia-66b4657d7b   3         3         3       9m5s

四、採用deployment對pod進行升級(變更POD版本)

[root@test-nodes1 k8s-yaml-file]# kubectl set image deployment kubia nodejs=luksa/kubia:v2 -n test
deployment.extensions/kubia image updated

[root@test-nodes1 k8s-yaml-file]# kubectl get all -n test
NAME                         READY   STATUS        RESTARTS   AGE
pod/kubia-66b4657d7b-77t4k   0/1     Terminating   0          16m    #終止
pod/kubia-66b4657d7b-ggdft   1/1     Terminating   0          16m     #終止
pod/kubia-66b4657d7b-qtckn   1/1     Terminating   0          16m    #終止
pod/kubia-75974f96b5-b7rhd   1/1     Running       0          27s
pod/kubia-75974f96b5-q4txq   1/1     Running       0          34s
pod/kubia-75974f96b5-tdpbf   1/1     Running       0          43s

NAME            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGE
service/kubia   ClusterIP   192.168.253.59   <none>        80/TCP    4m26s

NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/kubia   3/3     3            3           16m

NAME                               DESIRED   CURRENT   READY   AGE
replicaset.apps/kubia-66b4657d7b   0         0         0       16m
replicaset.apps/kubia-75974f96b5   3         3         3       43s

[root@test-nodes1 k8s-yaml-file]# kubectl get deployment kubia -o wide -n test
NAME    READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES           SELECTOR
kubia   3/3     3            3           20m   nodejs       luksa/kubia:v2   app=kubia

四、deployment回滾升級(當升級失敗時)

$kubectl rollout undo deployment kubia -n test

提示:undo命令也可以在滾動升級過程中運行,並直接停止滾動升級。
在升級過程中已創建的pod會被刪除,並被老版本的pod替代。

五、查看deployment滾動升級歷史

[root@test-nodes1 k8s-yaml-file]# kubectl rollout history deployment kubia -n test
deployment.extensions/kubia 
REVISION  CHANGE-CAUSE
1         kubectl create --filename=kubia-deployment-v1.yaml --record=true
3         kubectl create --filename=kubia-deployment-v1.yaml --record=true
4         kubectl create --filename=kubia-deployment-v1.yaml --record=true

六、將deployment 回滾到相應的版本(如版本1)

[root@test-nodes1 k8s-yaml-file]# kubectl rollout undo deployment kubia --to-revision=1 -n test
deployment.extensions/kubia rolled back
[root@test-nodes1 k8s-yaml-file]# kubectl get deployment kubia -o wide -n test
NAME    READY   UP-TO-DATE   AVAILABLE   AGE   CONTAINERS   IMAGES           SELECTOR
kubia   3/3     3            3           14m   nodejs       luksa/kubia:v1   app=kubia
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章