kubernetes 1.5安装 jenkins 带动态分配资源
阅读原文时间:2021年04月21日阅读:1

kubernetes 1.5安装 jenkins

配置kubernetes1.5 jenkins,自动创建节点,使用完后自动注销节点的配置方法。
最后包括NFS的配置。

1. 配置要求

   在kubernetes中运行jenkins,并自动创建节点完成编译任务。

2. 环境介绍

    k8s使用三台服务器配置
        192.168.7.206            centos-master
        192.168.7.207            centos-minion-1
        192.168.7.208            centos-minion-2
    kubernetes使用操作系统为: Centos 7

3. 配置过程

3.1  下载镜像

    下载最新的jenkins镜像,当前时间为2017年1月3日。

在每一台服务器上面都下载,下载完成后,再进行下一步,这也不是必须,有时候网络的问题,直接创建服务镜像会下载不下来。

    docker pull  index.tenxcloud.com/loulan/docker-jenkins:latest

3.2  创建服务

jenkins-deployment.yaml  文件内容

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: jenkins
spec:
  replicas: 1
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 2
      maxUnavailable: 0
  template:
    metadata:
      labels:
        app: jenkins
    spec:
      containers:
      - name: jenkins
        image: index.tenxcloud.com/loulan/docker-jenkins:latest
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080
          name: web
          protocol: TCP
        - containerPort: 50000
          name: agent
          protocol: TCP
        volumeMounts:
        - name: jenkinshome
          mountPath: /var/jenkins_home
        env:
        - name: JAVA_OPTS
          value: "-Duser.timezone=Asia/Shanghai"
      volumes:
      - name: jenkinshome
        nfs:
          server: 192.168.7.206
          path: "/opt/jenkins"

在文件jenkins-deployment.yaml 中,查看镜像地址是否是刚才下载的地址。

注意最后使用的是nfs,nfs服务的安装部署网上有很多的教程。我们在文章的最后会把nfs的配置写上。最好在jenkins部署之前就将nfs配置好。

执行创建命令:

kubectl create -f jenkins-deployment.yaml 

[root@centos-master jenkins]# kubectl create -f jenkins-deployment.yaml 
deployment "jenkins" created

检查:

kubectl get pod

NAME                                READY     STATUS              RESTARTS   AGE
jenkins-4182169461-jg8fc            1/1       Running             0          4m

查看日志:

kubectl logs jenkins-4182169461-jg8fc 



INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@5e74728b: defining beans [filter,legacy]; root of factory hierarchy
Jan 04, 2017 11:18:19 AM jenkins.install.SetupWizard init
INFO: 

*************************************************************
*************************************************************
*************************************************************

Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

819f56242a9140cfbdb8f9645ae00ecd

This may also be found at: /var/jenkins_home/secrets/initialAdminPassword

*************************************************************
*************************************************************
*************************************************************

Jan 04, 2017 11:18:25 AM hudson.model.UpdateSite updateData
INFO: Obtained the latest update center data file for UpdateSource default
Jan 04, 2017 11:18:25 AM hudson.WebAppMain$3 run
INFO: Jenkins is fully up and running
--> setting agent port for jnlp
--> setting agent port for jnlp... done

红色的部分在网页登录可用。

jenkins-service.yaml 文件内容

kind: Service
apiVersion: v1
metadata:
  labels:
      app: jenkins
  name: jenkins
spec:
  ports:
  - port: 8080
    targetPort: 8080
    name: web
  - port: 50000
    targetPort: 50000
    name: agent
  selector:
    app: jenkins

创建服务命令:

kubectl create -f jenkins-service.yaml 

[root@centos-master jenkins]# kubectl create -f jenkins-service.yaml 
service "jenkins" created

 kubectl get svc

[root@centos-master jenkins]# kubectl get svc
NAME                      CLUSTER-IP       EXTERNAL-IP   PORT(S)              AGE
jenkins                   10.108.27.146    <none>        8080/TCP,50000/TCP   7m

jenkins-ingress.yaml 文件内容

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: jenkins
spec:
  rules:
  - host: jenkins.xxx.lan
    http:
      paths:
      - path: /
        backend:
          serviceName: jenkins
          servicePort: 8080

创建ingress命令:

kubectl create -f jenkins-ingress.yaml 

[root@centos-master jenkins]# kubectl create -f jenkins-ingress.yaml 
ingress "jenkins" created

检查:

kubectl get ing 



[root@centos-master jenkins]# kubectl get ing 
NAME              HOSTS                   ADDRESS         PORTS     AGE
jenkins           jenkins.xxx.lan        192.168.7.207   80        6m

通过网页进去jenkins,安装插件Kubernetes plugin.

4. 配置节点

4.1 配置系统

如下图: Manage Jenkins

4.2 点击Configure System

4.3 增加Kubernetes配置

4.5  配置Kubernetes

Kubernetes URL 为:  https://kubernetes.default

这个应该是在kubernetes中解析的。

Jenkins URL 为: http://jenkins.default:8080

也应该是自动解析的。

image配置中:

Docker Image 配置为:  jenkinsci/jnlp-slave

这个是一个镜像,可以先下载到每个node中。其他的按照图片上随便填写。

这样,所有的配置基本完成。接下来就是测试。

测试如下图:

测试效果图:

NFS服务器配置

1. 服务安装

yum -y install nfs-utils rpcbind

2. 服务配置

vi /etc/exports  

/opt/jenkins    *(rw,no_root_squash,no_all_squash,sync)

3. 使用配置生效

exportfs -r

4. 一般的操作

systemctl restart nfs rpcbind 
systemctl enable nfs 
systemctl enable rpcbind

5. 节点操作

yum install nfs-utils -y

必须要在所有的节点安装nfs-utils。

问题解决:

1 .Jan  3 22:02:49 centos-minion-2 kubelet: Output: mount: wrong fs type, bad option, bad superblock on 192.168.7.206:/opt/jenkins,

yum install nfs-utils -y

缺少nfs相关的命令

2. [root@centos-master jenkins]# kubectl logs jenkins-1859637992-554k0
touch: cannot touch ‘/var/jenkins_home/copy_reference_file.log’: Permission denied
Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?

nfs 目录不可写。