Linux KVM 配置说明
KVM(Kernel-based Virtual Machine) 是 Linux 内核的一个模块,它将 Linux 内核转变为一个 Type-1(裸机级) 虚拟机管理程序(Hypervisor/VMM) 。
KVM 本身并不模拟硬件,它只负责处理器虚拟化和内存虚拟化。它需要配合 QEMU 来模拟 I/O 设备(如磁盘、网卡、显卡)。
内核态 (KVM Module) : 负责将 CPU 切换到 客户模式(Guest Mode) ,处理高权限指令。
用户态 (QEMU) : 负责模拟硬件设备,并提供用户操作接口。
管理层 (Libvirt) : 一个标准的 API 库,我们常用的
virsh命令、virt-manager界面都是通过 Libvirt 来调用 QEMU/KVM 的。
核心技术特性
CPU 虚拟化 (Intel VT-x / AMD-V) 。KVM 利用硬件辅助虚拟化技术。它将 CPU 分为四种模式,使得虚拟机(Guest)可以直接在物理 CPU 上执行绝大多数指令,只有在执行敏感指令时才由内核接管,性能损耗极低。
内存管理 (EPT/NPT) 。通过 扩展页表 (EPT) 技术,KVM 实现了物理内存与虚拟机内存的直接映射。
- KSM (Kernel Same-page Merging) 扫描多个 VM 的内存,如果发现相同的内存页(例如多个 VM 都运行 Ubuntu),则将其合并为一页,极大节省物理内存。
存储与网络 (VirtIO) 。传统的模拟设备(如模拟一张经典的百兆网卡)效率极低。KVM 引入了 VirtIO 准虚拟化驱动。VM 意识到自己处于虚拟化环境,通过“共享内存”的方式与宿主机通信。实现磁盘 IO 和网络吞吐量几乎接近物理机性能。
KVM 家族工具链
qemu-kvm : 核心包,提供底层仿真。
libvirt-daemon : 守护进程,负责管理 VM 的生命周期。
virsh : 命令行工具(运维最常用)。
virt-install : 用于创建虚拟机的命令行脚本工具。
KVM 安装
环境信息
- Ubuntu 22.04.5 LTS 5.15.0-119-generic
- 最好不要和 Docker、K8s 等虚拟化工具同时安装。可能会因为内核参数(如
net.bridge.bridge-nf-call-iptables)冲突导致 VM 无法获得 DHCP 地址。
首先需要确认你的物理机 CPU 是否支持虚拟化技术(VT-x 或 AMD-V)
egrep -c '(vmx|svm)' /proc/cpuinfo |
如果输出大于 0,说明支持虚拟化
安装 KVM 及相关工具 。参考以下命令安装 Linux 原生的虚拟化栈
sudo apt update |
KVM 中安装 Talos Linux 系统
Talos Linux OS Github 下载地址 ,从中下载 Talos Linux AMD64 版本的 RAW 镜像并提取 raw 文件
wget https://github.com/siderolabs/talos/releases/download/v1.14.0-alpha.0/metal-amd64.raw.zst |
使用解压后的 metal-amd64.raw 文件创建虚拟机
创建 Talos 虚拟机 。可以使用 virt-install 命令行快速创建多个 VM。 创建控制平面 (Control Plane) 虚拟机
cp metal-amd64.raw /var/lib/libvirt/images/talos-control-plane-01.raw |
--name talos-control-plane-01: 虚拟机唯一名称为talos-control-plane-01--ram 4096: 内存大小为 4096MB--vcpus 4: 虚拟 CPU 数量为 4 个--disk path=/var/lib/libvirt/images/talos-control-plane-01.qcow2,size=20:path虚拟磁盘文件存放路径,size虚拟磁盘文件大小为 20GB--os-variant ubuntu22.04:--os-variant用于指定操作系统类型,这里指定为 Ubuntu 22.04。虽然安装的是 Talos,但指定 ubuntu22.04 会让 KVM 自动应用适合该内核版本的硬件加速参数(如 VirtIO 队列优化)--network network=default,model=virtio: 将 VM 挂载到宿主机的 default 网桥上。这是 Libvirt 默认网桥,是 KVM 安装后自动生成的 NAT 网桥。虚拟机可以访问外网,宿主机可以访问虚拟机,但外部机房的其他服务器无法直接访问该虚拟机。--graphics none: 不显示图形界面,禁用图形输出--console pty,target_type=serial: 串口控制台,将虚拟机的控制台重定向到当前的 shell 终端。运行命令后,你可以直接在当前的终端窗口看到 Talos 的启动日志。--cdrom /opt/Talos/metal-amd64.iso: 安装镜像,Talos 首次启动需要通过 ISO 引导来进入安装模式。--boot hd: 设置启动优先级。先尝试从硬盘 (hd) 启动,如果硬盘没系统(如首次启动),则从 光盘 (cdrom) 启动。
执行 VM 安装命令后,你的终端会变为 VM 的输出界面。你会看到 Talos 启动并显示以下信息:
Starting install... |
到这一步说明虚拟机已经成功创建并运行了。由于你看到了 Escape character is ^] (Ctrl + ]) 且屏幕停止滚动,这意味着你已经成功进入了虚拟机的串口终端 (Serial Console)。
Talos 启动非常快,大约 10-20 秒。如果 1 分钟后还没输出,说明内核可能还在尝试初始化硬件。
如果你想回到宿主机命令行,执行后续的 talosctl 命令,你需要先 Ctrl + ] (先按住 Ctrl 不放,再按右中括号)退出虚拟机的串口终端。
如果 VM 安装异常,可以查询 libvirtd 服务日志
journalctl -u libvirtd -n 50 --no-pager |
virsh 命令行工具
虚拟机管理命令
列出所有虚拟机
virsh list --all |
查看虚拟机分配的 IP 地址
virsh net-dhcp-leases default |
彻底删除虚拟机
virsh destroy talos-control-plane-01 |
连接虚拟机串口终端
virsh console 1 |
Network 管理
查看所有网络
virsh net-list |
查看虚拟机分配的 IP 地址
virsh net-dhcp-leases default |