gitlab + jenkins + docker + k8s

整体流程:html

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

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

 

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

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

添加ssh server:web

说明:因为不须要拷贝jenkins机器上的文件到10.211.55.6,因此Remote Directory不填。docker

 

2、jenkins服务配置api

选择机器,执行命令。浏览器

 

3、k8s-master(10.211.55.6)bash

一、在/data/目录下建立rc和svc文件app

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-docker
13     spec:
14       containers:
15       - name: myservice1-docker
16         image: 10.211.55.4:5000/com.xxx/myservice1-docker:1.0-SNAPSHOT
17         imagePullPolicy: Always
18         ports:
19         - containerPort: 8080
复制代码

说明:imagePullPolicy:

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

1.二、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
复制代码

二、在/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.yaml
18 
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(提供对外访问接口)

 

3、测试

一、本地:

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

二、查看jenkins的console

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

相关文章
相关标签/搜索