在本文中,咱们将简要叙述这些革命的历史和重要性,并探讨这些变化如何影响咱们全部部署和运行软件的方式。咱们将概述云本机的含义,以及若是您从事软件开发,运营,部署,工程,网络或安全工做,您能够在这个新世界中看到哪些变化。数据库
因为这些相互关联的革命的影响,咱们认为计算的将来在于基于云的容器化分布式系统,由Kubernetes平台(或很是相似的东西)经过自动化动态管理。开发和运行这些应用程序的技术 - 云原生DevOps - 是咱们将在本文其他部分探讨的内容。安全
若是您已经熟悉全部这些背景材料,而且您只想开始享受Kubernetes的乐趣,请舒服地安顿下来,喝一杯最喜欢的饮料,咱们会开始的。服务器
云的核心思想是:购买计算而不是购买计算机。 也就是说,不是将大量资金投入到难以扩展的物理机械中,且机械地分解,而且迅速变得过期,您只需在别人的计算机上花时间,让他们负责扩展,维护和升级。 在裸机的时代 - “铁器时代”,若是你喜欢 - 计算能力是一笔资本支出。 这是一项运营费用。网络
在DevOps以前,开发和运行软件本质上是两个独立的工做,由两个不一样的人群执行。 开发人员编写软件,而后将其传递给操做员,操做人员在生产中运行和维护软件(也就是说,为真实用户提供服务,而不只仅是在测试条件下运行)。 就像须要本身建筑物楼层的计算机同样,这种分离的根源在于上个世纪中叶。 软件开发是一项很是专业的工做,计算机操做也是如此,二者之间几乎没有重叠。架构
云计算的革命也引起了使用它的人们的另外一场革命:DevOps运动。实际上,这两个部门的目标和激励措施彻底不一样,每每相互冲突(图1-2)。 开发人员倾向于专一于快速发布新功能,而运营团队则关注长期稳定可靠的服务。当云层出现时,状况发生了变化。分布式系统很复杂,互联网很是庞大。操做系统的技术 - 从故障中恢复,处理超时,平滑升级版本 - 并不与系统的设计,架构和实现分离。分布式
此外,“系统”再也不仅仅是您的软件:它包括内部软件,云服务,网络资源,负载平衡器,监控,内容分发网络,防火墙,DNS等。全部这些事情都密切相关,相互依存。编写软件的人必须了解它与系统其余部分的关系,操做系统的人必须了解软件的工做原理或失败。函数
理解DevOps工具
DevOps偶尔也是一个有争议的想法,不管是那些坚持认为它只不过是现有的软件开发良好实践标签的人,仍是那些拒绝在开发和运营之间增强协做的人。DevOps
其实是存在广泛的误解:职称?团队?方法论?技能?颇具影响力的DevOps做家John Willis已经肯定了DevOps的四个关键支柱,他称之为文化,自动化,测量和共享(CAMS)。另外一种分解方法是Brian Dawson称之为DevOps三位一体:人与文化,流程与实践,工具与技术。单元测试
基础设施代码学习
曾几什么时候,开发人员处理软件,而运营团队则处理硬件和在该硬件上运行的操做系统。如今硬件在云中,从某种意义上说,一切都是软件。 DevOps运动为操做带来了软件开发技能:工具和工做流程,用于快速,灵活,协做地构建复杂系统。与DevOps密不可分的是基础设施做为代码的概念。云计算基础设施能够由软件自动配置,而不是对计算机和交换机进行物理架设和布线。操做工程师已经成为编写自动化云的软件的人,而不是手动部署和升级硬件。交通不只仅是单向的。开发人员正在向运营团队学习如何预测分布式,基于云的系统中固有的故障和问题,如何减轻其后果,以及如何设计降级优雅且安全性低的软件。
云的大规模扩展以及DevOps运动的以代码为中心的协做性质已将运营转变为软件问题。 与此同时,他们也将软件转变为操做问题,全部这些都引起了如下问题:如何在不一样服务器架构和操做系统的大型,多样化网络中部署和升级软件?如何使用基本标准化的组件以可靠且可重现的方式部署到分布式环境?