在 Spinnaker 中创建微服务部署管道

阅读数:2186 2016 年 3 月 7 日

话题:云计算DevOps持续交付语言 & 开发

在近期于德国柏林举办的microXchg 2016 大会上,Rick Buskens 进行了一场名为“在 Spinnaker 中实现微服务部署管道”(Microservice Deployment Pipelines with Spinnaker)的演讲,在演讲中谈到了 Netflix 与 Google 在Spinnaker这个由 Netflix 设计的持续交付平台上的合作关系。Spinnaker 可以为用户创建构建管道,保证了微服务应用程序部署的安全性与可预见性,并且支持多种云环境。

Buskens是来自 Google 开发者基础设施部门的一位工程经理,他在演讲的开头部分说道,Google 对于 Netflix 所主导开发的Spinnaker这个持续交付工具非常感兴趣。Netflix 在使用微服务架构构建流媒体视频平台方面的工作是众所周知的,整个架构中包含了大量组件,并且具有极高的动态性,这也表现出 Netflix 部署代码的频率之高。

任何一个微服务出现故障都有可能破坏用户体验,因此安全的部署是非常关键的,而 Netflix 在确保“工业级”的安全部署方面具有相当丰富的经验。因此,Google 已经与 Netflix 团队展开了合作,目的是创建高效与高适用性的工具,以支持基于微服务的项目的持续交付。

我们清楚有许多社区中的朋友还不愿意采用持续交付流程,因为它过于复杂。他们也不愿意选择某个云环境,是担心将自己的业务锁死在某个平台上。因此,Google 希望能够为用户提供良好的工具,帮助用户将应用可靠地部署在云环境中。

总的来说,通过与 Spinnaker 社区的合作,我们希望为这方面的工具实现标准化。

安全的部署之所以难以实现,是由于部署的“非密封性”,而且常常会受到手动交付流程的影响。尤其当应用的责任由多个开发与运维团队共同承担的时候,这种现象会更为明显。这将导致对于目前所部署内容的不确定性、容易出错的部署、以及失败的部署,而且往往需要那些并不熟悉所部署的组件的人参与到这一过程中。

Buskens 认为,持续交付(CD)能够缓解安全方面的风险。CD 的核心原则包括对每个变更都进行预发布、对生产环境的准备情况进行验证、自动化、避免故障以及最大化部署的可靠性与可预见性。在实现这些原则的时候,可以利用不可变基础设施(例如VMDKAMI等服务器镜像,或者Dockerrkt等容器技术)等技术以避免配置的差错、创建特定于环境的部署步骤、提供蓝绿发布等策略、以及在测试与反馈循环中包含部署标志。

Netflix 所创建的 Spinnaker 能够通过构建管道的创建与管理,以编程方式解决以上问题中的一部分。Spinnaker 本质上是一个面向云环境的持续交付平台,它取代了Netflix 的开源项目 Asgard持续交付平台。Spinnaker 平台的输入是构建的结果(例如通过Jenkins等持续集成工具所构建的包),它所生成的镜像可部署至某个目标环境。多个管道构建出了一个小型的工作流,提供了部署的阶段和提升门(promotion gate)(例如“提升至生产环境”),这些管道可以链接在一起,以生成一个完整的持续交付工作流。

Spinnaker 中的核心概念包括:“服务器组”,它本质上就是一种“安全、实现了负载均衡、并且具有容错性的微服务”,其中包括了基本配置信息、一个负载均衡器、安全组、机器类型以及分发策略。一个“集群”,即多个服务器组的一种逻辑分组。还有一个“应用程序”,代表多个集群的一个逻辑分组。部署过程包括镜像的发布、流量转换的管理、以及能够简单地进行回滚(如有必要)的功能。Spinnaker 还提供了可适配的部署策略,支持蓝绿发布、高地人发布(highlander,意指只能有一个存在!)、或金丝雀发布。

重点在于,Spinnaker 是基于(Spinnaker)在云环境中部署工业级别的应用程序的经验而设计的。我们很清楚它能够正常运行、并且有良好的伸缩性,它是一系列关键的最佳实践的完美展现。

一个 Spinnaker 管道由配置与阶段所组成。配置的内容包括一系列触发器、参数以及通知,而阶段就是指“上下文感知的操作”,例如“发布至预发布环境”。管道的设计目标是具有良好的可扩展性与重用性,而且通常会与上游的 CI 系统(例如 Jenkins)相集成。多个管道将链接在一起以创建一个工作流。

Spinnaker 目前支持多种云环境,包括 Amazon Web Services、Microsoft Azure、Cloud Foundry 以及 Google Compute Engine。

在 Google 看来,当我们为客户提供 DevOps 解决文案时,可以充分利用 Spinnaker 的强大功能。它是一种支持多个云环境的解决文案,因此我们非常希望确保用户能够选择正确的工具与基础设施,以及流程,让用户能够更快、更可靠地交付软件。

通过对 Spinnaker 的“clouddriver”微服务进行扩展,可支持更多的云环境。

Netflix 在 2015 年 11 月 16 日将 Spinnaker 开源,目前已经运用在 Netflix 产品的生产环境中了。Spinnaker的代码是开源的,可从 GitHub 上下载,它在Slack 上建立了一个专门的频道,并且在StackOverflow 上有一个专门的讨论标签。该项目将很快发布一个公开的路线图。如果用户想快速地尝试一下这个项目,可以使用能够“一键完成”的 Google Cloud Launcher Spinnaker 平台,在spinnaker.iocloud.google.com/solutions上可以找到操作指南。

用户可以在会议专属的 Youtube 频道上欣赏 Rick Buskens 的演讲“在 Spinnaker 中创建微服务部署管道”的视频。

查看英文原文:Creating Microservice Deployment Pipelines with Netflix’s Spinnaker: A Perspective from Google