Linux Tools --- KVM
一、概要
1. 环境
Rocky Linux 9.1
2. KVM
KVM是Kernel-based Virtual Machine的简称,这是一个开源的针对Linux内核的虚拟化解决方案。它同时支持Intel和AMD的CPUs并且允许用户在Linux下创建和管理虚拟机。
Linux内核作为一个虚拟程序,允许用户虚拟化整个服务器并创建多个虚拟机。
3. 检查虚拟化支持
lscpu | grep Virtualization
4. 检查KVM模块是否已加载
lsmod | grep kvm
二、安装与配置
1. 更新仓库
sudo dnf update -y
2. 安装
(1) 安装virt-install和virt-viewer
sudo dnf install virt-install virt-viewer -y
a. virt-install是一个用于创建虚拟机的命令行工具;
b. virt-viewer是一个轻量的UI接口,它允许用户通过VNC或者SPICE协议与KVM虚拟机交互;
(2) 安装libvirt守护进程
sudo dnf install -y libvirt
(3) 安装virt-manager
sudo dnf install virt-manager -y
(4) 安装其他必要应用
sudo dnf install -y virt-top libguestfs-tools
(5) 启动iommu
sudo grubby --update-kernel=ALL --args="intel_iommu=on"
3. 启动libvirt守护进程
(1) 启动并设置开机启动
sudo systemctl enable --now libvirtd or sudo systemctl start libvirtd sudo systemctl enable libvirtd
(2) 检查状态
systemctl status libvirtd
(3) 验证安装结果
sudo virt-host-validate
4. 配置KVM的网桥
KVM默认使用NAT方式,默认网段为192.168.122.0/24,NAT模式可以让当前虚拟机访问外网,但是无法让局域网的其他主机访问当前虚拟机。
如果需要再KVM管理程序之外访问KVM虚拟机,则需要配置网桥。在这里我们把这个网桥命名为“kvmbridge0”。
(1) 添加网桥kvmbridge0
nmcli connection show sudo nmcli connection add type bridge autoconnect yes con-name kvmbridge0 ifname kvmbridge0
(2) 查看网桥状态
nmcli device status
(3) 使用物理网卡管理新建的网桥
sudo nmcli connection modify enp0s31f6 master kvmbridge0
注意物理网卡要改成自己主机的实际网卡名称。
(4) 配置网桥
sudo nmcli connection modify kvmbridge0 ipv4.addresses '192.168.28.66/24' --- 宿主机所在局域网的地址 sudo nmcli connection modify kvmbridge0 ipv4.gateway '192.168.28.1' sudo nmcli connection modify kvmbridge0 ipv4.dns '192.168.28.1' sudo nmcli connection modify kvmbridge0 ipv4.method manual sudo nmcli connection modify kvmbridge0 connection.autoconnect-slaves 1
也可以用以下命令配置:
sudo nmcli connection modify kvmbridge0 ipv4.addresses '192.168.28.40/24' ipv4.gateway '192.168.28.1' ipv4.dns '192.168.28.1' ipv4.method manual connection.autoconnect-slaves 1
(5) 启动网桥
sudo nmcli connection up kvmbridge0
重启网桥
sudo nmcli connection down kvmbridge0 && sudo nmcli connection up kvmbridge0
(6) 确认状态
nmcli device
ifconfig
此时,查看kvmbridge0的状态,它已被分配我们制定的IP地址。
三、创建虚拟机
1. 命令格式
virt-install [OPTION]
2. 参数类型 https://linux.die.net/man/1/virt-install
(1) --name: 虚拟机的名称,对于同一个libvirt守护进程管理的虚拟机群,名称务必保持唯一;
(2) --ram: 虚拟机内存,单位为MB;
(3) --vcpus: 给虚拟机分配的虚拟CPU数量;
(4) --cpuset: 给虚拟机分配的物理CPU,多个CPU使用逗号分割,如下:
0,2,3,5: 使用处理器0,2,3,5;
1-5,^3,8: 使用处理器1,2,4,5,8。
(5) --cdrom: 安装源,可以是CD-ROM或者指向ISO文件的本地目录;
如果需要在同一台宿主机安装多个虚拟机,建议使用该种方式制定安装源。例如,对于Rocky Linux 9,我们这样指定安装源:
--cdrom=/var/lib/libvirt/boot/Rocky-9.1-x86_64-minimal.iso
(6) --location: 安装源,支持以下格式:
a. 包含安装镜像的本地目录;
b. nfs:host:/path或者nfs://host/path,安装镜像的NFS目录;
c. http://host/path,安装镜像的http目录;
d. ftp://host/path,安装镜像的FTP目录;
对于Rocky Linux 9来说,可以制定它的location参数为:
--location "https://download.rockylinux.org/pub/rocky/9/BaseOS/x86_64/"
(7) --import: 导入现有的虚拟机镜像文件,而不是安装新的虚拟机操作系统;
(8) --os-variant: 该配置可以指定当前安装的虚拟机的操作系统类型,据此信息virt可以优化虚拟机的配置。可以通过下面的命令来查看libvirt支持的所有操作系统类型:
virt-install --os-variant list
对于Rocky Linux 9.1,我们可以配置该参数值为:rocky9
(9) --disk: 指定存储当前虚拟机的媒介,该参数的格式如下:
--disk opt1=val1,opt2=val2,..
它的子配置项如下:
a. path: 存储媒介的路径,可以是一个文件或者块设备,如果文件不存在需要同时提供size参数,系统将自动创建该存储媒介文件;
b. size: 存储媒介的大小,以GB为单位。
(10) --network: 虚拟机的网络配置,该参数的格式如下:
--network=NETWORK,opt1=val1,opt2=val2
NETWORK的取值如下:
a. bridge=网桥名称,虚拟机使用指定的网桥来访问局域网;
b. network=NAME,使用名称为NAME的虚拟网络来配置虚拟机的网络;
c. user, 使用SLIRP来访问局域网;
其他参数:
a. model=[Model], 网络设备的model;
b. mac=[52:54:00:**:**],为虚拟机制定固定的Mac地址;该参数默认为RANDOM,对于Xen虚拟机,Mac地址的前三部分应该为'00:16:3e' ,对于QEMU或者KVM虚拟机,前三部分应该为'52:54:00';
(11) --nonetworks: 虚拟机不需要网络配置;
3. 源镜像
(1) 创建目录
sudo mkdir -p /var/lib/libvirt/iso
(2) 设置权限
sudo chown root /var/lib/libvirt/iso
校验:
sudo getfacl -e /var/lib/libvirt/iso
(3) 下载镜像
wget https://download.rockylinux.org/pub/rocky/9/isos/x86_64/Rocky-9.1-x86_64-minimal.iso
4. 安装
sudo virt-install --name <虚拟机名> \ --ram 8192 \ --vcpus 2 \ --disk path="/var/lib/libvirt/images/<虚拟机名>.img",size=40 \ --os-variant rocky9 \ --location "/var/lib/libvirt/iso/Rocky-9.1-x86_64-minimal.iso" \ --graphics none \ --extra-args="console=ttyS0"
5. Cockpit安装
6. 操作虚拟机
(1) 查看宿主机上所有的虚拟机
sudo virsh list --all
(2) 启动某个虚拟机
sudo virsh start <虚拟机名称>
(3) 停止某个虚拟机
sudo virsh shutdown <虚拟机名称>
四、参考
1. 官方
2. 网桥
3. 其他
https://www.cyberciti.biz/faq/how-to-install-kvm-on-centos-7-rhel-7-headless-server/
https://www.linuxtechi.com/how-to-install-kvm-on-rhel-9/
https://technixleo.com/install-kvm-on-centos-alma-rhel-9/
https://www.centlinux.com/2022/08/setup-kvm-virtualization-host-on-rocky-linux-9.html