首页 > 代码库 > gitlab + jenkins + docker + k8s

gitlab + jenkins + docker + k8s

技术分享

总体流程:

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

在第四十三章 微服务CICD(5)- gitlab + jenkins + docker中,实现了前两步。本节实现第三步

 

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

参考:第四十二章 微服务CICD(4)- jenkins + gitlab + webhooks + publish-over-ssh(2)

添加ssh server:

技术分享

说明:由于不需要拷贝jenkins机器上的文件到10.211.55.6,所以Remote Directory不填。

 

二、jenkins服务配置

技术分享

选择机器,执行命令。

 

三、k8s-master(10.211.55.6)

1、在/data/目录下创建rc和svc文件

1.1、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-docker13     spec:14       containers:15       - name: myservice1-docker16         image: 10.211.55.4:5000/com.xxx/myservice1-docker:1.0-SNAPSHOT17         imagePullPolicy: Always18         ports:19         - containerPort: 8080

说明:imagePullPolicy:

  • Always:总是拉取镜像,如果tag是lastest的话,该配置是默认值
  • IfNotPresent:如果镜像不存在,则拉取镜像,如果tag不是lastest的话,该配置是默认值
  • Never

1.2、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: 3000110   selector:11     app: myservice1-docker

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

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

说明:

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

 

三、测试

1、本地:

  • git add --all
  • git commit -m"test k8s cicd"
  • git push origin HEAD:dev

2、查看jenkins的console

3、浏览器访问http://10.211.55.8:30001/docker/hello

gitlab + jenkins + docker + k8s