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://root@192.168.110.135': 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里面寫好回滾的命令就行了額。