关于分享者:编程
罗晶,花名瑶靖。在加入阿里云以前,前后在支付宝平台数据技术事业群、百度基础架构部任职。现主要负责阿里云容器服务产品的集群管理系统的研发,从事容器的持续交付、持续集成的方案设计与实现。网络
演讲内容架构架构
-
大话持续交付运维
-
持续交付的前世ide
-
容器化DevOps工具
-
持续交付的此生性能
演讲主要内容测试
持续集成指的是,频繁地(一天屡次)将代码集成到主干。持续集成的目的,就是让产品能够快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干以前,必须经过自动化测试。只要有一个测试用例失败,就不能集成。ui
持续交付(Continuous delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。若是评审经过,代码就进入生产阶段。阿里云
持续交付能够看做持续集成的下一步。它强调的是,无论怎么更新,软件是随时随地能够交付的。
持续集成和持续交付保证了软件的持续运行和有效反馈。
不一样环境,不一样交付运维方式。即使按照流程去作持续交付,系统地搭建出来整个持续集成的系统环境,同样会遇到七七八八这样的问题。就算是同一种语言,每个开发者所依赖语言环境、依赖的包不同,就会致使有很是多的编译环境,维护起来就很困难。
传统持续交付问题的根源在于:
-
开发者交付的只有代码以及代码的依赖;
-
运维者须要除了代码以外的运行环境,以及运行环境之间的依赖。
交付方式的变革
Docker的出现改变软件交付的方式。经济学家说过:没有集装箱,不可能有全球化。Docker就像把一堆零散的代码和我要的全部东西装在集装箱里,真正去交付给运维时,至关于把这个集装箱运行起来。它包含全部的环境依赖,因此在任何地方运行集装箱所达到的结果都是同样的。由于达到了环境一致性。
Docker之因此这么火,是因为它的敏捷、可移植、可控的特性决定的。敏捷意味着Docker能够秒级应用启动、轻量级隔离、细粒度资源控制、低性能损耗;可移植表明着Docker的环境无关的交付、部署方式、可用于软件生命周期中不一样运行环境;可控表示容器级别的资源隔离和流控。
Docker Compose是Docker推出来的一个对多容器的编排技术,简单好用,便于开发。使用Docker Compose,能够一键构建本地开发环境,在团队中能够共享一份配置文件。它的优势是:
-
简单好用,便于开发
-
本地环境沙箱
-
UT环境
-
编排容器、存储和网络
固然,它也存在不足:面向开发和部署,不支持自动化运维。
Docker Swarm把一组Docker引擎抽象成一个Docker引擎,之前全部在单机上对一个Docker引擎的工做,均可以透明的变成对一组Docker集群上的节点的操做。Docker Swarm它的优势是:
-
支持标准的 Docker API;
-
灵活、可扩展、可插拔的容器调度。
固然,它也存在不足:面向容器、缺乏服务生命周期支持。
容器服务上有三个层面的概念:
-
资源层面——集群,节点。
-
内容层面——Compose模板,镜像。
-
应用层面——应用,服务,容器。
容器化DevOps,能够实现:
-
开发环境到生产环境的一致
-
可编程基础设施
-
Infrastructure as Code
-
不可变基础架构
-
Immutable infrastructure
-
全流程工具化、自动化、持续交付
-
下降试错成本,鼓励快速迭代
简单的容器化持续交付流程以下图所示:
复杂的容器化持续交付流程:开发人员在除了代码 、Config、Test脚本还要写Dockerfile。把这些代码传(Push)到代码仓库,有一个CI service经过代码仓库hook告诉你代码仓库有一个新的提交。把代码拉下来复制,进行两件事情 : Build和UT。在build的过程当中,会从Docker Registry上面去拉下来( Pull )依赖的image,当build经过了以后会push image到这个Docker Registry单位里面去。而后CI 会有一个hook去通知CD,deploy Service根据Docker和image描述以及compose描述,把image部署到预发、测试或者生产环境。
持续交付“最后一千米”
发布时持续交付的“最后一千米”,常见的发布策略有蓝绿发布、金丝雀发布(灰度发布)、ABTest,在国内的开发者中,对这几个概念有独立的理解。
Rolling Update
-
依次中止老容器,启动新容器
-
整个过程自动化,无需用户手动操做
-
适合于多副本的应用发布
蓝绿发布(热部署)
-
不会中止老容器,为新服务启动新容器
-
须要用户设置路由权重,实现不一样版本应用的上线、下线
-
适合于版本的快速发布,不会停机影响用户
金丝雀发布(灰度)
-
不会中止老容器,为新服务启动新容器
-
须要用户设置路由权重,实现不一样版本应用的共存
-
支持A/B测试,适合多方案选择