如果您的企业正在构造并交付供自己或其他人使用的软件环境,您很可能知道这有多么困难。按照传统方法,您必须收集环境的需求、安装软件、配置每个组件、集成多个组件,然后祈祷一切顺利。这个过程很耗费时间,很容易出错,相当让人抓狂!
许多人并不把安装和配置基本软件环境的任务看作竞争优势;但是,安装和配置这些环境让您能够高效地工作,比如应用程序开发。您明白这种因果关系;同样,许多公司在过去几年里也认识到需要用更好的方法交付软件环境。
由于认识到了这一点,许多公司使用虚拟映像克服传统的环境构造和交付方法的缺点。尽管虚拟映像与传统安装方法相比不太灵活,但是它们让您能够定制环境的安装和(在某种程度上)配置,这抵消了不够灵活这一缺点。
这种方法意味着只需执行安装和配置任务一次。
另外,虚拟映像让您能够快速地交付配置好的环境。只需激活一个虚拟映像,就有了已经安装了必需的组件的环境。
由于有这些明显的好处,虚拟映像的使用量越来越大了;但是,使用量的增加带来了由虚拟映像交付方式导致的新难题。
能够在几分钟内建立起配置好的环境,这让使用虚拟映像成为很有吸引力的提议;另外,创建映像或衍生基本映像相当容易,这导致人们创建了许多映像。
这种增生常常被称为虚拟映像泛滥,它会很快导致软件环境的管理成本增加,所以这显然不是我们想要的结果。因此,公司必须控制拥有的虚拟映像总数 — 这说起来容易,做起来难。
许多时候,映像构建者创建虚拟映像是想让用户只需部署它们,然后马上就可以开始工作。为了实现这个目标,他们构建的映像常常静态地捕捉软件组件和大量配置。尽管这看起来是很自然的做法,但是它有问题,尤其是在配置专门针对很少一部分用例的情况下。如果创建的映像包含只针对某一用例的组件和配置,使用这个映像支持其他场景的可能性就会降低。
这种做法会很快导致映像增生(虚拟映像泛滥)。图 1 在中间件应用环境的虚拟映像的上下文中说明这个问题。
图 1. 提高特异性会导致增生
中间件应用环境这个示例很适合用来讨论虚拟映像难题,因为它们需要多种组件和相关联的配置。如图 1 所示,这些环境包含:
- 操作系统
- 中间件软件
- 应用程序
- 与用户相关的配置
当然可以构建包含专门针对某一用户或用例的所有组件和配置的虚拟映像;但是,如果这样做,几乎毫无疑问最终会创建(并管理)许多映像。
另一方面,可以构建只包含操作系统的映像,但是这会减少给用户带来的价值,因为他们需要安装并配置相当多的其他组件。
最好的方法是在这两个极端做法之间找到一个平衡点。对于为中间件应用环境构建映像,虚拟映像通常包含应用环境必需的所有中间件软件组件。通过不在虚拟映像中包含很多针对特定用户的内容,可以提高映像支持许多场景的可能性,同时有助于把虚拟映像库保持在合理的规模。
尽管这种方式有助于控制虚拟映像的数量,同时保持它们对用户的价值,但是它也有自己的问题。由于不把用户配置直接构建在虚拟映像中,降低了它的可消费性。用户必须激活映像,然后执行一系列配置步骤,之后才能够使用这个环境。根据目标环境的复杂性,这些步骤可能要花费相当多的时间,很难在每次部署时重复。这些问题会让虚拟映像用户灰心,弱化虚拟映像提出的价值主张。
因此,构建有用的可消费的虚拟映像,同时把虚拟映像库保持在合理的规模并不是容易的任务。不容易,但是并非不可能实现。
请记住,使用虚拟映像的主要难题是,把虚拟映像库保持在可管理的规模,同时仍然向映像用户提供相当大的价值。为了解决这个难题,必须采用系统化的方法构建虚拟映像。为了实现这种方法,必须问一些基本问题:
- 什么种类的内容应该直接安装在虚拟映像中?
- 如何处理没有直接安装在虚拟映像中的必需的内容,比如用户配置?
构建任何虚拟映像的第一步都是确定要放在映像中的内容。这并不总是很容易,而且对于是否应该把某一内容直接安装在映像中,并不总是有明确的对错。
一般来说,属于以下类别的内容适合直接映像安装:
- 大组件
- 应该把操作系统和其他相当大的软件直接安装在虚拟映像中。如果需要在激活虚拟映像之后安装这些组件,就会减慢交付环境的总体速度,因此会削弱虚拟映像的许多益处。
- 常用组件
- 确定最常用的东西(如果不是软件环境的全部内容的话),比如杀毒软件、监视代理或办公工具。把这些组件安装在映像中,不但可以帮助用户节省时间,还可以降低他们建立非标准或不兼容的环境的可能性。
- 花费时间很长的配置
- 需要花费相当长时间的配置常常适合直接放在映像中。这让用户可以跳过这些配置操作,更快地开始工作。
把属于这三类的内容放在虚拟映像中,就可以加快环境的交付,降低用户的配置负担。
显而易见,这三类内容只是虚拟映像用户所需的东西的一部分。尤其是,它们不能解决以下问题:
- 用户必须应用专门针对他们的使用场景的配置。
- 对于每次部署,必须修改某些配置(例如 IP 地址)。
不应该也不可能把这类配置静态地放在映像中,但是这并不意味着不应该尝试解决此问题。一种方法是提供用法说明甚至脚本,指导用户完成必要的激活后配置步骤。这并不是理想的解决方案,因为映像部署者需要手工执行部署后步骤。
不必要求用户执行部署后配置步骤,更好的方法是构造动态的虚拟映像。动态虚拟映像的基础是它们包含一套特殊的激活脚本:这些脚本执行在每次部署映像时需要完成的动态配置活动。这可以包括更新 IP 地址、对以前安装的软件执行配置操作、安装小的内容和任意数量的其他操作。
映像需要用一个激活框架控制这些脚本。这个激活框架:
- 确保自动地调用脚本。
- 提供把用户输入传递给脚本的方法。
图 2 说明这种映像构建方法。
图 2. 构建映像的有效方法
如图 2 所示,在构建映像时,首先把基本软件内容安装在虚拟映像中。接下来,提供由激活框架(比如支持 Open Virtualization Format 的框架)控制的动态配置脚本。
激活框架会自动地调用脚本,定义让用户在部署时提供输入的机制。这种方法巧妙地平衡了静态内容和动态配置。因此,这会帮助把虚拟映像库保持在可管理的规模,同时并不牺牲映像支持用户需求的能力。
描述构建虚拟映像的概念性方法是一回事,实现这样的方法是另一回事。需要通过工具帮助实现它,这些工具至少必须解决以下问题:
- 如何使用现有的企业资源,比如服务器和存储?
- 在构建软件环境时,如何处理组织内典型的责任划分?
- 如何有效地分隔映像的安装和配置任务?
IBM 提供一种称为 IBM Image Construction and Composition Tool (ICCT) 的新的 alphaWorks 技术,它可以解决这些问题。下面讨论 ICCT 如何帮助您建立构建定制虚拟映像的系统化方法,并在希望放在虚拟映像中的静态内容和动态配置之间保持巧妙的平衡。
IBM Image Construction and Composition Tool
IBM Image Construction and Composition Tool 工具用于构建要部署在云环境中的虚拟映像。在 VMware 云中作为本地虚拟机安装此工具,然后把它连接到云,作为创建新映像的构建环境使用。
此工具连接到本地 VMware 云或者利用 IBM Smart Business Development and Test on the IBM Cloud,从而与您现有的企业资源集成,这让您能够利用现有的服务器和存储,使用它们作为自己的云提供者。
要想使用此工具创建映像,首先要安装一个操作系统并用软件内容(称为包 )定制它,然后生成新的映像包。
在此工具中,多个用户可以提供用于构建映像的内容。例如,操作系统专家可以根据公司认证的标准操作环境创建操作系统定义;软件专家可以定义包,在其中封装所需软件内容的安装和配置操作。这样,映像构建者就可以把必需的操作系统和软件组件组合起来,而不需要深入了解操作系统或软件安装。
通过让这些任务(定义操作系统、创建软件包和构建映像)相互独立,可以简便地把组织现有的责任和技能映射到映像构建领域:
- 操作系统专家主要关注操作系统层。
- 软件专家主要关注在操作系统上添加组件。
- 映像构建者主要关注组合在企业云中创建新部署所需的操作系统和软件组件。
在 IBM Image Construction and Composition Tool 中,可以管理软件的安装和配置任务。
在用此工具创建基本操作系统映像时,它包含的激活框架可以动态地分隔安装时操作和部署时(配置)操作。
在用此工具定义软件包时,相互独立地提供安装和配置任务。安装任务在构建映像时运行一次,而配置任务在每次部署映像时都要运行。分隔安装和配置任务让我们能够减小映像库的规模并简化映像管理。
在下一节中,我们详细研究映像构建过程(创建基本操作系统、定义软件包和生成映像包),解释此工具中的主要工作流如何帮助您构建一致的定制虚拟映像,为安装和用户配置任务提供可管理的分隔。
图 3 提供此工具支持的交互的概况。
图 3. Image Construction and Composition Tool 中的映像构建流
在使用此工具生成定制的映像之前,需要安装并配置它。在 alphaWorks 上作为虚拟机提供此工具,需要在本地 VMware ESX 服务器上安装并激活它。需要访问系统管理程序或 IBM Smart Business Development and Test on the IBM Cloud。这些资源(或云提供者)为此工具提供一个环境,可以在其中实例化操作系统并安装定制的包内容。
注意:alphaWorks Image Construction and Composition Tool 支持构建用于部署到 VMware 环境或 IBM Smart Business Development and Test on the IBM Cloud 中的 RedHat Linux 映像。
映像构建总是先从操作系统开始。对于 VMware ESX 映像,需要根据组织的操作系统需求构建自己的定制操作系统。可以使用此工具按两种方法之一指定如何创建基本操作系统:
- 使用一个 ISO 和 kick-start 文件。
- 以一个已经安装了操作系统的虚拟机作为基础。
图 3 中的步骤 1 到 3 说明这个工作流:
- 指定 ISO 和 Kickstart 或操作系统虚拟机。
- 创建 VM,安装 OS。
- 捕捉基本 OS 映像。
通过把操作系统安装和配置步骤整合在工具的一个区域中,您可以利用组织现有的技能构建符合公司标准的操作系统层,保证在部署的环境中操作系统层的一致性。如果使用 IBM Smart Business Development and Test on the IBM Cloud,那么可以以 IBM Cloud 中现有的映像作为基础,把操作系统定义导入此工具中进行进一步定制。
除了定义核心操作系统内容和配置之外,操作系统映像还必须包含激活框架,它允许在部署时对操作系统进行定制。这包括分配 IP 地址、配置用户账号、设置网络接口等等。工具提供一个激活框架并把它包含在虚拟映像中。
作为映像保存标准操作系统配置之后,可以使用它作为基本映像,在它上面安装定制的软件包。
在此工具中,包描述可以在映像中使用的软件。包规格说明定义软件的必备条件以及用于安装、配置和复位软件的任务。
创建包需要对软件的工作方式有深入的了解,通常由软件专家来完成,见 图 3 中的步骤 4(4. 创建包)。
软件专家可以在包中为包含的软件定义需求、安装信息、配置任务和复位操作。最好把很大或常用的虚拟映像组件定义为软件包。中间件产品(比如 Application Server Community Edition 或 IBM License Metric Tool Server)以及安全遵从性监视软件或杀毒软件等其他常用软件都很适合定义为包。
在此工具中定义包时,用户界面会明确地分隔安装和配置参数。
安装参数
包的安装数据描述在把包安装到虚拟映像中时应该运行的任务。安装任务只在构建映像时运行一次,然后安装的软件就成为映像的永久组件。一般来说,应该把花费时间长或长时间运行的任务定义为安装任务。
典型的安装任务包括把安装二进制代码复制到映像中和运行软件的安装程序。
可以把安装数据参数化并导出这些参数,作为可以在构建映像时配置的输入。例如,如果需要在构建映像时配置一个软件的安装位置,那么定义一个安装位置参数,然后在包的安装脚本中使用这个属性的值。通过把安装数据参数化,可以根据不同的安装需求用单一软件包构建多个定制映像。
配置参数
包定义的配置部分为包中预先安装的软件提供部署时配置选项和激活脚本。安装任务在构建映像时运行,而软件包的配置任务在每次部署映像时运行。
如果映像部署者需要在部署的软件中定制某些配置参数,例如管理密码或端口定义,可以在包定义中把这些参数标为可配置的。
在部署映像时,部署者可以提供这些配置参数的值,激活引擎中由包提供的脚本可以使用指定的参数定制软件。通过结合使用参数和配置脚本,可以在部署时定义实例化的软件配置文件,而不必把定制的配置放在映像中。
这种动态的配置功能会显著减少需要创建的定制映像的数量,大大降低管理虚拟映像库的成本。
在此工具中,包为捕捉和分隔软件的构建时操作和部署时任务提供了灵活的机制。由于把软件专家的知识直接封装在包中,使用软件包的映像构建者不必是安装和配置软件的专家。映像构建者只需选择相关的操作系统和软件包,把它们组合起来创建定制的虚拟映像。
IBM Image Construction and Composition Tool 生成 Open Virtual Format Archive (OVA) 映像,可以使用 WebSphere CloudBurst Appliance 或 Tivoli® Provisioning Manager 部署这些映像。此工具还在 IBM Smart Business Development and Test on the IBM Cloud 上创建新映像。
在创建新的映像包时,映像构建者执行的一般步骤包括:
- 扩展一个基本操作系统映像
- 用软件包定制此映像
- 在指定的云提供者中同步此映像
- 检查映像配置
- 捕捉映像供以后部署时使用
图 3 中的步骤 5 到 10 说明这个过程。因为操作系统专家和软件专家已经在工具中捕捉了他们的知识,所以映像构建者能够快速轻松地把操作系统映像与软件包组合起来,他们不需要深入了解如何配置这些组件。
要想构建新的映像,首先选择一个基本操作系统定义,然后扩展它以添加软件包(步骤 5)。软件包可以包含参数化的安装数据。在映像扩展阶段,可以定制使用的包的任何可配置安装参数,从而满足要构建的映像的需求。
在保存映像的操作系统和包配置之后,需要同步映像(步骤 6)。在映像同步期间,工具把操作系统映像复制到云提供者并在新的虚拟机中启动操作系统。然后,工具开始执行包含的软件包的安装任务。请记住,安装任务只在此时运行。工具在此时把配置任务构建到映像中,但是在部署映像之前并不运行它们。
同步过程完成之后,最好登录虚拟机,检查是否正确地安装了在包中定义的软件。
同步完成之后,捕捉新的映像(步骤 7):
- 如果使用 IBM Smart Business Development and Test on the IBM Cloud 作为云提供者,就把捕捉到的映像标为 complete(步骤 10)。现在,可以在您的私有 IBM Smart Business Development and Test on the IBM Cloud 目录中找到它,可以用它进行部署。
- 如果使用本地的 VMware ESX 云提供者,就从工具以 OVA 包的形式导出捕捉到的映像(步骤 8 和 9)。这个新的 OVA 包含把映像导入 WebSphere CloudBurst 或 Tivoli Provisioning Manager 所需的所有数据,所以可以把它部署到自己的私有云中。
无论目标云环境是什么,在实例化这些映像时,都有机会对在映像的软件包中标为可配置的配置数据进行定制。
在本文中,我们讨论了一种更好的构建映像的方法。关键是要把映像库保持在可管理的规模,同时向大多数用户提供最大的价值(尤其是使用映像的广泛程度)。我们推荐的方法首先判断哪些内容应该直接安装在虚拟映像中,哪些不应该;另外,我们提供了动态地配置虚拟映像中安装的内容的方法。从本质上说,我们讨论了如何构建可重用性非常高的定制云映像;这样的映像可以显著减少用户承担的工作,由此提供最大的价值。
我们建议用 Image Construction and Composition Tool 作为解决方案。此工具为构建有用、可消费的虚拟映像提供一种简单明了的过程,从而帮助把虚拟映像库保持在可控的规模。可以使用它把大的复杂的内容直接放在映像中,比如经过认证的操作系统和必需的其他内容。此工具构建的映像提供一个激活引擎,它可以执行丰富的部署时定制。根据映像及其软件包中定义的选项,在激活期间,您可以为环境提供定制参数。这让一个虚拟映像在激活期间可以采用许多不同的形式,因此可以用一个映像满足许多使用场景的需求。
学习
-
作者提供两篇关于 ICCT 的简短的博客文章:
-
观看精彩的 YouTube 视频:如何使用 ICCT 工具创建完全自定义的虚拟映像。
-
在 developerWorks 云开发人员资源 中,寻找应用程序和服务开发人员构建云部署项目的知识和经验,并分享自己的经验。
-
可以在 developerWorks 上的 Tivoli 和 WebSphere 区域中找到补充本文的更多 developerWorks 参考资料。
-
后续研究:了解如何访问 IBM Smart Business Development and Test on the IBM Cloud。
- 加入云计算讨论组,了解和讨论云计算的最新技术、解决方案、趋势等内容。
获得产品和技术
-
可以在 IBM alphaWorks 上找到 针对 IBM Image Construction and Composition Tool 的下载和文档。
-
查看可以在 IBM Smart Business Development and Test on the IBM Cloud 上使用的 产品映像。
讨论
-
加入 IBM Image Construction and Composition Tool 论坛,提出关于使用此工具的问题(并回答别人的问题)。
-
阅读 developerWorks 上所有精彩的云博客。
- 加入 developerWorks 中文社区。查看开发人员推动的博客、论坛、组和维基,并与其他 developerWorks 用户交流。
