DevOps学习
目录:
1、DevOps是什么
2、为什么要采用DevOps
3、DevOps的核心理念
4、DevOps与ITIL对比
5、DevOps工作核心
6、如何实现DevOps
DevOps:
Development and Operations的组合词,其不是一种开发工具,而是一种框架,包含了许多优秀想法和原则,是一种重视软件开发人员(Dev)和IT运维人员(Ops)之间的沟通合作,通过自动化“软件交付”和“架构变更”的流程,来使得构建、测试、发布软件能够更加快捷、频繁和可靠。
(1)首先,在缺乏DevOps能力的组织中,各职能人员之间存在着信息“鸿沟”:
l 运营人员:要求更好的可靠性和安全性;
l 开发人员:希望基础设施响应更快;
l 业务人员:其需求则是更快地将更多的特性发布给最终用户使用。
也就是说,开发部门的驱动力是需求变更后要交付新特性,运营部门的驱动力则是可靠性和效率。两者的目标不匹配,因此减慢了业务效率以及IT交付的速度。
(2)其次,烟囱式自动化,即数据中心是基于单个项目建设的,其特点为“烟囱式”,也就是垂直的体系结构,每一个IT系统都有自己的存储和IT设备,以及独立的管理工具和数据库,不同的系统不能共享资源,不能交付和访问,形成了资源孤岛和信息孤岛。会使得企业IT系统出现三大问题:
l IT资源的服务率非常低;
l IT基础设施复杂,难以适应业务变化的需求;
l 服务器数量和管理的总体成本太高。
而DevOps的目标就是实现流程的自动化,从而大大节省成本,其目的就是提高客户的相应能力,能够适应频繁变动的业务需求,在工程中,发现问题的速度越快,成本也就越低。
(3)使用DevOps模型,会使得这些领域从中受益:
l 自动化
l 监视
l 能力规划
l 性能
l 备份与恢复
l 安全
l 网络
l 服务提供
l ……
一句话概括:
DevOps的引用可以使得开发部门、运营部门、质量保障部门之间相互沟通、协作和整合,可以对产品交付、测试、功能开发和维护起到意义深远的影响。
(1)敏捷:
l 尽早地、持续地交付可评价的软件来使客户满意;
l 开发整个期间都乐于接受需求变更;
l 业务人员和开发人员在项目开发期间要朝夕工作在一起;
l 保持开发团队间面对面交谈、视频会议、电话、即时通讯、Email等;
l 可持续发展,出资人、开发人员及使用者应该总是维持稳定的开发速度。
(2)精益:
l 杜绝浪费;
l 内建质量;
l 延迟决策;
l 快速交付;
l 全局优化;
l 团队授权。
一句话概括:
DevOps的核心理念也就是使用最少的成本、最快的速度、最高的品质、来满足客户的各种需求场景。
(1)首先,介绍下ITIL的定义:
ITIL为企业的IT服务管理实践提供了一个客观、严谨、可量化的标准和规范,企业的IT部门和最终用户可以根据自己的能力和需求定义自己所要求的不同服务水平,参考ITIL来规划和制定其IT基础架构及服务管理,从而确保IT服务管理能为企业的业务运作提供更好的支持。
(2)DevOps与ITIL对比:
l 在支撑IT运维的业务流程方面,ITIL和ITSM流程无疑还是最好的。ITIL描述了需要被IT运维支持的功能集合,这些功能集合足以支撑DevOps式的工作流。
l 敏捷和持续集成以及持续发布是开发的输出,这些输出同时作为IT运维的输入,为了适用跟DevOps相关的快速部署的节奏,ITIL流程的很多方面,特别是围绕着变更、配置和发布流程方面,需要自动化。
l DevOps的目标不仅只是增加变更的频率,而且也支持在不中断和破坏当前服务的基础上,确保功能部署成功,同时也可以快速检测和修复缺陷。这相当于是引入了服务设计,事故和问题管理方面的ITIL新准则。
DevOps的信条在于:“越是困难的事,需要更频繁地进行!”
(1)其工作核心为:
l 持续交付:团队确保每个变更可以部署至生产环境,但也许并不需要实际部署。
通过将每一次改动都提交到一个模拟产品环境中,使用严格的自动化测试,确保业务应用和服务能符合预期,使用完全的自动化过程来把每个变更自动的提交到测试环境。
l 持续部署:每个变更可以自动部署到生产环境。
将开发机构的文化、流程和工具整合到一起,让软件交付过程中的每个人都能看到每个构建版本从提交到发布的整个过程。
图5.1 思路图
(2)通过什么方式实现这两点呢?
l 把对于发布、备份、监控、安全、配置管理和系统功能的测试作为一项独立的项目流程;
l 与客户的每一次变需求更都拥有清晰的文档概括;
l 独立于目标环境的自动化打包和部署;
l 软件的持续审计;
l 给运维人员做培训,让他们弄清楚项目的体系结构和核心代码;
l 开发人员与运维人员共同开展会议,分享项目进度,共同修订工作计划;
l 在生产级环境实现功能测试的自动化;
l 对软件组件的平台配置应进行持续集成。
DevOps本身不是开发工具,而是开发流程中的一次革新,为了能够成功地实施DevOps,需要借助一些工具。
开发类的DevOps工具又分为:
l 版本控制和协作,例如Git、SVN等;
l 构建和测试自动化,例如Ant、Selenium、Jmeter等;
l 持续集成和交付,例如Jenkins(开源持续集成组件)、CruiseControl等;
部署类的DevOps工具分为:
l 容器平台,例如Docker(开源容器组件)等;
l 配置管理,例如Chef、Puppet、Ansible等;
l 微服务平台,例如Cloud Foundry、Kubernetes(开源产品化容器编排平台)等;
l 服务开通,例如Puppet、Docker Swarm、Vagrant等;
维护类的DevOps工具分为:
l 日志,例如logstash等;
l 监控告警和分析,例如Nagios、Zabbix(开源自动化监控组件)、Kibana等;
下面列出四种工具的介绍:
A)Docker
使用Docker——以容器化的方式去部署应用,进行持续集成。Docker像集装箱一样,打包了所有依赖,再在其它服务器上部署很容易,不至于换服务器后发现各种配置文件散乱放置,这样就解决了编译时依赖和运行时依赖的问题。Docker简化了配置管理,提升了可操控性,并让横向扩展变得简单。Docker还能让容器在不同的位置自由地移动。
B)Jenkins
支持项目的自动化测试、自动化构建、自动化docker镜像打包、自动发布docker镜像到Docker registry、自动发布应用到Kubernetes容器云等DevOps核心流程。
C)Zabbix
对平台的物理主机以及虚拟主机进行监控,自动收集主机状态并产生告警,同时可以触发通知和故障修复操作。
D) Git
Git平台有助于开发者们在上面进行协作,进行统一的代码管理,如代码仓库、代码拉取等等。与GitHub的集成十分容易,几乎任何系统都可以连接到GitHub上,没有什么特殊限制。GitHub也可以放置个人信息和项目相关的数据。GitHub优于其它SCM工具的地方在于,它支持本地分支、过度区域和多工作流。