写点什么

将虚拟化搬到云上:Vagrant 在 AWS 上的实践

2015 年 5 月 06 日

在研发、调试以及多团队合作过程中,开发人员难免会用到虚拟化技术来帮其构建易于复制和重建的环境。需求的牵引使得 Vagrant VirtualBox 以及 VMWare Workstation 等虚拟化相关的产品相继诞生。这些产品很好的满足了企业和个人的需求,实现了安全性、便捷性等方面的功能。而另外一方面,虚拟化技术发展的也带动了云计算的崛起。因其高效、便捷和经济的特性,很多公司纷纷开始使用云平台作为其主要的计算环境。 Docker 等应用容器引擎的出现,更是为开发者提供一个可移植的容器,方便了应用程序的开发和部署。事实上,云计算已经带来了企业在线业务模式的变革。

但是,在诸多好处的同时,目前的基础架构即服务 (IaaS) 云模型也存在问题。它要求软件开发者必须使用虚拟机管理应用程序。对虚拟机映像的要求限制了云使用者的选择,甚至对某些人而言,还成为了本地环境转移到云平台的一大障碍。为了试图解决该问题,嵌套虚拟化的概念被提出。

所谓嵌套虚拟化就是在虚拟机里再运行虚拟机。对云用户来说,嵌套虚拟化就意味着虚拟机的格式可以与云平台无关。如果能够支持嵌套虚拟化,云平台就可以演变成了高度灵活的虚拟化基础架构,为用户提供更多自由使用的空间。那么,究竟有没有可能在现有框架下,实现类似嵌套虚拟化的功能呢?

针对该问题,GigaSpaces 的 Michael Sverdlik 提供了一种解决方案。本文接下来以云应用的编排系统 Cloudify 和最流行的云平台 AWS 作为例子,详细介绍他如何一步一步的创建 v2v(虚拟到虚拟)机器,及如何创建可以上传到任何 AWS 环境的 VMDK 磁盘镜像。

首先,用户需要利用基于 Ruby 的 Vagrant 工具。该工具主要用于创建和部署虚拟化开发环境,其以 VirtualBox VMware 或者 AWS 等虚拟机为底层,以上层 Chef 等工具来完成自动化安装和配置软件的工作。利用该工具,用户生成一个 Vagrantfile 和一个已经在 VirtualBox 镜像上预装 Cloudify Manager 的 Vagrant box。然后,利用 Vagrant 和 VirtualBox 就可以在本地对 Cloudify 进行测试和评估。其过程可以简单概括为:下载 Vagrantfile、把 vagrant 运行起来和利用 Packer 来创建 Vagrant Box 三个部分。作为与 Vagrant 出自相同作者的 Packer,创建镜像只需要根据教程输入命令即可。

接下来,再仔细审视一次有没有可能不使用嵌套虚拟化而解决相应的需求。可能的解决方案包括:直接利用本地物理机器、利用专门的方法来允许嵌套虚拟化但是,这两种方案显然需要额外的花费以及精力。还有一种方法就是,直接把虚拟机磁盘镜像转换为 VMDK 进行使用。关于如何实现物理到虚拟以及虚拟到物理的方法,之前都已经有人实现过。但是,虚拟到虚拟(V2V)究竟能不能实现呢?文章接下来就开始尝试。

所需要的工具和环境包括作为脚本语言的 Python、与 AWS 结合的 Boto API、作为任务执行器的 Fabric、Packer 以及 IaaS 提供商 AWS。具体的实现步骤为:

  1. 在利用 packer 预装的 cloudify 上创建一个源镜像(AMI)
  2. 在 AWS 中利用快照或者源镜像作为一个磁盘来启动一个工作实例
  3. 在工作镜像上,创建一个 raw 镜像卷作为一个文件,然后在其上创建一个 ext4 分区
  4. 把数据从源镜像磁盘中复制到之前创建的 ext4 分区中
  5. 在 ext4 分区上安装 bootloader
  6. 把 raw 镜像转变为 VMDK
  7. 把 VMDK 和一个 OVF 描述符和 vagrant 元数据一起创建一个.box 的压缩包
  8. 上传到 S3
  9. 清除

最后的结果如何,读者可以根据 Github 中提供的脚本进行亲自测试。


感谢徐川对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015 年 5 月 06 日 07:201516
用户头像

发布了 268 篇内容, 共 101.3 次阅读, 收获喜欢 17 次。

关注

评论

发布
暂无评论
发现更多内容

Alibaba开发十年,写出这本“MQ技术手册”,看完我愣住了

互联网架构师小马

Java MQ 消息中间件

产品训练营-第一课作业

释心

Windows DHCP最佳实践(二)

BigYoung

windows Windows Server 2012 R2 DHCP

网络安全产品经理任职要求

让时间说真话

产品经理 网络安全产品经理

产品训练营-作业1

简小一

认识产品经理-通过岗位模型了解自己的发展方向与空间20210119

WooBeyna

类别型特征

Tango

机器学习 七日更

第一周笔记

Ashley.

PM

「产品经理训练营」作业 01

🌟

产品经理训练营

28天瞎写的第二百二十三天:哎哟,我这爆脾气!

树上

28天写作

在线教育产品经理 & 物流行业的产品经理

哈撒啦岛

产品经理 产品经理训练营

对产品岗位的研究和一些看法

Dylan Zhu

第一章 总结

青葵

学习笔记2

产品经理训练营第一课作业

Jobs

产品经理训练营

岗位模型差异

王一凡

产品经理训练营 第一周作业记录

玲玲

产品经理训练营 岗位要求

第一章作业

Kasn

产品经理 产品经理训练营

产品经理训练营--第一章作业

Lucas zhou

产品经理训练营

可恶的爬虫直接把生产机器全部爬挂了!

java金融

Java 爬虫 布隆过滤器 反爬

一文讲弄懂什么是vlan、三层交换机、网关、DNS、子网掩码、MAC地址

作业 - 认识产品经理

Geek_971380

产品经理训练营

DevSecOps如何提高应用程序安全性?

啸天

安全 DevSecOps 应用安全

【并发编程的艺术】JVM体系与内存模型

程序员架构进阶

Java 架构 并发编程 内存 28天写作

作业1

YING꯭YING

产品经理定位

让我思考一会儿

作业一

清醒梦境

创业失败启示录|校园微生活之“极致宣传”

青城

28天写作 创业失败启示录 青城

Dreamed Job?

顾远山

作业 极客大学产品经理训练营 Job Model

产品经理训练营 第一周作业

DB

产品经理训练营

第一章:认识产品经理

陈继坤

产品经理 极客大学认识产品经理

重学JS | 跨域的原因和解决方案

梁龙先森

前端 编程语言 28天写作

演讲经验交流会|ArchSummit 上海站

演讲经验交流会|ArchSummit 上海站

将虚拟化搬到云上:Vagrant在AWS上的实践-InfoQ