k8s实现Jenkins的Master-Slave分布式构建

简介

image-20210325085956904

Jenkins的Master-Slave分布式构建,就是通过将构建过程分配到从属Slave节点上,从而减轻Master节点的压力,而且同时可以构建多个,有点类似负载均衡的概念。

k8s+Docker+Jenkins持续集成架构图:

image-20210325091415176

环境介绍

安装环境说明

ip 角色 内存 软件
192.168.1.50 代码托管服务器 8G Gitlab
192.168.1.52 Docker仓库 8G Harbor
192.168.1.36 k8s-master 8G k8s,docker,NFS
192.168.1.37 k8s-node1 8G k8s,docker,NFS
192.168.1.38 k8s-node2 8G k8s,docker,NFS

k8s安装这里就不具体介绍了

安装配置NFS

所有节点都需要执行:

yum install -y nfs-utils

master执行:创建共享目录:

mkdir -p /opt/nfs/jenkins
#编写NFS的共享配置
vi /etc/exports 

/opt/nfs/jenkins *(rw,no_root_squash)

开启服务:

#开机启动
systemctl enable nfs
#启动
systemctl start nfs

查看NFS共享目录

showmount -e 192.168.1.36

image-20210328224243708

k8s安装Jenkins-Master

下文所有yaml在https://gitee.com/wj204811/wj204811/tree/master/k8s-jenkins中

cd  nfs-client/
kubectl create -f .
kubectl get pods

image-20210325120641024

cd ../jenkins-master/
kubectl create namespace kube-ops
kubectl create -f .

kubectl get pods --namespace kube-ops
kubectl  get  svc --namespace kube-ops
kubectl  get pod --namespace kube-ops -o wide

image-20210328221124039

浏览器直接访问暴露出来的端口:http://192.168.1.36:32138/,可以访问jenkins

image-20210328221146059

至于具体的k8s_jenkins_jenkins-0_kube-ops后面字符是什么,要自己去看了。

docker logs k8s_jenkins_jenkins-0_kube-ops_d572ec37-07dd-4fe3-b212-3df5ceec121d_0

image-20210328221230602

选择插件来安装

image-20210328221320477 image-20210328221347057 image-20210328221418118 image-20210328221435720

开始使用jenkins:进入我们熟悉的页面

image-20210328215402884

Jenkins-Master基本插件安装

cd /opt/nfs/jenkins/kube-ops-jenkins-home-jenkins-0-pvc-a3a4e5c6-1ba0-41d1-a438-e6029a45b834
cd updates
sed -i 's/http://updates.jenkins-ci.org/download/https://mirrors.tuna.tsinghua.edu.cn/jenkins/g' default.json && sed -i 's/http://www.google.com/https://www.baidu.com/g' default.json

这个页面:

image-20210328215703620

Update Site需要改成清华的url

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
image-20210328221722727

点击提交。

访问:http://192.168.1.36:32138/restart 把jenkins重新启动,等待一段时间,重启完成后,安装一些插件。

image-20210326171524683

image-20210326171848810

image-20210326171953608

image-20210326172109054

安装k8s插件

image-20210328223305254

安装完成后,进入系统配置

image-20210328223459759

点击那行下划线,点击add a new cloud,选择k8s

image-20210328223516297

配置集群,k8s地址固定:https://kubernetes.default.svc.cluster.local/

名称空间填写:kube-ops

点击连接测试,看能否连接上

image-20210328223755195

jenkins连接地址:http://jenkins.kube-ops.svc.cluster.local:8080

image-20210328224007006

点击save apply,然后重启jenkins

构建jenkins-slave自定义镜像

Jenkins-Master在构建Job的时候,Kubernetes会创建Jenkins-Slave的Pod来完成Job的构建。我们选择 运行Jenkins-Slave的镜像为官方推荐镜像:jenkins/jnlp-slave:latest,但是这个镜像里面并没有Maven 环境,为了方便使用,我们需要自定义一个新的镜像:

所有文件已经上传到码云了:https://gitee.com/wj204811/wj204811/tree/master/k8s-jenkins-slave

mkdir jenkins-slave

上传所有文件到jenkins-slave文件夹下

image-20210328225233678

构建镜像:

docker build -t jenkins-slave-maven:lasted .

等待镜像构建,构建成功后,我们需要把镜像上传到harbor中

image-20210328233642450

docker tag jenkins-slave-maven:lasted 192.168.1.52:85/library/jenkins-slave-maven:lasted
#登陆harbor,如果登陆失败,看我这篇博客 https://www.cnblogs.com/wwjj4811/p/14220541.html
docker login -u admin -p Harbor12345 192.168.1.52:85
docker push 192.168.1.52:85/library/jenkins-slave-maven:lasted

image-20210328234636899

image-20210328234708962

jenkins-slave创建

创建jenkins流水线

image-20210328235306255

创建凭证:

image-20210329000712066

image-20210329000733467

设置流水线脚本:

def git_address ="http://192.168.1.50:82/root/tensquare_back.git"
def git_auth = "070a1a0f-6f41-4b47-8b4e-9621087df6fd"
//创建一个Pod的模板,label为jenkins-slave
podTemplate(label: 'jenkins-slave', cloud: 'kubernetes', containers: [
        containerTemplate(
            name: 'jnlp',
            image: "192.168.1.52:85/library/jenkins-slave-maven:lasted"
        )
    ]
)
{
    //引用jenkins-slave的pod模块来构建Jenkins-Slave的pod
    node("jenkins-slave"){
         // 第一步
        stage('拉取代码'){
            checkout([$class: 'GitSCM', branches: [[name: 'master']],userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])
        }
    }
}

image-20210329000807057

点击保存,出来构建该流水线进行测试

在节点管理中,可以看到k8s为我们动态创建了一个节点

image-20210329000921518

等待构建结束后,slave会被动态回收

image-20210329001024801

构建成功。

image-20210329000939665

至此:k8s实现了jenkins的Master-Slave分布式构建。
(中间过程很曲折,坑特别多,花了我好几天时间才搭建完毕)

原文地址:https://www.cnblogs.com/wwjj4811/p/14590698.html