本文译自Steve Jin的博客Cloud Architecture Patterns: VM Template,纯粹练练英语顺便熟悉熟悉技术。因为英语水平和表达能力有限,如果有什么错误,欢迎大家指出……
意图:
使用模板将虚拟机创建过程标准化
类型:
创建模式
问题:
通过正确的安装软件并配置参数来创建虚拟机是比较复杂的,你可以使用KickStart之类的工具自动安装操作系统和必要的软件。但是配置系统如环境参数很繁琐,可能花费很长时间。
随着虚拟化的普及,远比以前为多的虚拟机被开发出来(当然也有很多虚拟机过时被淘汰),每个虚拟机都从头开始安装并不是一个理想的解决方案。
解决方案:
虚拟化突出了创建虚拟机问题的同时,也提供了简单的解决方案,即所谓的“虚拟机模板”。你可以拣选并配置你要放入模板的软件,并当它需要的时候就将之克隆到一个新的实例,既方便又快捷。
定制
这样现在的问题就变成了如何个性化定义被克隆的虚拟机——你显然不能针对每一个细微差异(例如不同的IP地址、虚拟设备、磁盘空间等等)都创建新的虚拟机模板。这些细微差异都能体现出了,但是不依赖于虚拟机模板而是由虚拟机管理程序提供。当前各个虚拟机管理程序都不尽相同,但是在基本功能上没什么区别。
以下情况可能会比较复杂:
1. 你有大量不同的软件组合,很难提取单一模板。你当然可以制作一个多合一万能模板,包括所有软件的超集。这显然易于管理,但是每个虚拟机都要消耗额外的存储空间,更糟糕的是多余的软件可能影响系统的稳定性、可靠性和安全性。
2. 你必须升级和修补软件。为每个补丁和升级创建新模板,如果你每次克隆最近的一个模板,就很容易操作了。但是这可能意味着:每次打补丁或升级你都必须测试并确定所有的应用。如果你还想同时支持老版本的软件,你就要管理大量的模板并准备更多的存储空间。
模板层次
一般来说存储空间不是大问题,由于各个模板几乎相同,很多先进的存储技术(如重复数据删除技术)都能帮你节省大量的空间,但是无论怎么节省肯定还是会产生更多的成本。
当设计频繁变化的模板时,你要考虑层级结构。在根节点上,你有一个包含常用软件的模板,在根节点之下是一个包含了额外软件的增量模板。当需要提取模板时,将根节点上的模板与增量模板合并,就形成了最终模板,有点儿像面向对象开发中基类与衍生类的继承关系。
层级不限于两层,随着软件的层次可以延伸出更多层。当然,你需要认真分析软件细节才能更好的规划模板层次。
模板创作
尽管可以手动安装所有的软件,还是推荐大家使用脚本或是Puppet、Chef等配置工具自动完成这一过程。这些工具不仅帮你执行大量简单重复的工作,还能帮你避免错误,包括那些你只用一次的模板。配置工具还附赠了一些特别的模板,比如根据校验和实施连续配置……。
这些脚本也能为模板推荐原始数据,包括哪些模板、软件、配置是需要的,哪些是用不上的。你肯定不希望直接从磁盘映像里找那些需要的模板和数据。
结论:
像之前讨论的那样,创建模板有很多好处。但是也增加了管理压力,你要管理更多东西!不只是模板的存储,还包括效率设计、生命周期管理等等。
已知应用:
VMware vSphere有虚拟机模板,可以提供大量个性化虚拟机实例linux、windows。Amazon EC2基于Xen技术有类似的模板AMI,可用于部署新的虚拟机。为标准化虚拟机模板,DMTF已经发布了已被广泛接受OVF标准。
相关模式:
虚拟机工厂:根据模板创建新实例。