前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kubernetes(k8s)之jenkins实现k8s应用的版本升级和回归,k8s集群部署项目

Kubernetes(k8s)之jenkins实现k8s应用的版本升级和回归,k8s集群部署项目

作者头像
别先生
发布2020-07-16 19:35:09
5590
发布2020-07-16 19:35:09
举报
文章被收录于专栏:别先生别先生

1、想要实现jenkins一键自动发布代码的话,还需要手动在k8s部署一下集群项目。首先,创建一个deloypment,如下所示:

代码语言:javascript
复制
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参数进行记录,可以通过下面的命令进行查看,可以查看镜像版本,如下所示:

代码语言:javascript
复制
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,如下所示:

代码语言:javascript
复制
 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 ~]# 

此时项目还不能被外界所访问,还需要暴漏一个端口号,如下所示:

代码语言:javascript
复制
 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/。此项目是可以进行访问的。

代码语言:javascript
复制
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这个版本和之前的不能重复的,不然回造成升级版本失败的,需要注意。

代码语言:javascript
复制
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 ~]# 

这里做版本的回滚到上一个版本,并查看历史版本,如下所示:

代码语言:javascript
复制
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 ~]# 

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

代码语言:javascript
复制
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的命令,如下所示:

代码语言:javascript
复制
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]# 

此时为了方便观察,修改界面代码,方便观察效果,模拟提交代码,如下所示:

代码语言:javascript
复制
 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里面写好回滚的命令就行了额。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-07-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档