当前位置:首页|资讯

在容器 (podman) 中运行虚拟机 (QEMU/KVM, libvirt)

作者:穷人小水滴发布时间:2024-09-25

首发日期 2024-08-28, 以下为原文内容:

虚拟机 (virtual machine) 是一种计算机的虚拟化技术,容器 (container) 是一种更轻量级的虚拟化技术.虚拟机可以套娃 (嵌套, nest), 也就是在虚拟机中运行虚拟机.容器也可以套娃, 比如 Docker in Docker, Podman in Podman, Podman in Docker 等.容器和虚拟机也可以互相套娃, 比如在虚拟机中运行容器, 是可以的.

那么, 反过来, 在容器中运行虚拟机呢 ?

这里是 穷人小水滴, 专注于 穷人友好型 低成本技术. (本文为 57 号作品. )

参考资料:

相关文章:

  • 《QEMU/KVM 虚拟机显卡透传 (vfio-pci)》

  • 《香橙派: 在容器 (podman) 中运行 x11 图形界面》

  • 《自制神之嘴: fish-speech 容器镜像 (文本转语音 AI 大模型)》

  • 《基于 sftp 的 NAS (局域网文件存储服务器)》

  • 《安装 Fedora CoreOS 操作系统》

目录

  • 1 制作容器镜像

  • 2 运行测试

  • 3 总结与展望

1 制作容器镜像

使用的 Dockerfile 内容如下:

其中配置文件 libvirtd.conf:

其中配置文件 qemu.conf:

构建命令:

保存镜像:

在服务器上加载镜像:

加载的镜像:

2 运行测试

首先检查服务器 KVM 功能是否开启:

在服务器上运行容器:

在本机尝试连接服务器的 libvirtd:

其中 fc-server.test 是服务器的 IP 地址.

在本机启动 virt-manager:

点击添加连接:

选择自定义 URI, 输入 qemu+tcp://fc-server.test/system, 确定:

成功连接:

创建虚拟机:

选择系统安装光盘 iso 文件:

注意勾选 在安装前自定义配置, 完成:

如图所示进行配置, 注意删除网卡 (NIC), 配置 VNC 服务器的端口号:

点击开始安装:

这是 ArchLinux 安装光盘的启动界面.

启动进入系统, 注意 KVM (/dev/kvm) 是启用的.

执行 lscpu 命令, 注意鼠标指针指向的位置.这表示系统在 QEMU/KVM 虚拟机中运行, 同时开启了 嵌套虚拟化(也就是可以在虚拟机中运行虚拟机, 同样可以使用 KVM 硬件加速).

至此, 在容器 (podman) 中运行 QEMU/KVM 虚拟机, 测试成功.

3 总结与展望

本文验证了在容器中运行 QEMU/KVM 虚拟机是可行的,可以正常使用 Linux 内核的 KVM 硬件加速.podman 可以普通用户运行, 无需 root 权限, 所以普通用户也可以运行 QEMU/KVM 虚拟机.

但是 libvirt 不太适应容器内的环境 (也可能是不适应没有 root 权限),BUG 和报错一大堆, 比如虚拟机的关机/重启功能严重故障, 直接卡死.这个也可能是配置和使用方式不太对, 需要进一步分析具体的原因.同时因为没有 root 权限, 虚拟机的网络功能也无法使用 (无法连网),这个问题还没解决.

后续可以考虑不使用 libvirt, 直接使用 qemu-system 来运行虚拟机,或许可以解决上述问题.不过, 虚拟机和容器的互相疯狂套娃, 这里是达成了, 撒花 ~

本文使用 CC-BY-SA 4.0 许可发布.

本文使用 Bilibili-Markdown 工具进行格式化排版:https://www.bilibili.com/read/cv18986956/


Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1