总体流程:
- 在开发机开发代码后提交到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上执行:
-
mkdir -p /
data/script
-
cd /
data
-
vim myservice1-docker-rc.yaml
2.在/data/目录下创建rc和svc文件
myservice1-docker-rc.yaml文件加入如下内容:
-
apiVersion: v1
-
kind: ReplicationController
-
metadata:
-
name: myservice1-docker
-
spec:
-
replicas:
2
-
selector:
-
app: myservice1-docker
-
template:
-
metadata:
-
labels:
-
app: myservice1-docker
-
spec:
-
containers:
-
-
name: k8s-zpzc
-
image:
192.168.
1.121:
5000/zpzc
-
imagePullPolicy: Always
-
ports:
-
- containerPort:
8080
-
volumeMounts:
-
- mountPath: /usr/
local/jdk
-
name: jdk
-
volumes:
-
- hostPath:
-
path: /usr/java/jdk1.
8.0_171
-
name: jdk
注意:由于基于tomcat创建docker镜像时没有引入我们的jdk,所以这里需要使用数据卷volume映射主机host目录上安装的jdk。
vim myservice1-docker-svc.yaml
加入以下内容:
-
apiVersion: v1
-
kind: Service
-
metadata:
-
name: myservice1-docker
-
spec:
-
type: NodePort
-
ports:
-
- port:
8080
-
nodePort:
30001
-
selector:
-
app: myservice1-docker
3.在/data/script/目录下创建service_start.sh脚本
-
#!/bin/bash
-
export service_name=
$1
-
sleep_second=3
-
-
echo
'kubectl delete rc ${service_name}'
-
kubectl delete rc
${service_name}
-
-
echo
'kubectl delete service ${service_name}'
-
kubectl delete service
${service_name}
-
-
echo
'kubectl delete pods -l app=${service_name}'
-
kubectl delete pods -l app=
${service_name}
-
-
sleep
${sleep_second}
-
-
echo
'create rc'
-
kubectl create -f /data/
${service_name}-rc.yaml
-
-
echo
'create service'
-
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接口测试: