固定链接 使用 Kubernetes 和滴滴云 Docker 仓库构建 CI/CD 流水线

使用 Kubernetes 和滴滴云 Docker 仓库构建 CI/CD 流水线

使用 Kubernetes 和滴滴云 Docker 仓库构建 CI/CD 流水线

写在前面:《Kubernetes Tutorials》 系列文章旨在帮助您从入门到高阶逐步了解并掌握kubernetes技术栈的实操、理论和最佳实践。主题将包括 Docker 基础与实操Kubernetes 基础与实操基于 Kubernetes 的应用部署(工作负载版与集群版)基于 Kubernetes 的 CI/CDKubernetes 集群与应用监控Kubernetes 运维与最佳生产实践等,主题可能会比较随机,待全系列完成后再系统整理,尽情期待~ 天才都会三个神操作 Watching & Star & Fork

介绍

本文主要讲述使用 Rancher 构建好 Kubernetes 集群后,如何在 Kebernetes 集群中快速构全自动的 CI/CD 流水, 包括自动签出代码、执行代码、构建 Docker 镜像、将 Docker 镜像发布到仓库、从 Docker 仓库拉取镜像并部署到集群等。

为完成构建流水线本文还会用到以下组件:

  • Jenkins:管道的构建引擎。
  • Docker Registry:开箱即用,构建发布步骤的默认目标是内部 Docker 仓库。但是,您可以进行配置以推送到远程仓库。内部 Docker Registry 只能从群集节点访问,用户无法直接访问。镜像不会在管道的生命周期之后持久存在,并且只应在管道运行中使用。如果您需要在管道运行之外访问您的镜像,请推送到外部仓库。
  • Minio:Minio 存储用于存储管道执行的日志。

托管的 Jenkins 实例无状态地工作,因此不要担心其数据持久性。默认情况下,Docker Registry 和 Minio 实例使用临时卷,这对大多数用例来说都很好。如果要确保管道日志可以在节点故障中继续存在,则可以为它们配置持久卷。

目标

使用 Kubernetes 容器集群构建 CI/CD 自动流水线,包括自动签出代码、执行代码、构建镜像、发布到仓库、将应用部署到集群等。

本文中容器集群包含以下资源:

  • 1 个 Rancher Server 节点:用于部署 Rancher Server,通过该节点可以实现可视化多集群、跨云管理 Kubernetes 集群
  • 2 个 Etcd 节点:存储主控制节点和工作节点之间的任务调度等数据信息
  • 2 个控制 ( Controller ) 节点:部署 Kunbernetes 集群主控制节点,用于管理和监控 Kubernetes 其它的工作节点和存在状态信息。
  • 2 个工作 ( Worker ) 节点:部署 Kubernetes 集群的工作节点,用于运行容器化的应用。

注意:Etcd、Controller 和 Worker 节点均选择至少两台是为了模拟高可用控制节点和工作节点。配置推荐至少 2 核 CPU、4GB 内存、40GB 存储、2M 带宽,系统均为 Ubuntu 16.04 LTS。为达到更好的效果,本文创建的 5 台云服务器配置均为 4 核 CPU、8GB 内存、200GB 存储、5M 带宽,系统选择 Ubuntu 16.04 LTS。

为完成 CI/CD 流水间自动构建与部署的操作,您还需要一个示例代码库和用于存放 Docker 镜像的仓库:

  • 本文提供了简单的基于 Go 语言的示例代码库,您可以直接 Fork 使用: CI/CD 示例代码
  • 本文的 Docker 镜像仓库使用的是滴滴云的镜像仓库,相关地址如下: 滴滴云容器镜像服务

您也可以使用 Docker 官方仓库Quay 或自建的私有仓库,

第一步:搭建 Kubernetes 集群

开始之前请确保已按上述目标中的资源要求准备好了服务器资源,可以是物理机、虚拟机或云主机,本文所有资源均为云主机。

关于如何准备 Docker 环境并搭建 Kubernetes 集群,请参考 使用 Rancher 创建 Kubernetes 集群并进行多集群可视化管理 ,本文将不再赘述。

完成此步骤后本文后续步骤将默认您已经配置好一个 Kubernetes 集群,含 2 个 Etcd 节点、2 个控制 ( Controller ) 节点、2 个工作 ( Worker ) 节点。

第二步:设置代码源

1.创建项目

选择你的集群,然后在顶部菜单中选择 「Projects/Namespaces」 ,输入 「Project Name」 ,其他默认,点击 「Create」 即可创建集群下的项目,如下图:

2.设置代码源

  1. 选择上一步创建的项目,顶部主菜单选择 「Workloads」,然后选择tab栏中的 「Pipelines」,点击 「Configure Repositories」,如下图:

  1. 「Repositories」页面中可以看到 Rancher 官方提供了三个示例代码,为了完整演示配置 CI/CD 流程,我们不用此处的示例代码,直接点击下方按钮 「Authorize & Fetch Your Own Repositories」,如下图:

  1. 页面会跳转到选择源代码平台的页面,如下图。此处我们选择 「Github」 平台 ( GitLab 与 Bitbucket 步骤类似)。此处注意要记录下 “Homepage URL”“Authorization callback URL”,以备 GitHub 中应用授权使用。点击下方 「click here」 链接新开一个页面跳转至 GitHub 应用授权页面:

  1. 在 GitHub 平台的 「OAuth Apps」 页面中点击 「Register a new application」,如下图:

  1. 「Register a new application」 自定义一个应用名称到 “Application name” ,在“Homepage URL”“Authorization callback URL” 中填入 “3)” 对应的地址即可,点击 「Register application」

  1. 记录 GitHub 生成 “Client ID”“Client Secret” ,如下图:

  1. 回到 Rancher 设置「Pipelines」页面中填入 GitHub 生成的 “Client ID”“Client Secret” ,点击 「Authenticate」 进入授权页面:

  1. 点击绿色按钮授权:

  1. 输入 GitHub 密码完成授权:

  1. 页面自动回到 「Repositories」,此时会自动拉取您在 GitHub 上授权项目下所有的代码源,如图:

  1. 找到 “rancher-pipeline-example-go.git”,点击 「Enable」 激活代码源授权:

  1. 点击底部 「Done」 完成代码源授权:

  1. 「Pipelines」 列表中会自动生成一个构建流水线,如图:

第三步:设置 Docker 仓库

  1. 登陆滴滴云控制台,顶部导航依次选择 「计算」「容器镜像服务」,可以看到 「我的仓库」,点击 「创建仓库」

  1. 填写命名空间和仓库名称:

  1. 设置仓库访问密码,此密码用于从 Docker 客户端登陆。在本文实操案例中会用于自动构建流水线将构建好的 Docker 镜像上传至滴滴云 Docker 镜像仓库中:

  1. 回到集群页面,选择我们前面创建的项目,此案例中为 「cicd-demo」,选择顶导 「Resources」 -> 「Registries」

  1. 进入仓库授权列表页,点击 「Add Registry」

  1. 仓库授权列表页面点击 「Add Registry」,自定义填写仓库授权名称, 「Address」 选择 「Custom」,填写滴滴云仓库访问地址,格式为 hub.didiyun.com/ 命名空间, 此处 “命名空间” 为步骤 “2)” 中填写的命名空间名称。填写用户名和密码,此处用户名和密码为步骤 “3)”中设置的用户名和密码:

  1. 设置完成后将自动返回列表页,我们会看到列表页多出一行仓库信息:

  1. 回到 「Pipelines」 页面继续构建流水线:

第四步:创建并定义流水线

  1. 在前面构建的 Pipeline下拉操作中选择 「Edit Config」 ,进行进入 Pipeline 编辑页:

  1. 「Edit Pipeline Configuration」 中可以看到已经创建好了四个步骤,分别是:
    • 从仓库获取代码
    • 运行编译/构建代码(可选,此案例为必须项)
    • 构建镜像并发布到私有仓库中
    • 从仓库中拉取镜像并部署到集群中
    • 下面分别展示各步骤细节:
      • 选择 Pipeline 步骤类型、代码版本和编译脚本:
      • 选择构建与发布镜像选项,设置 Dockerfile 路径、镜像名称,勾选 「Push image to remote repository」 ,下拉列表中选择前面设置好的滴滴云仓库地址:
      • 选择部署 YAML 类型,并设置部署配置文件的路径:
  2. 设置构建提醒方式:

  1. 设置流水线自动构建方式:

本文为了让读者尽快成功体验自定义流水线的全流程,将案例代码、构建镜像的 Dockerfile、用于部署的 deployment.yaml 都已经写好。您可以尝试根据自己的项目/代码编写合适的 Dockerfile、deployment.yaml 和 Pipeline 流程。

第五步:手动构建

  1. 「Pipelines」 列表中选择前面设置的构建流水线,点击右边下拉选项中的 「Run」

  1. 选择构建分支:

  1. 查看构建进度与详情:

  1. 构建成功&构建日志:

  1. 第一次构建会比较慢,后端会自动部署构建 Pipeline 所必须的 Jenkins 引擎、Docker Registry 和 Minio,如下图:

后续您的代码源有代码更新或版本更新时,Pipeline将根据您设置的自动构建策略自动发布新版本到集群应用中。

  1. 进入滴滴云控制台可以看到,每自动构建一次,镜像版本也会同时发布一次到 Docker 镜像仓库中:

结论

基于 Kubernetes 集群可以非常便利的完成代码拉取、代码编译/构建、Docker 镜像构建、Docker 镜像分发(发布到私有或公有镜像仓库)、应用部署(从仓库拉取镜像并在集群部署应用),且可以根据您设置的自动构建策略完成自动化流程,参考本文步骤您可以同时构建多条 Pipeline 同时自动化构建您的应用程序,而无需关心细节。

CI/CD 相关概念

  • 持续集成 ( Continuous Integration, CI ) : 代码合并,构建,部署,测试都在一起,不断地执行这个过程,并对结果反馈。
  • 持续部署 ( Continuous Deployment, CD ) : 部署到测试环境、预生产环境、生成环境。 
  • 持续部署 ( Continuous Delivery, CD ) : 将最终产品发布到生成环境、给用户使用。

写在后面:据说完成应用发布只完成了整个产品或服务的一半甚至更少,后面将会有漫长的监控、运维与迭代过程,后续即将推出一系列监控与运维实践,此处先占坑并预留链接地址: ** 《多 Kubernetes 集群和多租户环境中 Prometheus 搭建和使用监控指南》**

  • 基于 Prometheus 的 Kubernetes 集群治标监控

  • 基于 Prometheus 的 Kubernetes 节点指标监控

  • 基于 Grafana 的 Kubernetes 集群

尽情期待哦:)

您的留言将激励我们越做越好

用户评论(1)

  1. 189*****932

    6啊