容器管理使用 Podman 非常简单方便,但是虚拟机管理目前没有找到比较好用的工具,于是我就自己写了一个脚本来实现单主机上的虚拟机管理,直接调用 QEMU 进行虚拟机管理。
Libvirt 是一个很优秀的虚拟化管理库及工具集,但是它依赖了太多软件包,使用及调试比较复杂,我之前曾尝试将其容器化,但是没能完美运行,并且 Libvirt 还在进行架构调整进而把单体拆成多个服务。
刚参加工作时,我写过用脚本来管理部门几台物理机上的虚拟机,将物理机网卡变成 Bridge 进而使得创建出来的虚拟机和物理机处于同一网段。这个脚本是通过 Libvirt 创建的虚拟机,使用起来还算方便。
最近研究了一下,我发现可以直接通过 QEMU 来进行虚拟机管理,反而更简单一些,于是就写了个这个工具。
最开始我是考虑创建 IMDS 服务来使用 cloud-init 对虚拟机初始化的,比如配置网络、指定主机名、自动扩容根文件系统、注入 SSH 公钥等,但是 cloud-init 近期才为 NoCloud 类型的数据源添加网络配置功能,当前稳定版本的镜像(Ubuntu/Debian等)都还不支持。
因此我是通过在 virtman 脚本里挂载虚拟机系统盘文件系统进行的网络配置,后面等 cloud-init 的最新版进入各发行版之后,我计划再改为 cloud-init 进行虚拟机初始化,这会让 virtman 更加通用一些,操作系统的差异由 cloud-init 来屏蔽。