为期两天的CNUTCon2016全球容器技术大会今天在北京喜来登长城酒店正式开幕。
大会吸引了众多对容器感兴趣的资深开发者、运维工程师和相关技术人员参加。现场人头攒动,气氛热烈。
博云展台" src="https://www.bocloud.com.cn/manager/upload/201702/21/201702211819296602.jpg" />
BoCloud博云展台
本次大会邀请了国内外知名企业45名技术专家,设计了11个专题,51场演讲。为参会者带来一场丰富盛大的容器经验交流盛会。
本次大会以“案例剖析·实践驱动”为主题,围绕微服务、容器云、Docker实践 、Kubernetes实践、Mesos实践、CI/CD等热门技术进行深度讨论,从技术层面进行剖析,为参会者解决在实际实践中遇到的共性技术难题。
来自Netflix、Docker、CoreOS、Mesosphere、腾讯、阿里巴巴、百度、京东、携程、同程、搜狗、平安科技、宜信、广发证券、知乎、新浪微博、BoCloud博云等知名公司的技术专家从多方面进行了实践经验分享。
在下午的容器实践经验谈专场中,BoCloud博云 CTO 李亚琼为参会者带来了《基于Docker+CI/CD的DevOps实践经验分享》主题演讲。
李亚琼博士全面负责公司的技术及产品研发工作。毕业于中国科学院计算技术研究所,获计算机系统结构工学博士学位。加入博云前,他先后在华为和曙光公司进行云计算相关产品研发,曾任曙光公司云计算产品事业部总工程师,兼任电子政务云集成与应用国家工程实验室专家委员。他长期从事计算机体系结构、操作系统、虚拟化和容错计算等方面研究工作。
Docker技术和CI(持续集成)/CD(持续交付)技术的结合是DevOps理念落地中需要解决的一个技术难题,其挑战主要表现在如何实现由多种语言开发、多种构建工具支撑、多个版本输出的前提下找到一条能够最简化工作、自动化程度最高的技术实践之路。
DevOps落地困境
DevOps落地为什么那么难?因为从设计人员、组织架构、流程、人员技能到工具,变化很大,要求很高,建设风险很高。从理念到落地,需要一定的周期才能够成熟,技术决策者一般都比较慎重。
DevOps落地困境包括:
设计部门多
流程改造复杂
责任边界需要重新划分
考核等配套机制没有跟上
技术成熟度低
自动化是核心问题
回过头来看,人们把过去打包、配置、部署,甚至运维,都做了很多自动化的尝试。最为典型的是CI和CD,为什么说典型呢?因为它解决了两类人员边界清晰的需求:打包应用,部署应用。
从整个软件的生命周期看,再往前就是开发阶段了,从目前的技术发展水平来看,还没有一种比较普世的自动化Coder Machine来根据你的需求直接生成代码,这里面涉及到大量的需求分析、归纳、架构设计、技术选型、编码、调试等复杂的工作;往后看,运维工作能不能自动化呢?现在看,至少对于常例性的工作,可以自动化的,不如批量的文件上传、软件安装等等,但是由于系统的运行涉及的因素太多,无论是基础设施、还是操作系统、还是环境配置、以及用户的输入/输出,其组合起来的模式空间还是非常庞大的,所以这一部分完全自动化也比较困难。
传统的CI/CD怎么实现的?
Jenkins:任务、代码仓库、构建脚本、配置变量。
本质上这种自动化也是Case-by-Case的,因为每一个项目选用的开发语言、构建工具、配置方式等都不完全相同,所以,Jenkins构建属于“一次配置,多次受益”,这一次的配置操作本质无法自动化,需要经验丰富的开发人员(项目leader)开发脚本来处理。
那么Docker这样的容器技术出现了以后,是不是简化了这个工作呢?
应该说把一部分任务通过docker封装,实现了开箱即可用,这一部分工作主要就是配置工作。具体到系统构建,还是需要依赖Jenkins类的工具。
那么,为什么大家都欢迎Docker这个技术呢?
我看,最主要贡献是清晰了发生问题的边界,减少了开发和运维之间的扯皮。开发给出的是一个可运行的环境,而不是一个需要二次人工部署配置的文件集合。
针对Docker环境的CI/CD自动化部分,也是很多PaaS平台软件的主要功能有:
Openshift、RancherOS、CloudFoundry、heroku、stackato、tsuru等。
从开发和运维的角色看问题是不是都解决了?
从开发的角度看,针对环境稍微复杂的应用,需要开发自己的框架插件;从运维的角度看,应用架构的灵活性也需要不同的插件来支撑,同时,运维还需要解决环境适配问题,比如用生成环境的IP等替换配置文件中的默认值等。
所以,引入了docker后看,问题还是不少。
开发/运维的核心需求
开发人员构建自动化,至少不增加现有开发的工作量;运维人员,交付的系统边界清晰,提供编排/配置自动化能力。
DevOps关键动作
构建
构建动作用来生成应用程序包、配置文件、安装/部署脚本等,维护程序包的版本。
编排
根据应用系统的拓扑、应用依赖平台、软件包、配置文件(脚本)等,根据依赖关系进行架构编排、动作设置。
部署
根据编排控制文件,进行实例化部署,完成环境设置、平台配置、软件安装、配置更新等动作。
配置
定义不同阶段要进行的配置行为,解析配置模板,自动进行依赖解析,完成应用系统配置。
那么Docker及云环境下的CI/CD系统设计原则
确定工作流程;
树立关键动作;
明确动作交互边界;
根据角色设计工具;
内置大量可复用模板;
同时保持一定的灵活性。
本次演讲重点聚焦与开发(Dev)和运维(Ops)在CI/CD中的交互界面对象确定、CI/CD平台整合、关键技术分析和业务流转流程等四个方面。从实践的角度分享了BoCLoud博云在落地DevOps项目中遇到的困难、挑战和解决思路。