1. 程式人生 > 實用技巧 >Kubernetes(k8s)之jenkins實現k8s應用的版本升級和迴歸,k8s叢集部署專案

Kubernetes(k8s)之jenkins實現k8s應用的版本升級和迴歸,k8s叢集部署專案

1、想要實現jenkins一鍵自動釋出程式碼的話,還需要手動在k8s部署一下叢集專案。首先,建立一個deloypment,如下所示:

1 [root@k8s-master ~]# kubectl run feiji --image=192.168.110.133:5000/feiji:v1 --replicas=2 --re
2 --record            --replicas=         --requests=         --request-timeout=  --restart=          
3 [root@k8s-master ~]# kubectl run feiji --image=192.168
.110.133:5000/feiji:v1 --replicas=2 --record 4 deployment "feiji" created 5 [root@k8s-master ~]#

使用record引數進行記錄,可以通過下面的命令進行檢視,可以檢視映象版本,如下所示:

1 [root@k8s-master ~]# kubectl rollout history deployment feiji
2 deployments "feiji"
3 REVISION    CHANGE-CAUSE
4 1        kubectl run feiji --image=192.168.110.133
:5000/feiji:v1 --replicas=2 --record 5 6 [root@k8s-master ~]#

可以通過命令進行檢視,這個deploy已經啟動了兩個副本Pod,如下所示:

 1 [root@k8s-master ~]# kubectl get all
 2 NAME           DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
 3 deploy/feiji   2         2         2            2           2m
 4 
 5 NAME             CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
6 svc/kubernetes 10.254.0.1 <none> 443/TCP 11h 7 8 NAME DESIRED CURRENT READY AGE 9 rs/feiji-2742263606 2 2 2 2m 10 11 NAME READY STATUS RESTARTS AGE 12 po/feiji-2742263606-0w2cz 1/1 Running 0 2m 13 po/feiji-2742263606-ltdvr 1/1 Running 0 2m 14 [root@k8s-master ~]# kubectl get all -o wide 15 NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE 16 deploy/feiji 2 2 2 2 2m 17 18 NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR 19 svc/kubernetes 10.254.0.1 <none> 443/TCP 11h <none> 20 21 NAME DESIRED CURRENT READY AGE CONTAINER(S) IMAGE(S) SELECTOR 22 rs/feiji-2742263606 2 2 2 2m feiji 192.168.110.133:5000/feiji:v1 pod-template-hash=2742263606,run=feiji 23 24 NAME READY STATUS RESTARTS AGE IP NODE 25 po/feiji-2742263606-0w2cz 1/1 Running 0 2m 172.16.78.4 k8s-node3 26 po/feiji-2742263606-ltdvr 1/1 Running 0 2m 172.16.31.6 k8s-node2 27 [root@k8s-master ~]#

此時專案還不能被外界所訪問,還需要暴漏一個埠號,如下所示:

 1 [root@k8s-master ~]# kubectl expose deployment feiji --port=80 --type=NodePort
 2 service "feiji" exposed
 3 [root@k8s-master ~]# kubectl get all
 4 NAME           DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
 5 deploy/feiji   2         2         2            2           4m
 6 
 7 NAME             CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
 8 svc/feiji        10.254.23.13   <nodes>       80:32283/TCP   7s
 9 svc/kubernetes   10.254.0.1     <none>        443/TCP        11h
10 
11 NAME                  DESIRED   CURRENT   READY     AGE
12 rs/feiji-2742263606   2         2         2         4m
13 
14 NAME                        READY     STATUS    RESTARTS   AGE
15 po/feiji-2742263606-0w2cz   1/1       Running   0          4m
16 po/feiji-2742263606-ltdvr   1/1       Running   0          4m
17 [root@k8s-master ~]# kubectl get all -o wide
18 NAME           DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
19 deploy/feiji   2         2         2            2           4m
20 
21 NAME             CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE       SELECTOR
22 svc/feiji        10.254.23.13   <nodes>       80:32283/TCP   9s        run=feiji
23 svc/kubernetes   10.254.0.1     <none>        443/TCP        11h       <none>
24 
25 NAME                  DESIRED   CURRENT   READY     AGE       CONTAINER(S)   IMAGE(S)                        SELECTOR
26 rs/feiji-2742263606   2         2         2         4m        feiji          192.168.110.133:5000/feiji:v1   pod-template-hash=2742263606,run=feiji
27 
28 NAME                        READY     STATUS    RESTARTS   AGE       IP            NODE
29 po/feiji-2742263606-0w2cz   1/1       Running   0          4m        172.16.78.4   k8s-node3
30 po/feiji-2742263606-ltdvr   1/1       Running   0          4m        172.16.31.6   k8s-node2
31 [root@k8s-master ~]# 

此時訪問地址,http://192.168.110.133:32283/。此專案是可以進行訪問的。

1 [root@k8s-master ~]# curl 192.168.110.133:32283 | grep 'feiji'
2   % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
3                                  Dload  Upload   Total   Spent    Left  Speed
4 100  1081  100  1081    0     0   216k      0 --:--:-- --:--:-- --:--:--  263k
5 [root@k8s-master ~]# 

此時使用Jenkins實現k8s裡面的專案版本更新,k8s中版本升級和回滾,首先實現手動實現專案版本升級和回滾。這裡實現版本的升級並檢視歷史版本,如下所示:

手動做版本升級的時候,Vx這個版本和之前的不能重複的,不然回造成升級版本失敗的,需要注意。

1 [root@k8s-master ~]# kubectl set image deploy feiji feiji=192.168.110.133:5000/feiji:v3
2 deployment "feiji" image updated
3 [root@k8s-master ~]# kubectl rollout history deployment feiji
4 deployments "feiji"
5 REVISION    CHANGE-CAUSE
6 1        kubectl run feiji --image=192.168.110.133:5000/feiji:v1 --replicas=2 --record
7 2        kubectl set image deploy feiji feiji=192.168.110.133:5000/feiji:v3
8 
9 [root@k8s-master ~]# 

這裡做版本的回滾到上一個版本,並檢視歷史版本,如下所示:

1 [root@k8s-master ~]# kubectl rollout undo deployment feiji
2 deployment "feiji" rolled back
3 [root@k8s-master ~]# kubectl rollout history deployment feiji
4 deployments "feiji"
5 REVISION    CHANGE-CAUSE
6 2        kubectl set image deploy feiji feiji=192.168.110.133:5000/feiji:v3
7 3        kubectl run feiji --image=192.168.110.133:5000/feiji:v1 --replicas=2 --record
8 
9 [root@k8s-master ~]# 

可以回滾到指定的版本,如下所示:

1 [root@k8s-master ~]# kubectl rollout undo deployment feiji --to-revision=1

2、上面是手動做的版本更新,下面做自動版本的更新,首先需要在Jenkins進行配置。之前是直接將映象推送到私有倉庫就結束了,現在要使用kubectl進行更新。
由於k8s的Node節點不能執行kubectl set image deploy feiji feiji=192.168.110.133:5000/feiji:v$BUILD_ID,是執行不成功的,如果需要遠端執行k8s的命令,先測試一下,-s執行api-server的命令,如下所示:

1 [root@k8s-node3 feiji]# kubectl -s 192.168.110.133:8080 get nodes 
2 NAME         STATUS    AGE
3 k8s-master   Ready     27d
4 k8s-node2    Ready     27d
5 k8s-node3    Ready     27d
6 [root@k8s-node3 feiji]# 

此時為了方便觀察,修改介面程式碼,方便觀察效果,模擬提交程式碼,如下所示:

 1 [root@k8s-node3 feiji]# vim index.html 
 2 [root@k8s-node3 feiji]# git add .
 3 [root@k8s-node3 feiji]# git commit -m '2rd update feiji!'
 4 [master f2722e1] 2rd update feiji!
 5  1 file changed, 3 insertions(+), 3 deletions(-)
 6 [root@k8s-node3 feiji]# git push -u origin master 
 7 Username for 'http://192.168.110.135': root
 8 Password for 'http://[email protected]': 
 9 Counting objects: 5, done.
10 Delta compression using up to 2 threads.
11 Compressing objects: 100% (3/3), done.
12 Writing objects: 100% (3/3), 341 bytes | 0 bytes/s, done.
13 Total 3 (delta 2), reused 0 (delta 0)
14 To http://192.168.110.135/root/feiji.git
15    caba46a..f2722e1  master -> master
16 Branch master set up to track remote branch master from origin.
17 [root@k8s-node3 feiji]# 

此時點選立即構建,然後觀察是否已經正常升級了,如下所示:

然後檢視控制檯輸出,發現已經更新了,如下所示:

此時訪問地址,http://192.168.110.133:32283/。此專案是可以進行訪問的。如果想要回滾,可以在Jenkins上面建立一個任務,然後在shell裡面寫好回滾的命令就行了額。