基于Kubernetes 构建jenkins-slave动态节点 | Eddie'Blog
基于Kubernetes 构建jenkins-slave动态节点

基于Kubernetes 构建jenkins-slave动态节点

eddie 1,136 2020-06-14

前言

本人是Java后端开发。如有错误请留言指出,共同改进。因是原创,请勿转载! 如需脚本与流程指导,可留言!

jenkins-slave

一、实践环境准备

1. 服务器说明

我这里使用的是八台centos 7.2实体机, 具体信息如下表:

系统类型IP地址节点角色CPUMemoryHostname
centos-7.2192.168.8.240master>=8>=16Gk8s-master0
centos-7.2192.168.8.241master>=8>=8Gk8s-master1
centos-7.2192.168.8.242master>=8>=8Gk8s-master2
centos-7.2192.168.8.243worker>=4>=4Gk8s-worker1
centos-7.2192.168.8.244worker>=4>=4Gk8s-worker2
centos-7.2192.168.8.245worker>=2>=4Gk8s-gluster0
centos-7.2192.168.8.245worker>=2>=4Gk8s-gluster1
centos-7.2192.168.8.245worker>=2>=4Gk8s-gluster2

2. 准备工作

2.1 准备 Kubernetes 集群或者单机部署

相信应该看这文章小伙伴已经安装好环境,如果没有可以百度一下

2.2 实用Pod形式或者其他方式安装 jenkins-master (按需)

kubectl apply -f jenkins-deployment.yaml  
kubectl apply -f jenkins-glusterfs-pvc.yaml  
kubectl apply -f jenkins-ingress.yaml  
kubectl apply -f jenkins-rbac.yaml

二、Jenkins页面操作

1. 安装插件

1.1 安装 Kubernetes 插件

1. 系统管理
2. 插件管理
3. 可选插件
4. 过滤:Kubernetes plugin
5. 安装后重启

2. 配置 Kubernetes 连接部分

2.1 系统管理 --> 节点列表 --> Configure Clouds

jenkins-k8s-01

2.3 配置 Kubernetes 对应IP

所有实用到端口都是在创建Pod时候指定暴露的,本文是做slave,并非说jenkins,所以就直接带过, 记得按连接测试。
jenkins-k8s-02

3. 创建 Slave

3.1 点击 Pod Template detailes...

TIPS: 实用Dockerfile构建自己喜欢的,可以使用基于 jenkins/jnlp-slave
jenkins-k8s-03

3.2 挂载需要运行指令

jenkins-k8s-04

4. jenkins-slave 生命周期

4.1 创建流水线项目

  1. 限制项目的运行节点 (输入之前的标签:jenkins-slave)
  2. 执行Shell
echo "测试 Kubernetes 动态生成 jenkins slave"
echo "==============docker in docker==========="
sleep 30s;
docker info
echo "=============kubectl============="
kubectl get pods
  1. 终端查看
^C[root@k8s-master0 jenkins]# kubectl get pod -o wide -w -n devops
NAME                       READY   STATUS    RESTARTS   AGE    IP             NODE          NOMINATED NODE   READINESS GATES
jenkins-8678cbcf74-2gb77   1/1     Running   1          2d9h   172.22.0.94    k8s-worker0   <none>           <none>
jenkins-slave-ppctk        3/3     Running   0          11s    172.22.0.126   k8s-worker0   <none>           <none>
jenkins-slave-ppctk        3/3     Terminating   0          62s    172.22.0.126   k8s-worker0   <none>           <none>
jenkins-slave-ppctk        0/3     Terminating   0          93s    172.22.0.126   k8s-worker0   <none>           <none>
jenkins-slave-ppctk        0/3     Terminating   0          103s   172.22.0.126   k8s-worker0   <none>           <none>
jenkins-slave-ppctk        0/3     Terminating   0          103s   172.22.0.126   k8s-worker0   <none>           <none>

5. 额外提个醒

5.1 在部分实际操作中,都会在jenkins新建的工程下运行。

使用Pipeline例子:

pipeline {
  agent {
    node {
      label 'jenkins-slave'
    }
  }
  stages {
   stage('init') {
		steps{
			script{
				println "author: eddie.lee <xxxx@qq.com>"
				println "Blog: https://blog.eddilee.cn/"
			}
		}
	}
   stage('git pull') {
		steps{
            # git拉取代码操作
		}
	}
   stage('npm build') {
		steps{
			script{
			   container('nodejs') {
                   # 比如 vue的打包操作
			   }
			}
		}
	}
		stage('docker build'){
	    	steps{
                # 上传镜像备份操作
		    }	 
    }
		stage('kubernetes deployment'){
		    steps{
               # k8s创建pod操作
		    }
		}
     }
}

6. 服务提供

如需要学习的朋友,可以留言。提供有偿的指导

  1. k8s集群安装 (官方提供方式,有部分需要学习的小伙伴是不能科学上网。减轻弯路)
  2. 提供jenkins的数据存储机制,防止pod销毁后,数据不见的解决办法