zoukankan      html  css  js  c++  java
  • Centos7 k8s v1.5.2二进制部署安装-交付jenkins到k8s集群

    一、部署前准备

      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、安全配置:

      

  • 相关阅读:
    【SHOI2002】百事世界杯之旅
    【LGOJ 3384】树链剖分
    [20191006机房测试] 括号序列
    [20191006机房测试] 矿石
    【SHOI2012】回家的路
    [20191005机房测试] Seat
    [20191005机房测试] Silhouette
    每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0...m-1报数....这样
    fgets函数读取最后一行的时候为什么会重复
    c语言中返回的变量地址,其物理地址在?(刨根问底)
  • 原文地址:https://www.cnblogs.com/aqicheng/p/14447251.html
Copyright © 2011-2022 走看看