11月8-9日,全球 Kubernetes 大会 KubeCon 在美国西雅图举办。KubeCon 是由 Linux Foundation/Cloud Native Computing Foundation 发起的 Kubernetes 最高盛会。
才云 CEO 张鑫受到官方邀请在 KubeCon2016 大会上发表了关于 Kubernetes 在中国企业落地的主题演讲并宣布开源Caicloud CI/CD 平台 Cyclone,专注解决微服务架构下面向容器的 CI/CD 和版本管理问题。
开源后,Cyclone 入选 GitHub “Trending in Open Source”,曾一度位居 Go 语言开源项目排行榜榜首。
关于 CI/CD 背景知识
持续集成(CI)是一种软件开发实践,即团队成员经常集成他们的工作,每次集成都需要通过自动化的构建,包括编译、发布、自动化测试来验证,从而尽早的发现集成错误。持续交付(CD)是指频繁地将软件新版本交付给质量团队(或者用户)以供评审。如果评审通过,那么就发布到生产环境。每当代码库里有一个变化,如果能自动且随时触发以上过程,那就达成了持续发布(CD)。
Docker 是一款基于 LXC 的容器引擎,自 2013 年开源以来,因为其易用性、高可移植性在开源社区非常火热。Docker 将软件与其依赖环境打包起来,以镜像方式交付,让软件运行在“标准环境”中,这非常符合云计算的要求。各大 IT 巨头纷纷跟进,基于 Docker 容器技术创业公司也如雨后春笋,Docker 创造了一个崭新的容器云行业。Docker 技术应用广泛。如,利用其隔离特性,为开发、测试提供一个轻量级独立沙盒环境进行集成测试。加速本地开发和构建流程,使其更加高效轻量化,开发人员可以构建、运行并分享容器,轻松提交到测试环境中,并最终进入生产环境。
Caicloud 的容器云
CI /CD 实践
Caicloud 作为国内领先的容器集群服务解决方案供应商,向用户提供企业级的 Claas、Containerizor、Cyclone、Cargo、Cubernetes、Clever 六大闭环服务。
Cyclone 作为其中重要一环,是基于 Docker 容器沙盒隔离特性实现的持续集成,将软件与其依赖环境打包起来,以镜像方式交付,让软件运行在“标准环境”中,原生支持多种容器云平台持续交付的工具。具有以下特性:
所有编译、构建、测试、发布过程均以容器为载体,消除环境差异性。通过版本控制工具触发流水线持续集成;
生成容器镜像并输出安全报告,确保构建的镜像安全可靠。全过程可视化,契合团队协作,提高研发效率;
管理组件支持微服务多组件联合发布,使用图形化界面展示组件的依赖关系及联合发布的过程和状态,应用拓扑关系图形化;
基于发布策略和角色控制功能,提供灵活的持续部署方式。基于容器和镜像的版本控制,提供多种升级回滚策略。
Cyclone 实现原理
CI/CD 工作流
Cyclone 提供了丰富的 API 供 web 应用调用,通过 API 建立版本控制系统中代码库与 Cyclone 服务关联关系后,版本控制系统的提交、发布等动作会通过 webhook 通知到 Cyclone-Server,启动一个基于 Docker in Docker 技术的 Cyclone-Worker 容器,在该容器中从代码库中拉取源码,按照源码中 caicloud.yml 配置文件,依次执行:
PreBuild:在指定编译环境中编译可执行文件;
Build:将可执行文件拷到运行环境容器中,打成镜像发布到镜像仓库中;
Integretion:使用 Build 阶段构建的镜像启动一个容器,启动持续集成所依赖的微服务容器进行集成测试;
PostBuild:启动一个容器执行一些脚本命令,实现镜像发布后的一些关联操作;
Deploy:使用发布的镜像部署应用到 Kubernetes 等容器集群 PaaS 平台。
构建过程日志可以通过 Websocket 从 Cyclone-Server 拉取;构建结束后 Cyclone-Server 将构建结果和完整构建日志通过邮件通知用户。
软件架构
Cyclone 软件架构如下图所示。每个立方体代表一个容器。
Cyclone-Server 中 Api-Server 组件提供 Restful API 服务,被调用后需要较长时间处理的任务生成一个待处理事件写入 etcd;
EventManager 加载 etcd 中未完成事件,监视事件变化,发送新增待处理事件到 WorkerManager 中;
WorkerManager 调用 Docker API 启一个 Cyclone-Worker 容器,通过环境变量传入需要处理的事件 ID 等信息;
Cyclone-Worker 使用事件 ID 作为 token(有效期 2 小时)调用 API,拉取事件信息依次启容器执行 integration、prebuild、build、post build,完成后反馈事件执行结果,构建过程日志推送到 Log-Server,转存到 Kafka;
Log-Server 组件从 Kafka 拉取日志推送给用户;需要持久化的数据存入 Mongo。
Cyclone 也可以多节点分布式部署,部署图如下所示。每一个立方体代表一个节点,使用 Haproxy 反向代理实现负载均衡和 SSL 数据加密,分发 API 请求到各 Cyclone 节点中。
Roadmap
Cyclone 由 Caicloud 工程师自主研发,并贡献给社区。Cyclone 现已实现基本功能发布早期版本 V0.1。我们计划在 2016 年 12 月底发布 V0.2 Kubernetes 版 Cyclone;2017 年第一季度发布 V0.3 提供 web 操作界面,后续还会开发用户权限管理,用户插件支持等功能。
本文转载自才云 Caicloud 公众号。
原文链接:https://mp.weixin.qq.com/s/qbib1dYV-vZcgt9bFdtqkA
评论