如何制作像 EC2 AMI 中的 KVM 映像

如何制作像 EC2 AMI 中的 KVM 映像

我们有几台裸机服务器(使用 Debian 操作系统),我们在其中运行多台(100 多台)KVM 机器 - 主要是 Debian 和 Centos。这些机器位于 LVM 或分布式文件系统(moosefs&glusterfs)上

是否可以创建一些环境来自动创建机器,我们可以在其中指定:

  • 主机名
  • 磁盘大小
  • 其他(cpu、网络、ram)是可选的

现在我们每次都要手动创建新机器,这很无聊,因为我们每次都必须重新安装。我们想制作类似于 Amazon Machine Images 的东西

我安装了 proxmox 一秒钟,但我没有看到与 AMI 类似的功能。但也许我错了...

答案1

我的标准流程(手工)

  1. 我创建了一个基础图像。
    • 从宿主机角度来看仅仅是一个.img或者.qcow2文件。
  2. 我开始复制基础图像
  3. 然后我根据需要改变图像的大小
    • 对于 .qcow2,我使用 qemu-img 转换实用程序。
    • 对于 .img,我使用 dd 在图像末尾添加更多零。
  4. 然后我进入 virt-manager 界面并“使用现有映像”创建一个新的虚拟机。在此我设置了所需的处理量和内存量。
  5. 我启动机器映像,然后
    • 我更改了 IP 地址
    • 我更改了主机名
    • 我删除了 sshd 密钥以强制 sshd 生成新的密钥
    • 我调整了 / 分区的大小以使用整个磁盘(如果客户机映像使用 btrfs,则这是不必要的)

所有这些操作都可以通过一个简单的 shell 脚本自动完成。关键是要学会如何使用 virsh 实用程序创建虚拟机,确保您的网络接口是桥接器,使用 btrfs 作为客户文件系统。然后,您可以复制映像、挂载映像、更改已挂载映像的配置、卸载映像、使用 virsh 添加虚拟机并运行。

我还没有这样做,因为我管理的虚拟机很少……实际上,我使用 KVM 将一个大型硬件划分为两个或三个非常大的硬件。我在这方面有点自闭。我更喜欢编写自己的脚本,以便在这些方面有高度的控制力。

更加自动化和用户友好

你正在寻找的是openstack据我所知,它非常用户友好,可以使用 KVM、VirtualBox、LXD、Xen、VMWare 作为虚拟机管理程序。一个界面即可绑定它们。

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

快照

Iain 建议 ZFS 做的事情,也可以用标准 KVM 来完成。QCow2 支持快照。这意味着对于集群,您可以制作基础映像、创建快照、挂载快照、更改配置(IP、主机名)、卸载和启动。最好的部分是,只有更改的扇区才会写入快照。

笔记

我的经验是使用 160 个逻辑处理器/2048 GiB 虚拟化主机,最多可分为 10 个虚拟机。所有这些都是 Linux 服务器(apache/php/postgres/java)。我完全没有在大型硬件中使用数百台小型虚拟机的经验。

顺便说一句。我正在从 Debian 和 RedHat 迁移到 Ubuntu。多年来,我拥有的大部分东西都在 Ubuntu Server 上运行。旧版 Debian 将于今年消亡。旧版 RedHat 将于明年消亡。从服务器角度来看,Debian 和 Ubuntu 之间没有太大区别,我选择 ubuntu 是因为新东西首先在 ubuntu 上打包。

虚拟文件系统

几年前我在 Linux 上测试过 ZFS,但并不觉得它足以在其上运行重要的服务器。我选择等待 BTRFS,并且没有什么可抱怨的。我在我的一些服务器和工作站上使用它。我将在明年年初将我的大型服务器迁移到它以改善我的备份。

结论

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

答案2

我创建了一个基础映像,然后为其拍摄了 ZFS 快照。然后,我为每个 VM 使用快照的 ZFS 克隆。我还编写了一个脚本来执行此操作,并更改系统构建的各种参数、更改主机名等。

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

相关内容