jenkins k8s 动态增减 jenkins-salve (1) 制作部署jenkins-master 镜像

本教程默认您已安装k8s

**

一、制作jenkins-master

**

1.拉取jenkins镜像

docker pull jenkinsci/jenkins:lts

2.运行jenkins镜像

docker run -tid -p 8080:8080 –name jenkins-master jenkinsci/jenkins:lts

3.访问 jenkins 127.0.0.1:8080

4.获取jenkins初始密钥

docker exec -ti jenkins-master cat /var/jenkins_home/secrets/initialAdminPassword

5.选择 Install suggested plugins

6.设置管理员用户名和密码

7.安装 Kubernetes plugin 插件
系统管理–>管理插件–>可选插件–>输入 Kubernetes plugin –>选择 Kubernetes plugin–>直接安装

8.获取 linux 系统的 kubectl 命令,并复制到 container 中,这里如果无法下载需要给链接加上双引号

curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.9.0/bin/linux/amd64/kubectl
docker cp kubectl jenkins-master:/usr/bin

9.进入到容器中安装 libltdl.so.7 库文件不然后边使用 docker-in-docker 方式会报错:error while loading shared libraries: libltdl.so.7: cannot open shared object file: No such file or directory

docker exec -ti jenkins-master
apt-get update
apt-get install  libltdl7
apt-get clean

10.将jenkins配置文件拷贝出来,如果使用 NFS 的方式持久化数据,需将此目录放置 NFS 并挂在到 k8s 中,此处 NFS 服务搭建不做过多陈述

docker cp jenkins-master:/var/jenkins_home .

11.打包含有 Kubernetes plugin 插件的 container

docker commit jenkins-master jenkins-k8s-master:1.0

也可使用如下 Dockerfile 直接安装 Kubernetes plugin 插件,但是对于不熟悉的插件名字和插件版本的同学不如上边的方法简单,而且这种方式不会自动安装依赖。

curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.9.0/bin/linux/amd64/kubectl
echo Kubernetes plugin:1.1.3 >> plugins.txt
echo Variant Plugin:1.1 >> plugins.txt
cat<< EOF >Dockerfile
FROM jenkins
COPY plugins.txt /usr/share/jenkins/plugins.txt
COPY kubectl /usr/bin/
RUN apt-get update && apt-get install libltdl7 && apt-get clean
RUN /usr/local/bin/plugins.sh /usr/share/jenkins/plugins.txt
EOF
docker build -t jenkins-k8s-master:1.0 .

二、部署jenkins-master

cat jenkins-deploy.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: jenkins
  namespace: ci
  labels:
    app: jenkins
spec:
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: jenkins
        tier: jenkins
    spec:
      containers:
      - image: jenkins-k8s-master:1.0 //这里换成你自己制作的镜像的名称
        name: jenkins
        securityContext:
          privileged: true
        ports:
        - name: jenkins
          containerPort: 8080
        - name: agent
          containerPort: 50000
          protocol: TCP
        volumeMounts:
        - name: docker
          mountPath: /var/run/docker.sock //这里使用docker in docker的方式,将 docker.sock 命令挂在到 image 中
        - name: jenkinshome
          mountPath: /var/jenkins_home
        - name: kube-config
          mountPath: /root/.kube
        - name: docker-binary
          mountPath: /usr/bin/docker //这里使用docker in docker的方式,将docker 命令挂在到 image 中
      volumes:
      - name: docker
        hostPath:
          path: /var/run/docker.sock
      - name: kube-config
        nfs:
          server: 10.10.14.216
          path: "/data/nfsshare/k8s/.kube" //这里将集群的 .kube 文件通过 nfs的方式挂载到容器中
      - name: docker-binary
        hostPath:
          path: /usr/bin/docker
      - name: jenkinshome
        nfs:
          server: 10.10.14.216
          path: "/data/nfsshare/k8s/jenkins/home" //这里将 jenkins 的工作目录挂在到NFS,实现持久化,如果不需要请删除

cat jenkins-service-ingress.yaml

apiVersion: v1
kind: Service
metadata:
  name: jenkins-web-ui
  namespace: ci
  labels:
    app: jenkins
spec:
  ports:
    - port: 8080
      targetPort: 8080
      name: web-ui
    - port: 50000
      targetPort: 50000
      name: agent
  selector:
    app: jenkins
    tier: jenkins
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: jenkins-web-ui
  namespace: ci
spec:
  rules:
  - host: jenkins.com
    http:
      paths:
      - backend:
          serviceName: jenkins-web-ui
          servicePort: 8080

部署jenkins-master

kubectl apply -f jenkins-deploy.yaml && kubectl apply -f jenkins-service-ingress.yaml

部署完成后可以在本地 hosts 文件中 加入 x.x.x.x jenkins.com解析
其中 x.x.x.x 为你集群中某一 ip 的地址

在本地浏览器输入 jenkins.com 登录 jenkins
jenkins k8s 动态增减 jenkins-salve (1) 制作部署jenkins-master 镜像_第1张图片

第二部分 http://blog.csdn.net/qq_34605594/article/details/79258596

你可能感兴趣的:(jenkins,kubernetes)