Netflix 是业界公认的 DevOps 最佳实践者。他们的技术博客(techblog.netflix.com)会经常更新他们内部DevOps 的最佳实践。硅谷的公司通常会把内部使用比较成功的项目共享出来成为开源项目,Netflix 也开源了他们的DevOps平台 – Spinnaker (www.spinnaker.io).
最近Netflix 的架构师 Glover 在 JFrog 总部的Meet up 活动中做了 Spinnaker平台的分享。
Spinnaker 介绍
Spinnaker允许使用者通过创建流水线(pipeline)的方式展现一个交付流程,并执行这些流水线以完成一次部署。
用户可在Spinnaker中从创建一个部署单元(例如一个JAR文件或是Docker镜像)开始,直至将应用部署至云环境中。Spinnaker支持多种云平台,包括Kubernetes,AWS,Google Could Platform,openstack以及Cloud Foundry。
Spinnaker 的两个核心概念是集群管理,和部署管理。
集群管理
1. 服务器组
服务器组是最基本的资源,它定义了镜像运行在何种机器实例上,以及实例数量。这些资源绑定了负载均衡和安全组。也包含了用户信息,可用区。当部署了服务器组之后,它是多个虚拟机的集合
2. 安全组
定义了一组网络访问权限
3. 负载均衡
和 Openstack 的 LBaaS 类似,它负责将请求分发给集群内的节点。
4. 集群
是多个服务器组的逻辑组合。
部署管理
1. 流水线
流水线是 Spinnaker 里的主要部署编排工具。它包含了若干个 Stage。你可以在 Stage 直接传递变量。可以手工触发构建,也可以被 Jenkins 任务触发,或者 Cron 任务触发。任务完成之后,可以发送邮件通知,或者调用 webhook 通知。
2. Stage
Stage 是流水线里的自动化任务。你可以使用任意的顺序来调度 Stage。Spinnaker 默认提供了一些通用的 stage。
· Bake
类似于 Docker build。它产生出一个不可变的镜像,用来部署。
· Deploy
部署一个已有的镜像。
· Manual Judgement
等待用户输入,决定是否继续部署。
· Script
执行一个特定的 shell 脚本。
· Jenkins
执行一个 Jenkins 任务。
2
Spinnaker 演示
Spinnaker 的仪表盘显示了所有在运行的项目,有多少实例在运行,跑在哪个 Region,并且可以查看多个帐号的实例。
在 Bake 阶段,可以选择服务器的镜像,包括 OS,VM类型,存储,等等。
在 Deploy 阶段,可以选择部署的集群,也就是之前的服务器组的概念。并可以选择可用区和地区。
有了镜像,有了计算资源,网络,安全组和存储,就可以快速搭建出来一整套环境,这就是不可变基础设施的最佳实践。
在人工决策阶段,你可以加入 并执行任何 Stage,例如发起一个 Jenkins 任务,执行一个 Shell 脚本,或者是扩容一组服务器组。
3
Spinnaker 如何获取镜像依赖实现按需扩展?
由于 Netflix 的主营业务是视频服务,所以在特定时间段会达到流量访问高峰,所以Netflix 有非常大的动态扩容的需求,来应对高发期的并发请求。快速部署新的服务成为 Netflix 的刚需。
Netflix 内部使用Spinnaker 和 Artifactory 作为快速上线服务的基石,Netflix 内部的微服务架构已经落地很久,他们将各种微服务产生的工件由Artifactory统一管理,所以Spinnaker 的 Pipeline 会使用统一的Artifactory RESTAPI拉取任何依赖,包括 Yum, Docker, NPM 等。得益于 Artifactory 高可用的设计,能够支持将并发流量从负载均衡(LBaaS)均匀分布到多个 Artifactory 节点。实现快速,自动化发布服务。一旦需要回滚,可以在 Spinnaker 上触发回滚事件, 使用脚本找到上一版本的工件,执行回滚上线。
4
总结
Spinnaker 是开源的,跨云平台的持续交付平台,让你充满自信的发布产品。它提供强大的部署流水线管理和集群管理,支持DevOps 团队打造不可变基础设施,快速搭建测试环境,动态扩展线上环境。