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分布式構建。
(中間過程很曲折,坑特別多,花了我好幾天時間才搭建完畢)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM