最近 IT 行业有很多围绕云编排的议论,而且许多人想知道云编排到底是怎么回事。本文将探索云编排的概念,以及它将如何融入云计算的大发展趋势中。我将分析各种编排工具并介绍它们之间的区别,使您能够更好地了解有哪些可用的选择。
首先,了解一些背景知识很重要。在虚拟化和云计算出现之前,所有流程都是手动执行的。
众所周知,3 种最常见的云服务模型是软件即服务 (SaaS)、平台即服务 (PaaS) 和基础架构即服务 (IaaS)。图 1 演示了 IaaS 与虚拟化的密切关系(事实上,虚拟化是 IaaS 的一部分)。可以看到,IaaS 为云服务提供了基础架构来准备服务、存储、网络、操作系统等;这类似于硬件虚拟化,后者在数据中心中提供虚拟机。
图 1. 虚拟化和云计算
设置环境的手动方法包含类似下面的步骤:
- 等待批准
- 购买硬件
- 安装操作系统
- 连接并配置网络
- 获取 IP
- 分配存储
- 配置安全性
- 部署数据库
- 连接后端系统
- 将应用程序部署在服务器上
此方法面临的挑战包括管理代理程序,比如备份和监视、连网和配置。
大约 10 年前,出现了虚拟化技术,并消除了许多手动步骤。使用虚拟机监控程序和虚拟机来部署应用程序,这有助于降低硬件成本。但是,虚拟机监控程序可能很难管理,所以引入了虚拟机监控程序管理程序来帮助消除许多手动步骤,比如购买硬件、安装操作系统和分配存储。
在这之后不久,云计算出现了,并帮助解决了前一种方法面临的许多问题。几乎手动方法中的所有步骤都能自动化,这大大减轻了负责基础架构的人员的负担。云计算使得企业能够从任何地方以服务形式访问软件。这有助于减少人工费用,这笔费用通常比硬件成本更高。云始终可用,宕机时间为零,而且所有工作都可以很快完成。不需要等待批准 — 这真正是一种 DIY 方法。
云编排
云编排是在云环境中部署服务的过程的端到端自动化。更具体地讲,它是复杂计算机系统、中间件和服务的自动化的安排、协调和管理—所有这些都有助于加速 IT 服务的交付,同时减少成本。它用于管理云基础架构,后者向客户提供和分配需要的云资源,比如创建虚拟机、分配存储容量、管理网络资源,以及授予云软件访问权。通过使用合适的编排机制,用户可在服务器上或任何云平台上部署和开始使用服务。
云编排涉及 3 个方面:
- 资源编排负责分配资源
- 工作负载编排负责在资源之间共享工作负载
- 服务编排负责将服务部署在服务器或云环境中
图 2 演示了云编排如何自动化所有类型的云中的服务 — 公共、私有和混合云。
图 2. 云编排
许多人认为编排和自动化是同一回事,实际上编排更复杂。自动化通常专注于一个任务,而编排处理的是端到端流程,包括管理所有相关服务,负责保证高可用性 (HA)、部署后期工作、故障恢复、扩展等。自动化通常在特定任务的上下文中讨论,而编排指的是流程和工作流的自动化。基本上讲,编排是对自动化的自动化,具体地讲,是自动化在特定机器上执行的任务的顺序,尤其是存在各种各样的依赖关系的地方。
为什么您应选择编排?
您在上一节中已经看到,设置环境的手动流程涉及多个步骤。使用编排器工具,可以轻松地快速配置、准备、部署和开发环境,集成服务管理、监视、备份和安全服务 — 而且所有这些步骤都是可重复的。
编排的另一个优势是,它使您的产品能够应用在更广泛的云环境中,使用户能够更轻松地部署它们。最终,您可以让更多的受众知道您的产品,潜在扩大公司的创收机会。
编排工具
您将在以下几节中看到,存在各种各样的编排工具和技术,它们分别适合不同的情形。
Chef 和 Puppet
Chef 是一个强大的自动化平台,它将复杂的基础架构转换为代码,并给服务器和服务注入了活力。Chef 自动化了整个网络中的应用的配置、部署和管理。
Chef 使用操作手册 (cookbook) 来确定应如何配置每个节点。操作手册包含多个秘诀;一个秘诀是使用 Ruby 语言编写的特定服务的自动化脚本。Chef 客户端是一个代理,它在节点上运行并执行配置节点的实际任务。Chef 可管理任何可运行 Chef 客户端的实体,比如物理机器、虚拟机、容器或基于云的实例。Chef 服务器是所有配置数据的中央存储库。Chef 客户端和 Chef 服务器组合使用了公钥和私钥,以一种安全的方式进行通信,这可以确保 Chef 服务器仅响应 Chef 客户端发出的请求。您也可以选择安装名为 chef-solo 的独立客户端。
Puppet 类似于 Chef。它需要在目标节点上安装一个主服务器和客户端代理,并提供一个安装独立客户端(等效于 chef-solo)的选项。您可以使用 Puppet 命令下载并安装部署模块。像 Chef 一样,Puppet 提供了一个付费企业版,该版本提供了报告和编排/推送部署等附加功能。
但是,尽管 Chef 和 Puppet 都执行相同的基本功能,但它们的方法不同。Chef 似乎更加集成化和整体性,而 Puppet 由多个服务组成。这使 Chef 更容易安装、运行和管理。二者都有自己的优缺点,所以您需要评估哪种选择最适合您的操作团队和基础架构开发工作流。
以下是这两种平台的特征比较:
- Puppet 适合需要指定配置(比如依赖关系)的系统管理员,而 Chef 适合实际编写部署代码的开发人员。
- Puppet 更多地依赖于自己的特定于域的语言 (DSL) 来定义配置规则,而 Chef 的 DSL 只是 Ruby 的补充,所以大部分 Chef 菜谱 (recipe) 都是使用标准 Ruby 代码编写的。
- Chef 拥有一个综合性的(第三方)安装程序,该程序使得安装比 Puppet 容易得多。
- Chef 主要用于操作系统级的自动化,比如部署服务器、补丁和修复问题。Puppet 主要用于中等的自动化,比如安装数据库和启动 Apache。
- Chef 似乎更适合以开发人员为中心的操作团队,而 Puppet 适合拥有更少 Ruby 编程经验的更传统的操作团队。
- 一旦掌握了它陡峭的初始学习曲线,Chef 就会带来比 Puppet 更强的功能和灵活性。
OpenStack
OpenStack 是一个免费的、开源的云计算软件平台,主要用作基础架构即服务 (IaaS) 解决方案。它包含一系列相互关联的项目,这些项目控制着整个数据中心的处理、存储和网络资源池;用户通过基于 Web 的仪表板、命令行工具或 RESTful API 来管理所有这些资源。OpenStack.org 根据 Apache 许可发布了该平台。
图 3. OpenStack 的组件
OpenStack 是作为 Rackspace Hosting 和 NASA 的一个联合项目于 2010 年启动的。目前,它由 OpenStack Foundation 负责管理,后者是一个推广 OpenStack 软件及其社区的非营利公司实体。200 多家公司加入了该项目,包括 IBM、Canonical、Cisco、Dell、EMC、Ericsson、Hewlett-Packard、Huawei、Intel、Mellanox、Mirantis、Oracle、Red Hat、SUSE Linux、VMware 和 Yahoo,等等!
OpenStack 的主要组件包括 Nova(计算)、Cinder(块存储)、Glance(映像库)、Swift(对象存储)、Neutron(网络)、Keystone(身份)和 Heat(编排工具)。本文不会详细介绍所有这些组件,我们仅重点介绍一个特别值得注意的组件:Heat。
Heat
Heat 是来自 OpenStack 的一种基于模式的编排机制,它被称为 Orchestration for OpenStack on OpenStack (OOO) 项目。Heat 提供了一种基于模板的编排机制来描述云应用程序,它执行合适的 OpenStack API 调用来生成能正常运行的云应用程序。该软件将 OpenStack 的其他核心组件集成到一个单文件模板系统中。模板支持创建大多数 OpenStack 资源类型(比如实例、浮动 IP、卷、安全组和用户),还支持更多高级功能,比如实例高可用性、实例自动扩展和嵌套堆栈。
Heat 的工作原理
您可以使用 Heat 来管理 OpenStack 中的所有软件(比如设置服务器,添加卷,管理网络等),而无需编写脚本。为此,您可以创建一个 Heat 模板来指定需要何种基础架构。如果需要在以后对现有服务执行任何进一步更改,您可以仅修改 Heat 模板,Heat 引擎将在您重新运行该模板时执行必要的更改。当它完成更改后,您可以清理并释放资源,这些资源可供其他任何需要它们的人使用。
图 4. Heat 的工作原理
在图 4 中可以看到,将 Heat 模板传递给 Heat 引擎,会创建一个在 Heat 模板中指定的资源堆栈。
Heat 在编排层中位于其他所有 OpenStack 服务的上方,能与其他所有组件的 IP 进行通信。Heat 模板生成一个堆栈,堆栈是 Heat 中的基本度量单位。您编写的 Heat 模板包含许多资源,每种资源是 OpenStack 中的一个对象并具有一个对象 ID。Heat 创建这些对象并跟踪记录它们的 ID。
您还可以使用嵌套堆栈,它是 Heat 堆栈中一个指向另一个 Heat 堆栈的资源。这就像一个堆栈树,其中的对象相互关联,它们的关系可从 Heat 模板推断出来。这种嵌套功能使不同的团队能够独立开发 Heat 堆栈,并在以后合并它们。
Heat 的主要组件是 Heat 引擎,Heat 引擎提供了编排功能。
HOT 规范
Heat 编排模板 (HOT) 是 Heat 自有的,使用 YAML 表达。这些模板包含:
- 资源(必填字段)是您需要创建的 OpenStack 对象,比如服务器、卷、对象、存储和网络资源。这些字段在 HOT 模板中是必填的。
- 参数(可选)指示了资源的属性。声明这些参数比硬编码这些值更方便。
- 输出(可选)指示了在运行 Heat 模板后创建的输出,比如服务器的 IP 地址。
每个资源包含:
- 引用 — 用于创建嵌套堆栈
- 特性 (property) — 资源的输入值
- 属性 (attribute) — 资源的输出值
Juju
Juju 是 Canonical 开发的一个开源自动服务编排管理工具,Canonical 是 Ubuntu 操作系统的开发者。它使您能够在各种各样的云服务和服务器上部署、管理和扩展软件和服务。Juju 可显著减少部署和配置产品的服务的工作负载。
图 5. 使用 Juju 部署的服务
优势
Juju 是在所有主要的公共云和容器上建模和部署应用程序或解决方案的最快方式。它有助于将部署时间从几天缩短至几分钟。Juju 适用于现有的配置管理工具,而且可非常轻松地扩展或精减工作负载。要为产品部署 Juju charm,无需提前具备应用程序堆栈方面的知识。Juju 包含所有主要公共云的提供程序,比如 Amazon Web Services、Azure 和 HP,以及 OpenStack、MAAS 和 LXC 容器。还可以使用 Juju 中提供的手动提供程序将 Juju 部署在 IBM SoftLayer 上,所以任何人都可以结合使用 Juju 和 SoftLayer,只需要手动准备机器,然后告诉 Juju 这些机器的位置。LXC 容器上的本地提供程序允许您在自己的笔记本电脑上重新创建类似生产部署的环境。它还提供了一个快速、简单的环境来在本地机器上测试部署。使用软件包,用户只需几秒钟即可部署整个云环境,这可以节省大量时间和精力。
Charm
Juju 利用了 charm,charm 是简化特定部署和管理任务的开源工具。charm 是一组可使用任何语言编写的脚本,它根据某些条件来触发挂钩。部署服务后,Juju 可定义服务之间的关系,并向外部世界公开一些服务。Charm 为 Juju 赐予了力量。它们封装应用程序配置,定义服务部署方式、服务与其他服务的连接方式和服务的扩展方式。Charm 定义服务的集成方式,以及它们的服务单元如何对分布式环境中的事件做出反应,这些反应由 Juju 编排。
Juju charm 通常包含通过向集群添加机器来水平扩展服务所需的所有智能,保留了与依赖于该服务的所有服务的关系。这使您能够打造(并扩展和精减)您想要的服务,特别是在云上。Juju 提供了一个命令行接口和一个直观的 Web 应用程序,用于设计、构建、配置、部署和管理您的基础架构。Juju 自动化了日常任务,使您能够集中精力创建令人惊叹的应用程序。
Charm 很容易共享,而且 Juju charm 商店 中已评级和审核了数百个 charm。
关系和其他功能
Juju 允许通过关系来迅速集成服务。这些关系展示了从用户那里抽象出集成服务的复杂性。Juju 关系是对服务应如何相互交互的松散分类的定义。这些定义可通过接口来处理。Juju 仅基于接口名称来确定可以关联哪些服务。
Juju 中的一些高级功能包括:
- Juju Compose 使用分层方法从现有 charm 构建新 charm,以便大大减少常见任务所需的返工。更低层的功能会被新 charm 继承。
- 从属 charm 是可作为从属或主要 charm 而分组到一起的相关 charm。主要 charm 是最重要的 charm,从属 charm 不能独立使用,所以它与主要 charm 一起部署。
- 领导挂钩是 Juju 提供的在集群环境中选择领导者/主人的自动化机制。
Charm 商店
Juju 包含一组 charm,使您能够在 Juju 中部署任何喜欢的服务。软件包是一个设计为协同运行的 charm 集合。因为 charm 和软件包是开放的,而且由社区负责维护,所以它们代表着一组部署这些服务的最佳实践。charm 和软件包都包含在我们统称的 charm 商店中。
要让您的 charm 被列为 charm 管理团队推荐的 charm,您需要经历严格的审核流程,该团队会评估该 charm,测试它,并在不同的配置模式下针对所提供的服务来部署和运行测试。
Docker
Docker 是一个快速开发、发布、运行和交付应用程序的开放平台。借助 Docker,用户可将您的应用程序与基础架构分离,像对待托管应用程序一样对待您的基础架构。Docker 可帮助您更快发布代码,更快测试,更快部署,并缩短编写代码与运行代码之间的间隔时间。
为此,Docker 将一个轻量型的容器虚拟化平台与帮助管理和部署应用程序的工作流和工具相结合。在本质上,Docker 提供了一种方法,在隔离的容器中安全地运行几乎任何应用程序。这使您能够在主机上同时运行许多容器。容器的轻量特性(它的运行不会给虚拟机监控程序增加额外的负担)使您能够更充分地利用您的硬件。
Docker 容器将一个软件包装在一个完整的文件系统中,该文件系统包括运行该软件所需的所有资源:代码、运行时、系统工具、系统库 — 您可安装在服务器上的任何东西。这可保证它将以相同状态运行,无论它在何种环境中运行。
Docker 是:
- 轻量型的— 在一个机器上运行的所有容器共享相同的操作系统内核,所以它们会迅速启动并更高效地利用 RAM。映像是在分层文件系统中构建的,所以它们可共享相同的文件,使磁盘的使用和映像的下载变得高效得多。
- 开放的— Docker 容器基于开放标准。这使它们能够在所有支持每种基础架构的主要 Linux 发行版和 Microsoft 操作系统上运行。
- 安全的— 容器将应用程序相互隔离且与底层基础架构隔离,同时为应用程序提供了一个附加的保护层。
对比容器与虚拟机
每个虚拟机都包含应用程序、必要的二进制程序和库,以及一个完整的来宾操作系统 — 所有这些可能占用数十 GB 的空间。容器包含应用程序和它的所有依赖关系,但与其他容器共享内核。它们作为隔离的进程在主机操作系统上的用户空间中运行。而且它们不依赖于任何特定基础架构:Docker 容器可在任何计算机、任何基础架构和任何云中运行。容器与虚拟机的关键区别仅在于,虚拟机监控程序抽象化了整个设备,而容器仅抽象化了操作系统内核。这意味着有一件事是虚拟机监控程序能做而容器无法做到的,那就是使用不同的操作系统或内核。
图 6. 对比容器与虚拟机
优势
Docker 容器提供了许多优势,包括:
- 更快地交付应用程序— Docker 对开发生命周期有极大的帮助。它还使您能够在包含应用程序和服务的本地容器上进行开发。
- 部署和扩展更容易— Docker 的基于容器的平台支持高度可移植的工作负载。它们可在开发人员的本地主机上、在数据中心中的物理机器或虚拟机上,或者在云中运行。您可以使用 Docker 快速扩展或精减应用程序和服务。
- 实现更高的密度和运行更多工作负载— Docker 是轻量型和快速的。它为基于虚拟机监控程序的虚拟机提供了一种可行、富有成本效益的替代方案。这在高密度环境中特别有用,比如构建您自己的云或平台即服务。但是,它对您希望更充分利用已有资源的中小型部署也很有用。
- 消除了环境不一致性— 通过将应用程序与它的配置和依赖项包装在一起,并作为容器发布,应用程序始终将按照设计在本地或另一个机器上运行。
- 增强开发人员的创造力— Docker 容器的隔离能力解放了开发人员,使他们无需仅使用经过批准的语言堆栈和工具。开发人员可使用最适合其应用程序服务的语言和工具,而无需担心会导致冲突。
- 加速开发人员的入职培训— 停止浪费时间尝试设置开发人员环境,建立新实例,以及复制生产代码,以便在本地运行。借助 Docker,您可以轻松地复制您的实际环境,并在任何运行 Docker 的新端点上运行它们。
Dockerfile
Dockerfile 是一个文本文档,包含用户可在命令行上调用来组装映像的所有命令。使用 docker build
,您可以创建一个自动化的编译版来连续执行一些命令行指令。Docker 可从 Dockerfile 读取指令来自动构建映像。
Docker Hub
Docker Hub 是来自 Docker 的一个云托管服务,它提供了公共和私有内容登记功能。它使您能更轻松地就关键内容与更庞大的 Docker 社区或您自己的团队合作,或者通过构建工作流来自动化您的应用程序。
比较云编排工具
表 1 并列比较了本文中介绍的各种工具:
表 1. 比较云编排工具
Chef | Puppet | Heat | Juju | Docker |
---|---|---|---|---|
主要用于自动化部署。最初,它主要用在操作系统级别上,用于执行服务器、补丁和修复程序部署等工作。后来,它被用于执行安装中间件等工作。 | 最初,它被用于在中间件级别上执行安装数据库和启动 Apache 等工作,探索如何使用 API 来执行所有工作。随着时间的推移,它的用法延伸到了操作系统级别的安装。 | 来自 OpenStack 的编排机制。 | (仅)针对 Ubuntu 的基于模式的服务层(自动化)。 | 同时还被用作虚拟化技术和编排工具。 |
更适合以开发人员为中心的操作团队。 | 适合具有较少 Ruby 编程经验的更传统操作团队。 | 编排 OpenStack 上的所有工作。主要针对基础架构,Heat 使用 Chef/Puppet 来实现安装。 | 可在所有流行的云平台上运行 — Ubuntu 本地机器、裸机等 | 一个开放平台,使开发人员和系统管理员能够构建、发布和运行分布式应用程序。 |
使用 Ruby 代码编写菜谱的过程,开发人员非常熟悉 Ruby。Chef 陡峭的学习曲线在大型企业中通常被认为存在风险,可能很难在大型团队中积累和保留技能。 | 学习曲线没有那么陡峭,因为 Puppet 主要由模型驱动。 | |||
一旦掌握了陡峭的初始学习曲线,Chef 就会带来比其他工具更强大的功能和更高的灵活性。 | Puppet 是一款比 Chef 更成熟的产品,拥有更大的用户群。 |
结束语
本文笼统地概述了最流行的云编排机制,以帮助您比较和对比各种选择,确定哪种选择最能满足您的需要。我利用了我自己在学习这些技术时获得的经验,您可以根据相应情况来更深入地探索它们。下面的相关主题链接可帮助您开展探索。
# 转自:http://www.ibm.com/developerworks/cn/cloud/library/cl-cloud-orchestration-technologies-trs/index.html