gitlab + jenkins + docker + k8s持续集成、部署

总体流程:

  • 在开发机开发代码后提交到gitlab
  • 之后通过webhook插件触发jenkins进行构建,jenkins将代码打成docker镜像,push到docker-registry
  • 之后将在k8s-master上执行rc、service的创建,进而创建Pod,从私服拉取镜像,根据该镜像启动容器

jenkins+docker实现自动编译、打包、构建镜像、容器部署中,实现了前两步。本节实现第三步。

一、打通jenkins与k8s-master之间的ssh无密码访问

添加ssh服务器,即安装k8s的服务器:

二、jenkins配置

1.ssh登录并执行脚本

在k8s机器192.168.1.121上执行:


 
 
  1. mkdir -p / data/script
  2. cd / data
  3. vim myservice1-docker-rc.yaml

2.在/data/目录下创建rc和svc文件 

myservice1-docker-rc.yaml文件加入如下内容:


 
 
  1. apiVersion: v1
  2. kind: ReplicationController
  3. metadata:
  4. name: myservice1-docker
  5. spec:
  6. replicas: 2
  7. selector:
  8. app: myservice1-docker
  9. template:
  10. metadata:
  11. labels:
  12. app: myservice1-docker
  13. spec:
  14. containers:
  15. - name: k8s-zpzc
  16. image: 192.168. 1.121: 5000/zpzc
  17. imagePullPolicy: Always
  18. ports:
  19. - containerPort: 8080
  20. volumeMounts:
  21. - mountPath: /usr/ local/jdk
  22. name: jdk
  23. volumes:
  24. - hostPath:
  25. path: /usr/java/jdk1. 8.0_171
  26. name: jdk

注意:由于基于tomcat创建docker镜像时没有引入我们的jdk,所以这里需要使用数据卷volume映射主机host目录上安装的jdk。

vim myservice1-docker-svc.yaml
 
 

加入以下内容:


 
 
  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: myservice1-docker
  5. spec:
  6. type: NodePort
  7. ports:
  8. - port: 8080
  9. nodePort: 30001
  10. selector:
  11. app: myservice1-docker

3.在/data/script/目录下创建service_start.sh脚本


 
 
  1. #!/bin/bash
  2. export service_name= $1
  3. sleep_second=3
  4. echo 'kubectl delete rc ${service_name}'
  5. kubectl delete rc ${service_name}
  6. echo 'kubectl delete service ${service_name}'
  7. kubectl delete service ${service_name}
  8. echo 'kubectl delete pods -l app=${service_name}'
  9. kubectl delete pods -l app= ${service_name}
  10. sleep ${sleep_second}
  11. echo 'create rc'
  12. kubectl create -f /data/ ${service_name}-rc.yaml
  13. echo 'create service'
  14. kubectl create -f /data/ ${service_name}-svc.yaml

说明:

  • 首先删除相应service的rc,service,以及拥有app=${service_name}标签的所有pods
    • 第一次执行该脚本的时候,由于rc、service、pod不存在,删除的话,会打出error日志,无所谓(没任何影响)。
  • 之后,睡3s
  • 最后,创建rc(此时会创建pod,并从registry拉取镜像,最后根据该镜像启动容器),创建service(提供对外访问接口)

三、测试

postman接口测试:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值