专栏名称: 51CTO技术栈
有趣 | 有料 | 有内涵,为您提供最优质的内容,愿我们一起悦享技术,成就人生。
目录
相关文章推荐
京东科技技术说  ·  【A/B实验常见问题】实验异常值应该如何处理? ·  3 天前  
老刘说NLP  ·  如何用大模型自动生成PPT?AutoPres ... ·  3 天前  
码农翻身  ·  对阿里离职员工万字长文,我的一点儿想法 ·  2 天前  
程序员的那些事  ·  离谱!裁员裁出新高度了。。。 ·  3 天前  
程序员小灰  ·  千呼万唤,小灰的新书出版了! ·  4 天前  
51好读  ›  专栏  ›  51CTO技术栈

低成本快速实现容器化镜像部署,小红书在容器环境的CD实践

51CTO技术栈  · 公众号  · 程序员  · 2017-10-24 18:10

正文

请到「今天看啥」查看全文


快速实现容器化镜像部署的方法

我们一开始就考虑到容器化,就是用 Kubernetes 的框架做容器化的管理。


为什么是容器化?因为容器和微服务是一对“好朋友”,从开发环境到线上环境可以做到基本一致。


为什么用 Kubernetes?这和运行环境和部署环境有关系,我们是腾讯云的重度用户,腾讯云又对 Kubernetes 提供了非常到位的原生支持。


所谓原生支持是指它有如下几个方面的实现:

  • 网络层面,Kubernetes 在裸金属的环境下,要实现 Overlay 网络,或者有 SDN 网络的环境,而在腾讯云的环境里。它本身就是软件定义网络,在网络上的实现可以做到在容器环境里和原生的网络一样的快,没有任何的性能牺牲。

  • 在腾讯云的环境里,负载均衡器和 Kubernetes 里的 service 可以捆绑,可以通过创建 Kubernetes 的 service 去维护云服务的 L4 负载均衡器。

  • 腾讯云的网盘可以被 Kubernetes 管理,实现 PVC 等,当然 Kubernetes 本身提供的特性是足够满足我们的需求的。

图 4

我们作为创业公司都是以开源为主,在新的环境里应用了这样的一些开源技术(图 4),Jenkins、GitLab、Prometheus 和 Spinnaker。Jenkins 和 GitLab 大家应该都听说过,并且都在用,Prometheus、Docker 也都是目前很主流的开源产品。


这里重点介绍两个比较新,现在相当火的开源技术:

  • Spinnaker, 这是一个我个人认为非常优秀的开源的发布系统,它是由 Netflix 在去年开源的,是基于 Netflix 内部一直在使用的发布系统做的开源,可以说是 Netflix 在 CD 方面的最佳实践,整个社区非常活跃,它对 Kubernetes 的环境支持非常好。

  • Traefik, 在我们的环境里用来取代 Nginx 反向代理,Traefik 是用 Go 写的一个反向代理服务软件。

01

Spinnaker

Spinnaker有如下几个特点:

  • Netflix 的开源项目。 Netflix 的开源项目在社区一直有着不错的口碑。

  • 有开放性和集成能力。 它原生就可以支持 Jenkins、GitLab 的整合,它还支持 Webhook,就是说在某一个环境里,如果后面的某个资源的控制组件,本身是个 API,那它就很容易整合到 Spinnaker 里。

  • 拥有较强的 Pipeline 表达能力。 它的 Pipeline 可以复杂到非常复杂,Pipeline 之间还可以关联。

  • 有强大的表达式功能。 可以在任何的环节里用表达式来替代静态参数和值,在 Pipeline 开始的时候,生成的过程变量都可以被 Pipeline 的每个 stage 调用。

    比如说这个 Pipeline 是什么时候开始的,触发时的参数是什么,某一个步骤是成功还是失败了,此次要部署的镜像是什么,线上目前是什么版本,这些都可以通过变量访问到。

  • 界面友好, 支持多种云平台。 目前支持 Kubernetes、OpenStack、亚马逊的容器云平台。

图 5

图 5 是 Spinnaker 的架构,它是一个微服务的架构,里面包含用户界面 Deck,API 网关 Gate 等。


API 网关是可以对外开放的,我们可以利用它和其他工具做一些深度整合。Rosco 是它做镜像构建的组件,我们也可以不用 Rosco 来做镜像构建。Orca 是它的核心,就是流程引擎。


Echo 是通知系统,Igor 是用来集成 Jenkins 等 CI 系统的一个组件。Front52 是存储管理,Cloud driver 是它用来适配不同的云平台的,比如 Kubernetes 就有专门的 Cloud driver,也有亚马逊容器云的 Cloud driver。Fiat 是它一个鉴权的组件。

图 6

图 6 是 Spinnaker 的界面,界面一眼看上去挺乱,实际上它还是有很好的逻辑性。


这里每一个块都有三种颜色来表示 Kubernetes 环境里的某个实例的当前状态。绿色代表是活着的 实例 ,右边是实例的信息,包括实例的 YML 配置,实例所在的集群,实例的状态和相关 event。

图 7

图 7 是 Pipeline 的界面。首先,我觉得这个界面很好看很清晰。二是 Pipeline 可以做得非常灵活,可以在执行了前几个步骤之后,等所有的步骤执行完了再执行某个步骤。


这个步骤是某个用户做某个审批,再分别执行三个步骤其中的一个步骤,然后再执行某个环节。也可以发布还是回退,发布是走发布的流程,回退就是回退的流程。


总之在这里,你所期待的 Pipeline 的功能都可以提供,如果实在不行,还有 Webhook 的模式让你方便和外部系统做整合。







请到「今天看啥」查看全文