zoukankan      html  css  js  c++  java
  • 在 kubernetes 集群内安装 jenkins

    在 kubernetes 集群内安装 jenkins

    准备 jenkins 镜像

    到官网上查看当前 jenkins 的版本是什么,这里目前使用的是2.249.1,然后拉去到本地推送到本地仓库

    # docker pull jenkins/jenkins:2.249.1
    # docker tag jenkins/jenkins:2.249.1 harbor.zsf.com/public/jenkins:2.249.1
    # docker push harbor.zsf.com/public/jenkins:2.249.1
    

    改造 jenkins 官方镜像

    jenkins 的官方镜像对于我们并不能直接使用,我们来对此进行改造

    FROM harbor.zsf.com/public/jenkins:2.249.1
    MAINTAINER zhangshoufu wx: y18163201
    USER root
    RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && 
    		echo "Asia/Shanghai" > /etc/timezone
    		
    COPY id_rsa /root/.ssh/id_rsa
    COPY config.json /root/.docker/config.json
    COPY get-docker.sh /get-docker.sh
    RUN echo "StrictHostKeyCheck no" >> /etc/ssh/ssh_config && 
    		/get-docker.sh
    

    解释 Dockerfile

    1,导入我们刚才从 docker hub 拉去的 jenkins 基础镜像

    2,声明了 Dockerfile 的作者

    3,更改 容器启动时候使用的用户,我们这里面使用 root用户,因为我们要执行 Docker 打包操作

    4,更改 jenkins 容器内的时区为上海,

    7,在宿主机上生成一个 SSH 秘钥对,把私钥拷贝到 jenkins 里面,因为我们要通过 SSH 的方式去 gitlab上拖取代码

    8,因为我们要登录私有的 docker 仓库,所以我们把 docker 的登录仓库的 json 文件拷贝进去,在宿主机上/root/.docker/config.json,可以拷贝到当前路径,config.json 里面放的就是登录信息

    9,我们需要在 jenkins 里面安装 docker客户端,使其能执行 docker 打包操作。此脚本通过curl -fsSL https://get.docker.com -o get-docker.sh 获得

    10,取消 ssh 登录的时候秘钥验证,就是第一次登录机器的时候 接收秘钥 yes 的动作,并安装 docker 客户端,

    创建 SSH 秘钥,准备 config.json文件

    # ssh-keygen -t rsa -b 2048 -C "zsf18163201@qq.com" -N "" -f ./id_rsa
    # cp /root/.docker/config.json ./
    # curl -fsSL https://get.docker.com -o get-docker.sh
    # chmod +x get-docker.sh
    # tree .
    .
    ├── config.json
    ├── Dockerfile
    ├── get-docker.sh
    ├── id_rsa
    └── id_rsa.pub
    

    打包 Docker images

    # docker build -f Dockerfile  . -t harbor.zsf.com/infra/jenkins:2.249.1
    # docker push harbor.zsf.com/infra/jenkins:2.249.1
    

    需要注意的一点是 infra 是我们的私有仓库

    k8s 中部署 jenkins

    创建 namespaces

    # kubectl create namespace infra
    namespace/infra created
    

    创建登录docker 私有仓库的凭证

    创建一个 docker-registry 的 secret 资源

    # kubectl create secret docker-registry harbor --docker-server=harbor.zsf.com --docker-username=admin --docker-password='Flzx3000c@' -n infra
    secret/harbor created
    

    创建的secret 类型为 docker-registry 的秘钥。

    查看 secret 证书的 yaml 文件

    # kubectl get secret -n infra harbor -o yaml
    apiVersion: v1
    data:
      .dockerconfigjson: eyJhdXRocyI6eyJoYXJib3Iub2QuY29tIjp7InVzZXJuYW1lIjoiYWRtaW4iLCJwYXNzd29yZCI6IkZsengzMDAwY0AiLCJhdXRoIjoiWVdSdGFXNDZSbXg2ZURNd01EQmpRQT09In19fQ==
    kind: Secret
    metadata:
      creationTimestamp: "2020-09-24T06:45:34Z"
      name: harbor
      namespace: infra
      resourceVersion: "5671330"
      selfLink: /api/v1/namespaces/infra/secrets/harbor
      uid: 04f553fb-a0db-4e6d-844b-57bbcd898710
    type: kubernetes.io/dockerconfigjson
    

    其中.dockerconfigjson字段的值是 Docker 凭据的 base64 表示。要想查看dockerconfigjson字段中的内容,请将 Secret 数据转换为可读格式:

    # kubectl get secret -n infra harbor --output="jsonpath={.data..dockerconfigjson}" | base64 --decode
    {"auths":{"harbor.od.com":{"username":"admin","password":"Flzx3000c@","auth":"YWRtaW46Rmx6eDMwMDBjQA=="}}}
    

    要想查看 auth 字段的信息,请使用下面命令:

    # echo "XXXXXX" |base64 --decode
    

    创建 nfs 共享存储

    我们在 192.168.4.73 机器上安装,

    # yum -y install nfs-utils rpcbind
    # cat /etc/exports
    /home/kubernetes-volume/jenkins-data 192.168.4.0/24(rw)
    # systemctl enable rpcbind && systemctl start rpcbind
    # systemctl enable nfs && systemctl start rpcbind
    

    然后每个节点上面需要安装nfs-utils,这里不再赘述

    创建jenkins 的 yaml 文件

    创建 jenkins-deployment 文件

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: jenkins
      namespace: infra
      labels:
        app: jenkins
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: jenkins
      template:
        metadata:
          labels:
            app: jenkins
        spec:
          imagePullSecrets:
          - name: harbor
          containers:
          - name: jenkins
            image: harbor.zsf.com/infra/jenkins:2.249.1
            imagePullPolicy: IfNotPresent
            ports:
            - name: jenkins-8080
              containerPort: 8080
              protocol: TCP
            env:
            - name: JAVA_OPTS
              value: -Xmx1g -Xms1g  
            volumeMounts:
            - name: jenkins-data
              mountPath: /var/jenkins_home
            - name: docker-sock
              mountPath: /var/run/docker.sock
            - name: time
              mountPath: /etc/localtime
            resources:
              limits:
                memory: 1.5Gi
              requests:
                memory: 1.5Gi
          volumes:
          - name: jenkins-data
            nfs:
              server: jx4-73
              path: /home/kubernetes-volume/jenkins-data
          - name: docker-sock
            hostPath:
              path: /var/run/docker.sock
              type: Socket
          - name: time
            hostPath:
              path: /etc/localtime
              type: File
      strategy:
        type: RollingUpdate
        rollingUpdate:
          maxSurge: 1
          maxUnavailable: 1
      revisionHistoryLimit: 5
      progressDeadlineSeconds: 600
    

    创建 service ingress 文件

    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: loki
      name: loki
      namespace: monitoring
    spec:
      ports:
      - name: loki-3100
        port: 3100
        targetPort: loki-3100
      selector:
        app: loki
    
    ---
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: loki
      namespace: monitoring
    spec:
      rules:
      - host: loki.zsf.com
        http:
          paths:
          - path: /
            backend:
              serviceName: loki
              servicePort: 3100
    

    然后在 DNS 服务器上面配置域名

    到我们的 DNS 服务器上条件一个jenkins.zsf.com的域名解析。然后我们访问 jenkins

    访问配置 Jenkins

    我们通过web 界面登录 jenkins,然后安装插件。

    设置匿名用户访问 jenkins,但是不能配置

    jenkins-->Manage Jenkins-->Security-->configure global security-->Authorization

    image-20200924225709591

    安装插件,更换插件源

    我们采用默认的jenkins 站点去安装插件的时候,因为墙的原因我们安装插件很困难,所以我们第一步先替换一下升级所使用的站点

    系统管理 --> 管理插件 --> 高级 --> 升级站点

    image-20200615155457469

    替换成地址http://mirrors.jenkins-ci.org/status.html 然后提交再去安装插件

    安装语言插件 [Locale plugin](

  • 相关阅读:
    java实现文件变化监控
    java实现串口通讯
    Linux From Scratch(从零开始构建Linux系统,简称LFS)(三)
    Linux From Scratch(从零开始构建Linux系统,简称LFS)(二)
    Linux From Scratch(从零开始构建Linux系统,简称LFS)(一)
    OAuth 2.0
    DDD学习专题
    Java未来也许不再是电商的首选开发语言
    Axon
    CQRS模式介绍
  • 原文地址:https://www.cnblogs.com/shoufu/p/14484608.html
Copyright © 2011-2022 走看看