k8s上搭建Jenkins以及动态创建代理

       需要在k8s集群上搭建Jenkins,并且Jenkins在k8s中动态创建代理。K8s集群搭建就不写了。本文就用上次文档搭建的单master集群来操作。

Jenkins官方提供了镜像:Docker Hub

       使用Deployment来部署这个镜像,会暴露两个端口:8080 Web访问端口,50000 Slave通信端口,容器启动后Jenkins数据存储在/var/jenkins_home目录,所以需要将该目录使用PV持久化存储。

     持久化存储就使用上次搭建的ceph集群,此处不详解了。

一、修改Jenkins  yaml 文件,并搭建Jenkins

apiVersion: apps/v1

kind: Deployment

metadata:

  name: jenkins

  labels:

    name: jenkins

spec:

  replicas: 1

  selector:

    matchLabels:

      name: jenkins

  template:

    metadata:

      name: jenkins

      labels:

        name: jenkins

    spec:

      terminationGracePeriodSeconds: 10

      serviceAccountName: jenkins

      containers:

        - name: jenkins

          image: jenkins/jenkins

          imagePullPolicy: Always

          ports:

            - containerPort: 8080

            - containerPort: 50000

          resources:

            limits:

              cpu: 2

              memory: 2Gi

            requests:

              cpu: 1

              memory: 1Gi

          env:

            - name: JAVA_OPTS

              value: -Xmx1g

          volumeMounts:

            - name: jenkins-home

              mountPath: /var/jenkins_home

      securityContext:

        fsGroup: 1000

        runAsUser: 0

      volumes:

        - name: jenkins-home

          persistentVolumeClaim:

            claimName: jenkins-home

---

apiVersion: v1

kind: PersistentVolumeClaim

metadata:

  name: jenkins-home

spec:

  storageClassName: rook-cephfs

  accessModes: ["ReadWriteOnce"]

  resources:

    requests:

      storage: 10Gi

---

apiVersion: v1

kind: Service

metadata:

  name: jenkins

spec:

  selector:

    name: jenkins

  type: NodePort

  ports:

    - name: http

      port: 80

      targetPort: 8080

      protocol: TCP

      nodePort: 30006

    - name: agent

      port: 50000

      protocol: TCP

---

apiVersion: v1

kind: ServiceAccount

metadata:

  name: jenkins



---

kind: Role

apiVersion: rbac.authorization.k8s.io/v1

metadata:

  name: jenkins

rules:

- apiGroups: [""]

  resources: ["pods","events"]

  verbs: ["create","delete","get","list","patch","update","watch"]

- apiGroups: [""]

  resources: ["pods/exec"]

  verbs: ["create","delete","get","list","patch","update","watch"]

- apiGroups: [""]

  resources: ["pods/log"]

  verbs: ["get","list","watch"]

- apiGroups: [""]

  resources: ["secrets","events"]

  verbs: ["get"]



---

apiVersion: rbac.authorization.k8s.io/v1

kind: RoleBinding

metadata:

  name: jenkins

roleRef:

  apiGroup: rbac.authorization.k8s.io

  kind: Role

  name: jenkins

subjects:

- kind: ServiceAccount

  name: jenkins

 k8s上搭建Jenkins以及动态创建代理_第1张图片

 上图画圈的部分可以根据自身情况更改

#执行yaml文件搭建Jenkins

kubectl apply -f jenkins.yml

执行成功后可以查看

k8s上搭建Jenkins以及动态创建代理_第2张图片  

二、登陆Jenkins

  1. 查看日志,获取初始密码

 pod名称按实际来写

kubectl logs -f jenkins-6bbd797dfd-jgd6b

 k8s上搭建Jenkins以及动态创建代理_第3张图片

 

2.访问页面

jenkins启动有点慢,需要等几分钟才能访问

http://NodeIP:svcPort

 

 k8s上搭建Jenkins以及动态创建代理_第4张图片

3.初始化安装

k8s上搭建Jenkins以及动态创建代理_第5张图片 

 

选择 选择插件安装  来最小安装

 k8s上搭建Jenkins以及动态创建代理_第6张图片

 

选择 无 先不安装插件

 k8s上搭建Jenkins以及动态创建代理_第7张图片

 

创建一个管理员用户  然后点 保存并完成

 k8s上搭建Jenkins以及动态创建代理_第8张图片

 k8s上搭建Jenkins以及动态创建代理_第9张图片

 

三、配置Jenkins,并下载所需的插件

  1. 更新Jenkins源地址

 找到cephfs挂载的目录,然后修改default.json

cephfs挂载的目录可以在ceph管理页面中查看

 k8s上搭建Jenkins以及动态创建代理_第10张图片

 

sed -i 's/http:\/\/updates.jenkins.io\/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

# 重建Pod生效(Pod名称改成你实际的)

 

 

2.安装所需的插件

本文安装git、Git Parameter、Pipeline、kubernetes、Config File Provider、Extended Choice Parameter等插件,个插件的作用如下:

• Git:拉取代码

• Git Parameter:Git参数化构建

• Pipeline:流水线

• kubernetes:连接Kubernetes动态创建Slave代理

• Config File Provider:存储配置文件

• Extended Choice Parameter:扩展选择框参数,支持多选

安装步骤:

管理Jenkins->系统配置-->管理插件-->分别搜索Git Parameter/Git/Pipeline/kubernetes/Config File Provider/Extended Choice Parameter

选中点击安装。

 k8s上搭建Jenkins以及动态创建代理_第11张图片

 k8s上搭建Jenkins以及动态创建代理_第12张图片

 安装完成点击重启就行

四、Jenkins 主从架构

 k8s上搭建Jenkins以及动态创建代理_第13张图片

 

当触发Jenkins任务时,Jenkins会调用Kubernetes API 创建Slave Pod,Pod启动后会连接Jenkins,接受任务并处理,任务处理完成后pod会销毁。

五、Jenkins配置slave

  1. 配置kubernetes插件

管理Jenkins->管理Nodes和云->管理云->添加Kubernetes

 k8s上搭建Jenkins以及动态创建代理_第14张图片

 k8s上搭建Jenkins以及动态创建代理_第15张图片

 k8s上搭建Jenkins以及动态创建代理_第16张图片

 k8s上搭建Jenkins以及动态创建代理_第17张图片

 k8s上搭建Jenkins以及动态创建代理_第18张图片

 上图画红线部分配置就行,其他的按需配置

2.制作jenkins slave镜像

vim Dockerfile


FROM centos:7

LABEL maintainer sudu

RUN yum install -y java-1.8.0-openjdk maven curl git libtool-ltdl-devel && \

yum clean all && \

rm -rf /var/cache/yum/* && \

mkdir -p /usr/share/jenkins

COPY agent.jar /usr/share/jenkins/agent.jar

COPY jenkins-agent /usr/bin/jenkins-agent

COPY settings.xml /etc/maven/settings.xml

RUN chmod +x /usr/bin/jenkins-agent

COPY helm kubectl /usr/bin/

ENTRYPOINT ["jenkins-agent"]

• Dockerfile:构建镜像

• jenkins-agent:shell脚本启动slave.jar,下载地址:https://github.com/jenkinsci/docker-inbound-agent

• settings.xml:maven配置文件。修改maven官方源为阿里云源

• slave.jar:agent程序,接受master下发的任务,下载地址:http://你的jenkins地址:端口/jnlpJars/agent.jar

• helm和kubectl客户端工具,最好跟集群中的版本一致

Helm下载地址:https://get.helm.sh/helm-v3.8.2-linux-amd64.tar.gz

Kubectl参考文档(最好用集群在用的):https://kubernetes.io/zh/docs/tasks/tools/install-kubectl-linux/

3.构建镜像并推送到harbor中

docker login 192.168.20.208

docker build -t 192.168.20.208/library/jenkins-slave-jdk:1.8 .

docker push 192.168.20.208/library/jenkins-slave-jdk:1.8

 k8s上搭建Jenkins以及动态创建代理_第19张图片

 

六、测试验证

在jenkins中创建测试项目验证Jenkins master/slave 架构。步骤如下:

新建项目->流水线->Pipeline脚本(可生成示例) 

 k8s上搭建Jenkins以及动态创建代理_第20张图片k8s上搭建Jenkins以及动态创建代理_第21张图片

 名字可以自定义

 k8s上搭建Jenkins以及动态创建代理_第22张图片

pipeline {

  agent {

    kubernetes {

      label "jenkins-slave"

      yaml '''

apiVersion: v1

kind: Pod

metadata:

  name: jenkins-slave

spec:

  containers:

  - name: jnlp

    image: "192.168.20.208/library/jenkins-slave-jdk:1.8"

'''

    }

  }

    stages {

      stage('Main'){

        steps {

          sh 'hostname'

          echo 'jenkins master/slave the architecture test is successful'

        }

      }

    }

}

 

 

 构建镜像

k8s上搭建Jenkins以及动态创建代理_第23张图片 

 

查看输出内容:

 k8s上搭建Jenkins以及动态创建代理_第24张图片

 k8s上搭建Jenkins以及动态创建代理_第25张图片

 k8s上搭建Jenkins以及动态创建代理_第26张图片

 

到此kubernetes上搭建jenkins 动态代理完成,实际环境中的使用后期更新

你可能感兴趣的:(kubernetes,微服务,devops,jenkins,自动化)