zoukankan      html  css  js  c++  java
  • 第五章 九析带你玩转 rancher

    本系列文章:

     

    第一章:九析带你玩转 rancher - 安装篇

    第二章:九析带你玩转 rancher - 导入集群篇

    第三章:九析带你玩转 rancher - 集成 gitlab

    第四章:九析带你玩转 rancher - 集成 harbor

    第五章:九析带你玩转 rancher - 流水线发布

    目录

    1 前言

    2 设置流水线

        2.1 关联代码库

            2.1.1 指定项目空间

            2.1.2 设置代码库

        2.2 关联镜像库

        2.3 全局流水线设置

        2.4 项目空间流水线设置

    3 执行流水线

    4 流水线成功执行


    1 前言

            本文是在上章《九析带你玩转 rancher - 集成 gitlab》的基础上进行配置的,所以在发布 rancher 流水线前,需确保 rancher 和 gitlab 已经关联。

    流水线是 DevOps 的实现,它提供非常友好的界面 UI,使开发人员仅仅通过鼠标,就可以完成整个微服务的发布上线。在 rancher 中,一个微服务就对应一条流水线。


    2 设置流水线

            设置流水线需同时设置全局流水线和项目流水线。全局流水线的设置会影响到项目流水线。

    2.1 关联代码库

    2.1.1 指定项目空间

            本文 default 项目空间下配置流水线:

    clipboard.png

            在 default 项目空间下,选择“资源” -> “流水线” 菜单:

    clipboard2.png

    2.1.2 设置代码库

            选择“设置代码库”按钮:

    clipboard3.png

            选择“刷新代码库”按钮:

    clipboard4.png

            由于 gitlab 已经跟 rancher 关联,故刷新代码库之后,就会显示你在 gitlab 中的服务代码:

    clipboard5.png

            启用服务:

    clipboard6.png

            点击完成:

    clipboard7.png

    2.2 关联镜像库

            本文在 default 空间下关联镜像库:

    clipboard8.png

            添加凭证:

    clipboard9.png

            填写相关信息:

    clipboard10.png

    2.3 全局流水线设置

            选择指定集群(zcy-arch-k8s),再选择“工具”,最后选择“流水线”:

    clipboard11.png

            修改内容如下:

    clipboard12.png

            全局流水线会控制项目流水线的并发个数、资源占比情况等。

    2.4 项目空间流水线设置

            项目空间流水线需同时选中“集群”(zcy-arch-k8s)和“项目空间”(default):

    clipboard13.png

            选择 “编辑配置” 子菜单:

    clipboard14.png         点击 “设置流水线” 链接后的图示如下:

    clipboard15.png        可根据各自需求添加流水线“阶段”,一般情况下,整个流水线跑四个阶段就足够了,即:

    1 clone 阶段:这是系统默认的必须阶段,指从代码库下载微服务的源代码。

    2 build 阶段:编译源代码,并生成 Dockerfile 文件

    3 publish 阶段:根据上阶段的 Dockerfile 文件生成镜像,然后将镜像上传到指定镜像仓库

    4 deploy 阶段:从镜像仓库下载上阶段生成的服务镜像,然后启动容器运行

            下面以 java 语言为例,在服务(这里是: chapter-001-helloworld)代码库创建 rancher 总流水线文件 .rancher-pipeline.yml,如下图所示:

    clipboard16.png

            文件定义了流水线 3 个阶段,文件内容如下:

    stages:

    - name: Build

     steps:

     - runScriptConfig:

         image: jiuxi.harbor.org/stable/maven-3.6.0-jdk-8

         shellScript: mvn -B -U -DskipTests clean package spring-boot:repackage

    - name: Publish

     steps:

     - publishImageConfig:

         dockerfilePath: ./Dockerfile

         buildContext: .

         tag: stable/${CICD_GIT_REPO_NAME}:${CICD_GIT_COMMIT}

         pushRemote: true

         registry: jiuxi.harbor.org

       env:

         PLUGIN_DEBUG: "true"

         PLUGIN_INSECURE: "true"

    - name: Deploy

     steps:

     - applyYamlConfig:

         path: ./Deployment.yaml

    notification: {}

            Publish 阶段是把 Build 阶段生成的 jar 文件,根据预先定义的 Dockerfile 文件做成服务镜像,并推送到私有镜像仓库中,其中自定义 Dockerfile 文件定义如下:

    FROM jiuxi.harbor.org/stable/java:8

    MAINTAINER "jiuxi"<1494445739@qq.com>

    ADD ./target/application.jar application.jar

    EXPOSE 8080

    CMD ["/bin/sh", "-c", "java -jar application.jar"]

            Deploy 阶段是在 k8s 中执行自定义部署文件 Deployment.yaml,创建服务的 service 和 deployment 资源,并运行容器,自定义 Deployment.yaml 文件内容如下:

    apiVersion: v1

    kind: Service

    metadata:

     name: ${CICD_GIT_REPO_NAME}

     labels:

       app: ${CICD_GIT_REPO_NAME}

    spec:

     type: ClusterIP

     selector:

       app: ${CICD_GIT_REPO_NAME}

     ports:

     - port: 8080

       targetPort: 8080

    ---

    apiVersion: apps/v1

    kind: Deployment

    metadata:

     name: ${CICD_GIT_REPO_NAME}

    spec:

     replicas: 1

     selector:

       matchLabels:

         app: ${CICD_GIT_REPO_NAME}

     minReadySeconds: 5

     strategy:

       type: RollingUpdate

     template:

       metadata:

         labels:

           app: ${CICD_GIT_REPO_NAME}

       spec:

         containers:

         - name: ${CICD_GIT_REPO_NAME}

           image: jiuxi.harbor.org/stable/${CICD_GIT_REPO_NAME}:${CICD_GIT_COMMIT}

           livenessProbe:

             tcpSocket:

               port: 8080

           imagePullPolicy: Always

           env:

           - name: TZ

             value: "Asia/Shanghai"

           - name: MY_POD_IP

             valueFrom:

               fieldRef:

                 fieldPath: status.podIP

           - name: jiuxi_logs_${CICD_GIT_REPO_NAME}-stdout

             value: "stdout"

           - name: jiuxi_logs_${CICD_GIT_REPO_NAME}-logs

             value: "/data/logs/${CICD_GIT_REPO_NAME}/*.log"

           volumeMounts:

           - name: logs

             mountPath: /data/logs/${CICD_GIT_REPO_NAME}

           - name: time

             mountPath: /etc/localtime

           resources:

             limits:

               memory: 1Gi

         volumes:

         - name: time

           hostPath:

             path: /etc/localtime

         - name: logs

           emptyDir: {}

         restartPolicy: Always

            提交 .rancher-pipeline.yaml、Deployment.yaml、Dockerfile 文件到 gitlab。然后在 rancher 中重新点击“设置代码库”:

    clipboard17.png

          “刷新代码库”,点击“完成”:

    clipboard18.png

            再点击“编辑配置”:

    clipboard19.png

            流水线已经自动配置好:

    clipboard20.png

            确定一下 Publish 阶段的镜像仓库地址是否正确:

    clipboard21.png

            点击“完成”按钮:

    clipboard22.png

            点击确认,整个流水线的配置已经完成。


    3 执行流水线

            选择“运行”菜单来执行流水线:

    clipboard23.png

            选择指定代码分支,我这里是“master”:

    clipboard24.png

            点击“运行”:clipboard25.png

            流水线开始执行,首次启动流水线时,需下载 jenkins、minio、docker-registry 等镜像,因此需要一定时间。如果执行报如下错:clipboard26.png

            说明 pipeline 运行容器并不识别自定义域名,你需要重启流水线。clipboard27.png

    spacer.gif        启动后,jenkins 会动态生成 pipeline 容器,此时你需要趁着 pipeline 容器生成瞬间进入它的控制台(所以你最好同时打开 2 个 rancher 页面,一个是流水线执行页面,如上图;另外一个是 default 项目空间页面,如下图):clipboard28.png

    spacer.gif        要注意,jenkins 在生成 pipeline 容器的时候,页面会自动刷新(所以你不用手动刷新页面);其次,你要确保流水线前面的状态是 Running 时,操作后面的“更多”按钮才可以显示“执行命令行”菜单:clipboard29.png

    spacer.gif        在弹出的“执行命令行”界面输入下面命令修改 /etc/hosts 文件:

    echo "10.110.101.100 jiuxi.gitlab.com jiuxi.harbor.org jiuxi.nexus.org" >> /etc/hosts


    4 流水线成功执行clipboard30.png

    spacer.gif         在 default 项目空间下查看服务:clipboard31.png

    spacer.gif        发现 chapter-001-helloworld 已经成功运行:clipboard32.png

    spacer.gif        点击进入 chapter-001-helloworld 查看 pod 日志:clipboard33.png

    spacer.gif        发现服务已经正常运行:clipboard34.png

    spacer.gif        自此,轻松完爆 rancher 流水线发布

  • 相关阅读:
    一个编程的代码网址
    FireFox竟然成功抢注ie7.com域名
    呀!天空软件真的被百度收购了
    呀!天空软件真的被百度收购了
    一个编程的代码网址
    不只MSN会被监听,QQ也一样的
    FireFox竟然成功抢注ie7.com域名
    MS06014网马的一种变形方法
    小马ASP
    Etoile-又一个桌面气象
  • 原文地址:https://www.cnblogs.com/ExMan/p/13714593.html
Copyright © 2011-2022 走看看