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. 官方

https://libvirt.org/docs.html

2. 网桥

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/configuring-a-network-bridge_configuring-and-managing-networking

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

posted @ 2023-03-06 22:16  白马黑衣  阅读(717)  评论(0编辑  收藏  举报