在 JFrog SwampUp 2017 用户大会上,Mesosphere 的持续交付团队成员 Elizabeth K Joseph 为大家带来了基于以容器为基础架构平台的持续交付流水线最佳实践,并介绍如何在 DC/OS 上简单快速的创建容器交付流水线。


DC/OS 介绍


Elizabeth 是 Mesosphere 的 DC/OS 技术布道师。DC/OS(Datacenter/Operating System) 是一个容器云管平台,DC/OC 在基础设施和具体应用之间创建了一个抽象层,将整个数据中心抽象成一台电脑操作系统,集中管理分布式负载以及简化运维操作,运维人员操作整个数据中心可以和操作一台电脑一样简单。DC/OS使得运维人员可以专注于快速有效的提供环境和计算资源,开发人员专注于具体业务的开发。


Mesosphere DC/OS 架构


DC/OS 基于 Apache Mesos 创建容器管理平台,向上提供计算资源、网络、存储的抽象管理,并支持多元化计算资源、物理机、虚拟机、甚至是cloud 计算资源。


Mesosphere – 企业级容器持续交付 Based on DC/OS_java


DC/OS 模块介绍


DC/OS Dashboard - 实时监控数据中心资源使用以及运行情况


运维人员通过集群中各个 Agent 收集集群节点的各项性能指标、资源使用情况以及应用运行情况,进行可视化报表展示,提供多维度集中展示,通过 Dashboard 运维人员可以快速了解数据中心资源使用情况,进而灵活分配资源以及集群扩容操作。


Mesosphere – 企业级容器持续交付 Based on DC/OS_java_02


DC/OS Service - 监控和管理数据中心现有服务和应用


DC/OS 同时也是一个 PaaS 平台,开发人员可以根据应用需要通过 Universe 模块快速安装基础公共服务或中间件,为应用提供底层支持,在 Service 模块中列出了平台所有基础服务以及应用,并展示对应资源占用情况,同时我们也可以根据应用负载情况动态地对服务进行横向扩展或提高资源配置来提高服务能力。


Mesosphere – 企业级容器持续交付 Based on DC/OS_java_03


DC/OS Universe - 应用程序仓库


Universe 仓库中的应用既可以是为 Mesos 开发的应用调度框架,也可以是任意标准的 Docker 容器镜像,它们都遵循 Marathon 的应用程序定义,可以直接部署到 DC/OS 中。目前 Universe 仓库中有近百种应用,还在持续不断的增加。如 HDFS、Kfaka、Jenkins、以及 Artifactory 等,我们可以在仓库中快速安装基础服务。


Mesosphere – 企业级容器持续交付 Based on DC/OS_java_04


同时我们可以通过 Universe 规范自定义一个应用或服务, 通过 Json 格式文件描述如何安装应用以及应用相关配置,包括应用需要的计算资源,CPU、内存、端口等,如下图:


Mesosphere – 企业级容器持续交付 Based on DC/OS_java_05


Mesosphere 容器化交付流水线


持续CI/CD流水线架构


Mesosphere – 企业级容器持续交付 Based on DC/OS_java_06


  1. Git Checkout 应用源代码。

  2. 基于包含业务站点内容的 Jekyll 基础镜像,构建 Docker App 镜像,并推送到 Artifactory 注册中心。

  3. 运行最新创建的 Docker 镜像并使用 LinkChecker 镜像进行集成测试,LinkChecker 是针对容器运行基础的集成测试,会检查所有的链接有效,例如无 404 类型的链接。

  4. 触发一个 Marathon Deployment 部署任务,将新创建的镜像发布到 DC/OS 容器管理平台。如果该应用已存在,则进行升级操作。

  5. 使用 Marathon Load Balancer 暴露发布到应用到 80 端口,对外提供服务。


流水线工具链


1.     GitHub

2.     Jenkins

3.     Artifactory

4.     Mysql

5.     Docker

6.     DC/OS(容器化管理平台)

 

其中 Jenkins,Artifactory 和 Mysql 都可以以 Service 的形式快速安装于 DC/OS上 ,另外 Jenkins 上安装 Mesos Plugin,Artifactory Plugin,Marathon Deployment Plugin。

 

  • Mesos Plugin : 允许 Jenkins 在 Mesos 集群上动态启动新的 Slave 节点,实现 Jenkins 集群自动扩容,并在使用完后自动销毁,让给其他服务,充分利用计算资源。

  • Artifactory Plugin:在 Jenkins Pipeline 中帮助我们将构建的镜像上传到 Artifactory 注册中心。

  • Marathon Deployment Plugin : 通过 API 将镜像发布到 DC/OS(Mesos 集群)上,对外提供服务。


流水线 Demo


Jenkins 上创建 Pipeline 类型项目,可以实现一键发布应用到生产环境,对外提供服务,大大提高应用交付速度以及稳定性。


Mesosphere – 企业级容器持续交付 Based on DC/OS_java_07


总结


DC/OS 将数据中心的资源管理抽象为一个操作系统,可以帮助运维人员像操作一台电脑一样管理整个数据中心,大大简化日常运维操作的复杂度,让软件开发体系中不同角色专注于各自的职责;Jenkins 的 Pipeline As Code(CD as Code),可以帮助我们使用代码描述一个流水线,帮助我们快速搭建软件交付流水线,快速将代码以及绑定的环境交付到生产环境;Artifactory 的 Docker Registry 提供高性能注册中心,提供高效稳定的镜像拉取推送,加速软件交付速度。