zl程序教程

您现在的位置是:首页 >  系统

当前栏目

Centos7 k8s v1.5.2二进制部署安装-交付jenkins到k8s集群

2023-09-14 09:01:13 时间

一、部署前准备

  1、下载jenkins

  首先下载jenkins镜像并上传到我们自己的私有仓库:24

docker pull jenkins/jenkins:2.190.3
docker tag 22b8b9a84dbe harbor.od.com/public/jenkins:v2.190.3
docker push harbor.od.com/public/jenkins:v2.190.3

  为了适应我们的环境,我们的jenkins不能直接使用,需要进行配置:

mkdir -p /data/dockerfile/jenkins/
cd /data/dockerfile/jenkins
vi Dockerfile

FROM harbor.od.com/public/jenkins:v2.190.3
#定义启动jenkins的用户
USER root
#修改时区 改成东八区
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\ 
    echo 'Asia/Shanghai' >/etc/timezone
#加载用户密钥,dubbo服务拉取代码使用的ssh
ADD id_rsa /root/.ssh/id_rsa
#加载宿主机的docker配置文件,登录远程仓库的认证信息加载到容器里面。
ADD config.json /root/.docker/config.json
#在jenkins容器内安装docker 客户端,jenkins要执行docker build,docker引擎用的是宿主机的docker引擎
ADD get-docker.sh /get-docker.sh
#跳过 ssh时候输入 yes 步骤,并执行安装docker
RUN echo "    StrictHostKeyChecking no" >> /etc/ssh/ssh_config &&\
    /get-docker.sh

  首先创建密钥:邮箱请根据自己的邮箱自行修改

ssh-keygen -t rsa -b 2048 -C "xxx@xx.xxx" -N "" -f /root/.ssh/id_rsa

  将私钥加载到jenkins,将公钥配置到git仓库中,否则不能拉取代码:

       

  接下来创建Dockerfile中需要的文件:

curl -fsSL get.docker.com -o get-docker.sh

  添加执行权限:

chmod u+x get-docker.sh
cp /root/.ssh/id_rsa ./
cp /root/.docker/config.json ./

  2、创建运维私有仓库,打开我们的harbor.od.com创建一个infra的私有仓库:

       

 

   3、然后build镜像

docker build . -t harbor.od.com/infra/jenkins:v2.190.3

  4、build完以后将镜像上传到我们的私有仓库:

docker push harbor.od.com/infra/jenkins:v2.190.3

  5、为jenkins创建名称空间

kubectl create ns infra

  

 

   创建一条secret,用于访问我们的私有仓库infra:

kubectl create secret docker-registry harbor --docker-server=harbor.od.com --docker-username=admin --docker-password=Harbor12345 -n infra

  解释一下上面的命令:创建一条secret,资源类型是docker-registry,名字是 harbor,docker-server=harbor.od.com ,docker-username=admin ,docker-password=Harbor12345 -n 指定私有仓库名称infra

二、安装部署nfs

  为了让jenkins中一些需要持久化的数据,能够存储,我们需要使用共享存储,然后进行挂载:这里使用最简单的NFS共享存储,因为k8s默认支持nfs模块

   1、在运维主机和所有的node节点安装

yum install nfs-utils -y

  2、启动服务

systemctl start nfs
systemctl enable nfs

  3、创建共享目录

mkdir -p /data/nfs-volume

vi /etc/exports
/data/nfs-volume 192.168.112.0/24(rw,no_root_squash)

more /etc/exports

  4、防火墙放开,我们这里是直接关闭了防火墙的

firewall-cmd --add-service=nfs --permanent --zone=public
firewall-cmd --add-service=mountd --permanent --zone=public
firewall-cmd --add-service=rpc-bind --permanent --zone=public
firewall-cmd --reload 重新载入配置,使其生效

  5、NFS客户端

systemctl start nfs

  6、检查

showmount -e 192.168.112.24

  7、创建挂在目录

mkdir -p /data/nfs-volume

  8、挂在目录

mount -t nfs 192.168.112.24:/data/nfs-volume /data/nfs-volume

  

  9、取消挂载,不用执行

umount 192.168.112.24:/data/nfs-volume

三、部署jenkins

  1、准备jenkins资源配置清单

cd /data/k8s-yaml/
mkdir jenkins
cd jenkins

  2、这里挂载了宿主机的docker.sock,使容器内的docker客户端可以直接与宿主机的docker引擎进行通信

  在使用私有仓库的时候,资源清单中,一定要声明:

imagePullSecrets:
- name: harbor

vi dp.yaml

kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: jenkins
  namespace: infra
  labels: 
    name: jenkins
spec:
  replicas: 1
  selector:
    matchLabels: 
      name: jenkins
  template:
    metadata:
      labels: 
        app: jenkins 
        name: jenkins
    spec:
      volumes:
      - name: data
        nfs: 
          server: operations
          path: /data/nfs-volume/jenkins_home
      - name: docker
        hostPath: 
          path: /run/docker.sock   
          type: ''
      containers:
      - name: jenkins
        image: harbor.od.com/infra/jenkins:v2.190.3
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080
          protocol: TCP
        env:
        - name: JAVA_OPTS
          value: -Xmx512m -Xms512m
        volumeMounts:
        - name: data
          mountPath: /var/jenkins_home
        - name: docker
          mountPath: /run/docker.sock
      imagePullSecrets:
      - name: harbor
      securityContext: 
        runAsUser: 0
  strategy:
    type: RollingUpdate
    rollingUpdate: 
      maxUnavailable: 1
      maxSurge: 1
  revisionHistoryLimit: 7
  progressDeadlineSeconds: 600

vim svc.yaml
kind: Service
apiVersion: v1
metadata: 
  name: jenkins
  namespace: infra
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
  selector:
    app: jenkins

vim ingress.yaml
kind: Ingress
apiVersion: extensions/v1beta1
metadata: 
  name: jenkins
  namespace: infra
spec:
  rules:
  - host: jenkins.od.com
    http:
      paths:
      - path: /
        backend: 
          serviceName: jenkins
          servicePort: 80

  3、应用资源配置清单:node节点

kubectl create -f http://k8s-yaml.od.com/jenkins/dp.yaml
kubectl create -f http://k8s-yaml.od.com/jenkins/svc.yaml
kubectl create -f http://k8s-yaml.od.com/jenkins/ingress.yaml

  查看我们创建的pod:这个启动时间还是挺长的,大概要几分钟时间

kubectl get pod -n infra

  

 

   检查jenkins需要持久化的数据是否保存下来了

  

 

   4、 添加解析:

vi /var/named/od.com.zone
jenkins            A    192.168.112.10

systemctl restart named

  5、浏览器访问:http://jenkins.od.com

  

  选择安装推荐的插件

  

  进入安装页面,静静等待,安装完成,创建一个管理员

  配置实例,jenkins路径为默认的,然后点击保存并完成。

       

  6、安全配置: