登录 | 立即注册 切换到窄版
查看: 565|回复: 0

华为DevOps之自动化部署

[复制链接]

18

主题

30

帖子

191

积分

版主

Rank: 7Rank: 7Rank: 7

积分
191
发表于 2017-5-10 13:39:06 | 显示全部楼层 |阅读模式

背景

  随着敏捷开发和DevOps的流行,自动化部署成为软件企业的关键能力,决定了企业的生产力水平。在网站、公共服务和云计算领域,部署是把开发人员的交付件安装到测试环境、类生产环境和生产环境等,是DevOps之中重要组成部分,决定了软件的交付效率和质量水平。 手工部署费时、低效也无法保障质量,在对外提供多节点集群服务的互联网公司,手工部署变成了噩梦。而自动化部署的目标就是要取消手工操作,把全部步骤流程化、标准化、规范化,从而提高质量和效率。

  接下来我就从“业界常用的自动化部署工具、自动化部署工具的选型、华为自动化部署系统构建实践”等角度来阐述我对自动化部署的理解。

  开源自动化部署工具

  ○ Chef

  Chef 是一款自动化服务器配置管理工具,可以对所管理的对象实行自动化配置,如系统管理,安装软件,开发语言是Ruby。Chef由Chef Server、Chef Workstation和Chef Node组成。Chef Node是安装了Chef-client并注册了的被管理节点,Chef-client连到Chef Server取得最新的配置指令(Cookbook)并按照指令配置自己。

  Chef的优点是有丰富的模块和配置脚本,缺点是需要熟悉Ruby,学习曲线比较陡峭。

  ○ Puppet

  Puppet是一个开源的软件自动化配置和部署工具,开发语言是Ruby,支持Linux、Unix、windows平台,使用自有的puppet描述语言,可管理配置文件、用户、cron任务、软件包、系统服务等。Puppet把这些系统实体称之为资源,puppet的设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。

  Puppet采用C/S星状的结构,所有的客户端和一个或几个服务器交互。每个客户端周期的(默认半个小时)向服务器发送请求,获得其最新的配置信息,保证和该配置信息同步。每个puppet客户端每半小时(可以设置)连接一次服务器端,下载最新的配置文件, 并且严格按照配置文件来配置客户端。配置完成以后,puppet客户端可以反馈给服务器端一个消息。如果出错,也会给服务器端反馈一个消息。

  Puppet的优点是社区支持好,有成熟的接口,能够支持每一种操作系统,安装配置简单,并且有很强的报表能力。它的缺点是你仍然需要Ruby和命令行CLI。

  ○ SaltStack

  SaltStack是一个服务器基础架构集中化管理平台,允许管理员对多个操作系统创建一个一致的管理系统,包括VMware vSphere环境。SaltStack也属于主从(C/S)结构,由主控端(master)和被控端(minion)基于证书认证。SaltStack与特定的命令结合使用可以在一个或多个minion执行。具备配置管理、远程执行、监控等功能。SaltStack基于Python语言实现,结合轻量级消息队列(ZeroMQ)与Python第三方模块(Pyzmq、PyCrypto、Pyjinjia2、python-msgpack和PyYAML等)构建。

  SaltStack的优点是社区活跃,输入输出和配置采用YAML格式清晰一致,扩展性和弹性很好。它的缺点是新手安装上手不易,Web界面没有竞争力,非Linux系统支持不是很好。

  ○ Ansible

  Ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。Ansible基于python开发,具有重多的模块,可以提供幂等性操作。Ansible有以下优点:

  ① 比起来其他自动化集群管理和运维工具 Puppet、Chef、Ansible 显得很简单并且轻量级,也可以和puppet一样进行模块扩展。

  ② 轻量级的好处是学习门槛低、问题少、安装快、执行快。操作完全依赖 SSH 而不需要安装 agent 。这样的好处是不再需要维护 agent 的状态,不用担心 Agent 挂掉。而 SSH 是每台服务器必备的服务。

  自动化部署工具的选择

  企业选择部署工具的核心标准主要有下面几条:

  ① 质量,包括来源、成熟度、应用广泛性、缺陷和年平均高风险漏洞数量、兼容性等;

  ② 技术及生态,包括技术路标、编程语言、是否有知名公司投入和基金会支持等;

  ③ 维护,包括活跃度分析、配套文档、漏洞披露渠道、高危漏洞修复、Bug和技术求助处理等;

  ④ 软件许可证;

  ⑤ 二次开发扩展能力。

  选用Puppet、Chef、Ansible还是Salt? 下表列出了他们的特性对比:

  工具
  语言
  架构
  协议
  Puppet
  Ruby
  C/S
  HTTP
  Chef
  Ruby
  C/S
  HTTP
  Ansible
  Python
  无Client
  SSH
  Saltstack
  Python
  C/S(可无Client)
  SSH/ZMQ/RAET

  Ansible支持无代理安装,开发语言python,学习门栏低,二次开发扩展容易,开发社区活跃。Ansible有一大批模块,可以用几乎任何一种语言来编写自定义Ansible模块,只要模块输出是有效的JSON。Ansible galaxy(https://galaxy.ansible.com/)提供各种各样的playbook roles供下载和分享。几乎每一种设施包括软件和网络设备等都可以在galaxy上找到写好的角色,可以直接使用或修改后使用。综合以上几点,我们选择Ansible做为自动化部署的引擎再进行二次开发。

  自动化部署系统构建实践

  为了匹配华为研发的实际需求,兼容公有云与私有云场景下的DevOps,我们的构建自己的自动化部署系统有以下目标:

  一键式部署:尽可能的自动化所有部署过程,包括基础设施的创建和部署;

  多环境支撑:能够适应于开发、测试和生产环境;

  无服务中断:能够无缝的进行服务升级、切换;

  支持回滚:可以很容易的回滚到前面的版本以处理意外问题;

  支持私有云和公有云:不仅要支持自身部署,还要作为服务部署在私有云和公有云上提供部署能力;

  支持跨网和跨区域部署:要支持跨VPC和多区域部署。

  虽然有了Ansible作为自动化部署工具,我们仍然有很多挑战问题需要解决才能实现目标。我们的策略是先解决痛点,再分阶段优化、逐步实施。

  ○ 痛点1:原有系统自动化脚本大部分由shell组成,重复执行效率低,难维护

  自动化脚本是自动化部署的最重要的、最常用的部分,脚本的质量和容易维护决定了运维人员的工作质量和效率。我们的方案是优先升级自动化脚本为Ansible playbook,以Ansible模块的方式而非命令模式来执行操作。用Ansible playbook的模块幂等性操作替换shell脚本,在多次重复执行任务时能够自动检测系统当前状态,从而避免不必要的重复操作,大大提高了部署效率。

  ○ 痛点2:Ansible工具没有提供web界面,用户仍然需要执行大量的命令才能完成部署

  避免运维人员手工输入命令执行脚本是保证运维流程标准化、规范化的重要一步。采用微服务架构实现全功能web界面,封装后台的参数替换和命令执行,就自然而然的成为优化脚本之后的任务。采用微服务架构把要提高的功能服务化,统一用RESTfulAPI来实现包括服务之间的调用,方便Web前端通过统一接口调用。实施后用户只需要在界面上就能轻松完成部署操作。

  ○ 痛点3:我们的产品有大量的组件、服务和微服务组成,组件和服务的依赖关系和部署执行顺序密切相关,难以维护

  Ansible的playbook提供一定的服务编排能力,在 playbooks 中可以编排有序的执行过程,甚至于做到在多组机器间,来回有序的执行特别指定的步骤。并且可以同步或异步的发起任务。但是我们认为一个playbook应该保持相对独立的操作,逻辑不是太相关的任务不适合编排在同一个playbook之中。我们用流水线同时集成编译构建、代码检查、部署和自动化测试,从代码提交开始触发操作,完成整个DevOps的自动化流程。流水线支持编排部署任务之间的依赖和顺序,通过串行任务和并行任务以及子流水线来组合、调度各个任务,从而实现高效部署。

  

  痛点4:随着系统的推广使用,日活量骤增,线上用户几乎方案是24小时在线,部署不中断服务成为焦点

  随着业务的增长,服务节点也由最初的高可用架构变成了集群。此时为了解决不中断服务而上线蓝绿部署(也可以成为灰度发布的A/B双路模式)正逢其时,即把服务集群划分成蓝、绿两个集群,新版本上线的过程中,首先把流量切到蓝集群,然后部署新版本到绿集群,部署完成后通过ELB(负载均衡器)切测试流量到绿集群,进行功能验证。验证通过后再把流量切回绿集群,同时升级蓝集群。在蓝集群也验证通过后再把流量恢复正常。在部署期间,老版本的状态不受影响。这样风险很小,并且,如果新版本测试有问题,我们可以在任何时间回滚到老版本。

  

  有了上面的流水线,整个蓝绿部署的切流量和单个集群的部署都可以有流水线和子流水线组合来完成。实施了蓝绿部署之后,运维的同事们可以正常作息不用夜班部署了。

  伴随着产品和业务的发展,服务节点的信息维护、各个节点的机器信息和配置参数的管理和维护压力也日渐增长,建立统一的CMDB信息库并且实施监控各个服务节点的关键信息也列入实施任务中。部署自动化要支持灰度发布、自愈、回滚和弹性等也在填充我们的backlog。

  总结

  总而言之,新的需求和瓶颈总是随着业务的变化不断改变,DevOps也是一个逐步进化的过程。现在华为已经将自动化部署的能力作为软件开发云(DevCloud)的部署管理服务提供给内部的研发团队及外部的企业使用,让企业站在华为研发的肩膀上精益求精,快速提升自己的运维效率。

  华为软件开发云(DevCloud)是集华为研发实践、前沿研发理念、先进研发工具为一体的研发云平台;面向开发者提供研发工具云服务,让软件开发简单高效。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|Ansible中国社区 ( 京ICP备13038968号

GMT+8, 2017-9-26 04:35 , Processed in 0.055127 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表