您的位置:首页 > 运维架构

在落地DevOps项目中遇到的困难、挑战和解决思路

2016-11-19 09:47 676 查看
  DevOps落地困境
  本文章由www.mingpaixinxi.com网转载分享,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开发运维流程
  DevOps关键动作
  构建
  构建动作用来生成应用程序包、配置文件、安装/部署脚本等,维护程序包的版本。
  编排
  根据应用系统的拓扑、应用依赖平台、软件包、配置文件(脚本)等,根据依赖关系进行架构编排、动作设置。
  部署
  根据编排控制文件,进行实例化部署,完成环境设置、平台配置、软件安装、配置更新等动作。
  配置
  定义不同阶段要进行的配置行为,解析配置模板,自动进行依赖解析,完成应用系统配置。
  那么Docker及云环境下的CI/CD系统设计原则
  确定工作流程;
  树立关键动作;
  明确动作交互边界;
  根据角色设计工具;
  内置大量可复用模板;
  同时保持一定的灵活性。
  角色/工作流/关键动作
  本次演讲重点聚焦与开发(Dev)和运维(Ops)在CI/CD中的交互界面对象确定、CI/CD平台整合、关键技术分析和业务流转流程等四个方面。从实践的角度分享在落地DevOps项目中遇到的困难、挑战和解决思路。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  项目