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