1、启用虚拟化
要在 RHEL 8 中使用虚拟化,您必须启用虚拟化模块,安装虚拟化软件包,并确保将您的系统配置为运行虚拟机(VM)的主机。
# 挂载
[root@kittod ~]#mount /dev/sr0 /mnt
# 安装如下模块和软件
[root@kittod ~]# dnf module install virt -y
[root@kittod ~]# dnf install virt-install virt-viewer -y
# 启动服务
[root@kittod ~]# systemctl start libvirtd
# 检查是否支持
[root@kittod ~]# virt-host-validate
QEMU: Checking for hardware virtualization : FAIL (Only emulated CPUs are available, performance will be significantly limited)
QEMU: Checking if device /dev/vhost-net exists : PASS
QEMU: Checking if device /dev/net/tun exists : PASS
QEMU: Checking for cgroup 'cpu' controller support : PASS
QEMU: Checking for cgroup 'cpuacct' controller support : PASS
QEMU: Checking for cgroup 'cpuset' controller support : PASS
QEMU: Checking for cgroup 'memory' controller support : PASS
QEMU: Checking for cgroup 'devices' controller support : PASS
QEMU: Checking for cgroup 'blkio' controller support : PASS
WARN (Unknown if this platform has IOMMU support)
QEMU: Checking for secure guest support : WARN (Unknown if this platform has Secure Guest support)
2、创建虚拟机
2.1、使用命令行界面创建虚拟机
要使用 virt-install 工具在 RHEL 8 主机上创建虚拟机(VM),请按照以下步骤操作。
要创建虚拟机并启动操作系统安装,使用 virt-install 命令以及以下强制参数:
新机器的名称
分配的内存量
分配的虚拟 CPU(vCPU)数量
分配的存储的类型和大小
操作系统安装源的类型和位置
下面创建一个名为 demo-guest1 的虚拟机,它使用文本模式安装 RHEL8.iso 镜像文件,无需图形。它将客户端控制台连接到串行控制台。虚拟机有 6384 MiB 内存、2个 vCPU 和 20 GiB 磁盘。
当通过慢速网络连接连接到主机时这种安装很有用。
[root@kittod ~]# virt-install --name demo-guest1 --memory 6384 --vcpus 2 --disk size=20 --os-variant rhel8.0 --location RHEL8.iso --graphics none --extra- args='console=ttyS0'
**注:**
virt-install——安装指令
--name——虚拟机名称,为demo-guest1
--memory——运行内存,为6384MB
--vcpus——CPU数量,为2个
--disk size=磁盘大小,为20GB
--os-variant——操作系统,为rhel8.0
--location——镜像,为RHEL8.iso
--graphics——图形,none
--extra- args='console=ttyS0'——把虚拟机安装传递到当前窗口画面
[x]——已经配置好
[!]——必须配置
[ ]——需要配置
配置完之后,跳转到以下页面,完成配置
登录,进入虚拟机里面的虚拟机
按 “ctrl+]” 退出里面的虚拟机
如果 virt-install 失败并显示 cannot find default network 错误:
确定安装了 libvirt-daemon-config-network 软件包:
[root@kittod ~]# dnf info libvirt-daemon-config-network
Updating Subscription Management repositories.
Unable to read consumer identity
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
Repository baseos is listed more than once in the configuration
Repository appstream is listed more than once in the configuration
Last metadata expiration check: 0:13:05 ago on Thu 02 Dec 2021 02:40:26 PM CST.
Installed Packages
Name : libvirt-daemon-config-network
Version : 6.0.0
Release : 28.module+el8.3.0+7827+5e65edd7
Architecture : x86_64
Size : 508
Source : libvirt-6.0.0-28.module+el8.3.0+7827+5e65edd7.src.rpm
Repository : @System
From repo : appstream
Summary : Default configuration files for the libvirtd daemon
URL : https://libvirt.org/
License : LGPLv2+
Description : Default configuration files for setting up NAT based networking
验证 libvirt 默认网络是否活跃,并配置为自动启动:
[root@kittod ~]# virsh net-list --all
Name State Autostart Persistent
--------------------------------------------
default active yes yes
# 如果没有,激活默认网络并将其设置为 auto-start:
[root@kittod ~]# virsh net-autostart default
Network default marked as autostarted
[root@kittod ~]# virsh net-start default
2.2、使用 web 控制台创建虚拟机
# 安装cockpit和虚拟机组件
[root@kittod ~]# dnf install cockpit cockpit-machines -y
# 启用cockpit服务
[root@kittod ~]# systemctl start cockpit
# 访问地址(本机IP地址)为
http://ip:9090
登录后,进入以下页面
使用该组件创建虚拟机
然后根据正常顺序安装
参考:Linux虚拟机安装
2.3、启动虚拟机
2.3.1、本地虚拟机启动
[root@kittod ~]# virsh start demo-guest1
Domain demo-guest1 started
2.3.2、远程虚拟机启动
[root@xixi ~]# dnf install virt-install virt-viewer -y
[root@xixi ~]# virsh -c qemu+ssh://root@192.168.226.130/system start demo-guest1 root@192.168.226.130's password:
Domain demo-guest1 started
# 可在主机上查看:
[root@kittod ~]# virsh list
Id Name State
-----------------------------
4 test running
6 demo-guest1 running
2.4、连接至虚拟机
要在 RHEL 8 中与虚拟机(VM)交互,您需要通过以下方法之一连接它:
· 使用web控制台
· 使用virt viewer应用程序和虚拟机图形界面交互
· 如果不需要图形显示,请使用ssh终端连接
· 当使用网络无法从系统连接到虚拟机,使用virsh控制台
2.4.1、使用web控制台
2.4.2、使用ssh终端
[root@kittod ~]# ssh root@192.168.122.207
root@192.168.122.207's password:
Activate the web console with: systemctl enable --now cockpit.socket
This system is not registered to Red Hat Insights. See https://cloud.redhat.com/ To register this system, run: insights-client --register
Last login: Wed Oct 27 15:25:28 2021
[root@bogon ~]# ip ad
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group
default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP
group default qlen 1000
link/ether 52:54:00:cd:a4:33 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.207/24 brd 192.168.122.255 scope global dynamic
noprefixroute enp1s0
valid_lft 3384sec preferred_lft 3384sec
inet6 fe80::5054:ff:fecd:a433/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
link/ether 52:54:00:d2:b5:fc brd ff:ff:ff:ff:ff:ff
inet 192.168.124.1/24 brd 192.168.124.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:d2:b5:fc brd ff:ff:ff:ff:ff:ff
2.4.3、使用串口终端
使用 virsh console 命令,可以连接到虚拟机(VM)的串行控制台。
但虚拟机有以下情况时很有用:
没有提供 VNC 或 SPICE 协议,因此没有为 GUI 工具提供视频显示。
没有网络连接,因此无法使用 SSH 进行交互。
虚拟机必须在内核命令行中配置串口控制台。要验证这一点,虚拟机的 cat /proc/cmdline 命令输出应该包含 console=ttyS0。例如:
[root@localhost ~]# cat /proc/cmdline
BOOT_IMAGE=(hd0,msdos1)/vmlinuz-4.18.0-305.el8.x86_64 root=/dev/mapper/rhel-root
ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root
rd.lvm.lv=rhel/swap console=ttyS0 rhgb quiet
如果没有在虚拟机中正确设置串口控制台,请使用 virsh 控制台连接到虚拟机,请将您连接到无响应的客户端控制台。然而,您仍然可以使用 Ctrl+] 快捷键退出无响应控制台。
要在虚拟机上设置串行控制台,请执行以下操作:
1、在虚拟机上,编辑 /etc/default/grub 文件并将 console=ttyS0 添加到以
GRUB_CMDLINE_LINUX 开头的行中。
[root@localhost ~]# vim /etc/default/grub
GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rhel-swap
rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap console=ttyS0 rhgb quiet"
2、清除可能会阻止您更改生效的内核选项。
[root@localhost ~]# grub2-editenv - unset kernelopts
3、重新载入 Grub 配置:
[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating grub configuration file ...
done
4、重启虚拟机查看
[root@localhost ~]# reboot
[root@localhost ~]# cat /proc/cmdline
BOOT_IMAGE=(hd0,msdos1)/vmlinuz-4.18.0-305.el8.x86_64 root=/dev/mapper/rhel-root
ro crashkernel=auto resume=/dev/mapper/rhel-swap rd.lvm.lv=rhel/root
rd.lvm.lv=rhel/swap console=ttyS0 rhgb quiet
至此,就可以使用串口终端连接到虚拟机了
[root@kittod ~]# virsh console demo-guest1 --safe
Connected to domain demo-guest1
Escape character is ^]
Red Hat Enterprise Linux 8.4 (Ootpa)
Kernel 4.18.0-305.el8.x86_64 on an x86_64
Activate the web console with: systemctl enable --now cockpit.socket
bogon login: root
Password:
Last login: Wed Oct 27 15:22:38 from 192.168.122.1
[root@bogon ~]#
# 可使用ctrl + ] 来退出串口终端
2.4.4、连接远程虚拟机
[root@xixi ~]# virsh -c qemu+ssh://root@192.168.226.128/system list
# 也可以定义以下别名方便执行指令
[root@xixi ~]# cat /etc/libvirt/libvirt.conf
uri_aliases = [
"demo-guest1=qemu+ssh://root@192.168.226.128/system"
]
uri_default = "demo-guest1"
# 执行命令
[root@xixi ~]# virsh list
root@192.168.226.128's password:
Id Name State
-----------------------------
2 demo-guest1 running
2.5、关闭虚拟机
要关闭响应的虚拟机(VM),请执行以下操作之一:
· 在连接到客户端时,使用适合客户端操作系统的 shutdown 命令
· 在主机上使用 virsh shutdown 命令:
如果虚拟机位于本地主机上:
[root@kittod ~]# virsh shutdown demo-guest1
Domain demo-guest1 is being shutdown
如果虚拟机位于远程主机上:
[root@xixi ~]# virsh shutdown demo-guest1
root@192.168.226.128's password:
Domain demo-guest1 is being shutdown
当然也可以使用Web控制台。
要强制客户端关闭(例如,如果它已经变得不响应),请在主机中使用 virsh destroy 命令:
[root@kittod ~]# virsh destroy demo-guest1
Domain demo-guest1 destroyed
virsh destroy 命令并不实际删虚拟机配置或磁盘镜像。它只会销毁正在运行的虚拟机实 例。然而,在个别情况下,这个命令可能会导致虚拟机文件系统崩溃,因此只有在其它所 有关闭方法都失败时才建议使用 virsh destroy。
2.6、删除虚拟机
要删除虚拟机(VM),您可以使用命令行从主机中删除它的 XML 配置和相关存储文件。按照以下步骤操作:
先决条件:
备份虚拟机中的重要数据。
关闭虚拟机。
确保没有其他虚拟机使用相同的关联的存储。
使用 virsh undefine 工具。
例如:以下命令删除 demo-guest1 虚拟机、与其关联的存储卷
[root@kittod ~]# virsh undefine demo-guest1 --remove-all-storage --nvram