如何在EC2 AMI中制作KVM映像

我们有几个裸机服务器(使用debian操作系统),我们运行多台(100多台)KVM机器 – 主要是debian和centos。 那些机器在LVM或分布式文件系统上(moosefs&glusterfs)

是否可以创build一些环境来自动创build我们可以指定的机器:

  • 主机名
  • 磁盘大小
  • 其他(CPU,networking,RAM)是可选的

现在我们每次都是手工制作新机器,因为每次都要重新安装,所以很枯燥。 我们想制作类似于亚马逊机器图片的东西

我安装了proxmox一秒钟,但我还没有看到类似于AMI的function。 但是也许我错了…

我的标准过程(手工)

  1. 我创build一个基本的形象。
    • 从主机angular度来看只是一个.img或.qcow2文件。
  2. 我开始复制基本的形象
  3. 然后,如果需要,我改变图像的大小
    • 对于.qcow2我使用qemu-img转换实用程序。
    • 对于.img我使用dd来追加更多的零在图像的结尾。
  4. 然后我进入virt-manager界面,使用现有的图像创build一个新的虚拟机。 在此我设置了多less处理和内存我需要。
  5. 我启动机器映像,然后
    • 我更改IP地址
    • 我更改主机名
    • 我删除了sshd键来强制sshd生成新的
    • 我调整/分区以使用整个磁盘(如果guest虚拟机映像使用btrfs,这是不必要的)

所有这些都可以通过一个简单的shell脚本来自动完成。 关键是要学习如何使用virsh实用程序来创build虚拟机,确保您的networking接口是网桥,使用btrfs作为guest虚拟机文件系统。 然后,您可以复制映像,装载映像,更改已装载映像的configuration,卸载映像,使用virsh添加vm并运行。

我没有那样做,因为我pipe理的虚拟机很less……实际上我使用KVM来分割两三个非常大的硬件。 那一部分我有点自闭症。 我主张让自己的脚本在这些方面有很高的控制力。

更自动化和用户友好

你正在寻找的是所谓的openstack ,据我所知是非常用户友好的,可以使用KVM,VirtualBox,LXD,Xen,VMWare作为pipe理程序。 一个界面来绑定他们。

我知道它存在。 看起来不错。 Ubuntu服务器有它。 Redhat也是。 但是我从来没有碰过,因为virt-manager对我来说就够了。

快照

Iainbuild议由ZFS完成的相同的事情可以用标准的KVM完成。 QCow2支持快照。 这意味着对于群集,您可以创build基础映像,创build快照,装载快照,更改configuration(IP,主机名),卸载并启动。 最好的部分是只有被更改的扇区才会写入快照。

笔记

我的经验是将160个逻辑处理器/ 2048个GiB虚拟化主机划分为多达10个虚拟机。 所有这些都是Linux服务器(apache / php / postgres / java)。 我在大型硬件上的数百个小型虚拟机中没有任何经验。

顺便一提。 我正在从Debian和RedHat迁移到Ubuntu。 我所拥有的大部分function已经在Ubuntu Server上运行了很多年了。 传统的Debian将在今年去世。 明年的传统RedHat。 从服务器的angular度来看,Debian和Ubuntu之间没有太大的区别,我select了Ubuntu,因为新的东西首先被封装在Ubuntu上。

ZFS

几年前,我在Linux上testing了ZFS,并且不会下降,这足以运行严重的服务器。 我select等待BTRFS,没有任何投诉。 我在我的一些服务器和工作站上使用它。 我会在明年年初将更大的服务器移到它,以改善我的备份。

结论

如果您的设置是标准化的,也许值得花时间制作自己的脚本,因为它会非常自动化。 但是,如果您需要几种设备并处理不同的客户需求,则可以考虑学习像OpenStack这样的解决scheme。

我创build了一个基础镜像,然后拍摄了一个ZFS快照。 然后,我为每个虚拟机使用快照的ZFS克隆。 我还掀起了一个脚本来做到这一点,并改变系统构build的各种参数,更改主机名等。

仅需几秒钟即可启动虚拟机并运行。