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

原文:https://www.cnblogs.com/java-zhao/p/6065268.html

总体流程:

  • 在开发机开发代码后提交到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接口测试:

发布了70 篇原创文章 · 获赞 63 · 访问量 23万+

猜你喜欢

转载自blog.csdn.net/xiaoxiangzi520/article/details/89186382