Spinnaker 的介绍
Spinnaker 是 Netflix 开源出来的持续交付工具,目的是为研发团队提供灵活的持续交付流水线,并且支持部署到测试/生产环境。Netflix 目前通过 Spinnaker 实现每天4000次的发布。它的优势在于:
查看 Spinnaker 的源码:https://github.com/spinnaker 可以发现,Spinnaker 的实现本身也是微服务架构,这样就意味着 Spinnaker 本身可以轻松的实现扩容和滚动升级。Spinnaker 的微服务数量也达到10个左右,目前比较核心的模块有以下几个:
注:Netflix 的流程里大部分是没有人工决策点的。
集群管理:
Spinnaker 的集群管理组件能够管理以下资源:服务器组, 集群,应用,负载均衡,安全组。用这些组件来屏蔽的底层 IaaS 资源的差异。
蓝绿部署:
由于 Spinnaker 已经接管了底层的云平台资源,所以它能够实现软件部署的调度。从上图可以看到,在软件发布新版本时,我们可以为一个新集群上线新版本,将老版本的服务停掉。一旦新版本发现问题,我们可以通过 UI 上的 Rollback 按钮实现回滚。
金丝雀发布如何实现自动化?难点在于自动化评估1%节点部署的结果。Spinnaker 在发布1%集群的节点之后,ACA 会进行一系列的监控,包括用户的行为是否异常,流量的访问是否存在较大波动,最好会为这次发布计算出一个分数,这个分数就成为继续发布到10% 集群机器的数据依据,只要分数大于这个值,就能继续发布到剩余的机器。
即时通信工具集成 – Slack
Netflix 最开始是用邮件通知构建发布的结果,后来发现邮件根本没人看,于是 Spinnaker 和 Slack 做了集成,任何发布消息都会推送到 Slack 的群聊里。好处是如果有人工的决策点需要审核,在 Slack 里可以得到及时的通知。
Chaos Monkey 之前文章有讲过,它负责在线上环境里随机的关掉某几台机器,从而进行服务高可用的测试,没有经历 Chaos Monkey 测试的服务不是好服务。
使用 Artifactory 进行软件包管理:
Netflix 是 Artifactory 的重度用户。Netflix 在部署包/镜像到生产环境时,不会重新构建,而是从测试环境找到包,复制到生产环境。这就需要包管理平台的支持,Netflix 使用 Artifactory 作为统一包管理平台,记录包的发布元数据,例如包经过了哪些测试,被部署到了哪些测试环境/生产环境。当服务需要扩容或者回滚时,根据AQL(Artifactory Query Language)进行元数据查询,找到需要扩容或回滚的包。
Spinnaker 作为持续交付平台,已经被 Netflix 内部上百个团队使用,并且在生产环境里的进行了验证,同时社区也非常的活跃。
不过使用 Spinnaker 也有一些门槛,首先你需要有自动化构建,测试的流水线进行软件升级(Promotion),其次,需要让 Spinnaker 接管公司的云平台,用代码描述环境,并且已经用脚本/CMDB 实现软件在不同环境的部署,升级,回滚。如果你的公司内部有多个 Cloud Provider,并且希望实现可重复的持续交付流水线,可以考虑使用 Spinnaker 实现统一持续交付。