关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

在CentOS 8服务器中安装和配置KVM:详细步骤与指南

发布时间:2023/11/6 13:09:32
香港云服务器

在安装KVM之前,首先请确保您的系统支持硬件虚拟化。(一般询问服务器提供商是否支持即可)如果您的系统支持硬件虚拟化,请继续以下步骤。

在CentOS 8服务器中安装和配置KVM

就本指南而言,我将使用以下系统:

KVM虚拟服务器:

操作系统 – CentOS 8最小化服务器(无GUI)

IP地址:192.168.225.53/24

尽管它是在CentOS 8上测试的,但在RHEL 8上也应该也是可以的。

1、在CentOS 8中安装KVM

注意:本教程中给出的所有命令均应以“root”用户身份运行。如果您以普通用户身份登录,请在以下所有命令的前面添加“sudo”。

使用“root”用户命令安装Kvm和所有必需的依赖项以在CentOS 8服务器上设置虚拟化环境:

# dnf install qemu-kvm libvirt virt-install

其中:

emu-kvm –支持KVM的QEMU元软件包(即,x86硬件上的QEMU完全虚拟化),

libvirt – libvirt库的程序,

virt-install –用于创建和克隆虚拟机的程序。

安装KVM后,启用并启动libvertd服务(如果尚未启动):

# systemctl enable libvirtd

# systemctl start libvirtd

您还可以结合使用这两个命令,并像下面这样单行运行它们:

# systemctl enable --now libvirtd

使用以下命令检查libvirtd服务的状态:

# systemctl status libvirtd

样本输出:

libvertd服务已启动并正在运行!

验证是否已加载KVM模块:

# lsmod | grep kvm

样本输出:

KVM模块已加载。现在让我们创建一个网桥。

2、在CentOS中使用KVM设置网桥网络

桥接网络与其他VM共享主机的真实网络接口,以连接到外部网络。因此,每个VM可以像物理计算机一样直接绑定到任何可用的IPv4或IPv6地址。

默认情况下,KVM会设置一个专用虚拟网桥,以便所有VM都可以在主机内相互通信。它提供了自己的子网和DHCP,以配置来宾网络,并使用NAT访问主机网络。

使用“ ip”命令查看KVM默认虚拟接口的IP地址:

#ip a

如您所见,KVM默认网络virbr0使用192.168.122.1/24 IP地址。所有VM都将使用192.168.122.0/24 IP范围内的IP地址,并且主机操作系统将可访问192.168.122.1。您应该能够从来宾OS内SSH进入主机OS(位于192.168.122.1),并使用scp来回复制文件。

如果仅从主机本身访问内部的VM,那就可以了。但是,您无法从网络中的其他远程系统访问VM。因为我使用的是不同的IP范围,即192.168.225.0/24。为了从其他远程主机访问VM,我们必须设置在主机网络上运行并使用主机网络上任何外部DHCP服务器的公共网桥。用外行术语来说,我们将使所有VM都使用主机系统使用的相同IP系列。

设置公共桥接网络之前,出于性能和安全原因,我们应该禁用Netfilter。默认情况下,当前在网桥上启用Netfilter。

要禁用netfilter,请创建一个名为/etc/sysctl.d/bridge.conf的文件:

# vi /etc/sysctl.d/bridge.conf

添加以下行:

net.bridge.bridge-nf-call-ip6tables=0

net.bridge.bridge-nf-call-iptables=0

net.bridge.bridge-nf-call-arptables=0

保存并关闭文件。

然后创建另一个名为/etc/udev/rules.d/99-bridge.rules的文件:

# vi /etc/udev/rules.d/99-bridge.rules

添加以下行:

ACTION=="add", SUBSYSTEM=="module", KERNEL=="br_netfilter", RUN+="/sbin/sysctl -p /etc/sysctl.d/bridge.conf"

这将设置必要的标志,以在系统启动的适当位置禁用网桥上的netfilter。保存并关闭文件。重新引导系统以使这些更改生效。

接下来,我们应该禁用KVM为其本身安装的默认网络。

使用“ ip link”命令查找KVM默认网络接口的名称:

# ip link

如您在上面的输出中看到的,“virbr0”和“virbr0-nic”是KVM网络。

让我们使用以下命令删除默认的KVM网络:

# virsh net-destroy default

使用以下命令取消定义默认网络:

# virsh net-undefine default

如果以上命令由于任何原因都不起作用,则可以使用以下命令禁用和取消定义KVM默认网络:

# ip link delete virbr0 type bridge

# ip link delete virbr0-nic

现在再次运行“ ip link”以验证virbr0和virbr0-nic接口是否已被删除:

# ip link

样本输出:

好吧,KVM默认网络不见了。

现在,让我们设置KVM公共桥,以在创建新VM时使用。

使用“ nmcli”命令创建一个名为“ br0”的新桥接接口:

# nmcli connection add type bridge autoconnect yes con-name br0 ifname br0

设置网桥接口的IP地址:

# nmcli connection modify br0 ipv4.addresses 192.168.225.53/24 ipv4.method manual

为网桥接口设置网关:

# nmcli connection modify br0 ipv4.gateway 192.168.225.1

为网桥接口设置DNS:

# nmcli connection modify br0 ipv4.dns 192.168.225.1

接下来,我们需要删除您的网络接口卡之一,并将其作为从属服务器添加到网桥。

请注意,如果您的服务器只有一个NIC,并且您正在通过SSH访问服务器,则在删除NIC之后,连接将终止。建议您在服务器的控制台中执行以下步骤。

例如,我将“ enp0s8”接口作为从属接口添加到桥接接口br0。

要删除网络接口“ enp0s8”,请运行:

# nmcli connection del enp0s8

用您自己的网卡名称替换“ enp0s8”。

注意:

请勿将无线网络接口卡用于网桥。大多数无线隔行扫描不支持桥接。始终使用有线网络接口进行无缝连接!

接下来,使用命令将“ enp0s8”添加到网桥:

# nmcli connection add type bridge-slave autoconnect yes con-name enp0s8 ifname enp0s8 master br0

在此,网桥网络接口“ br0”连接到主机的网络接口“ enp0s8”。替换与您的网络匹配的上述网络接口名称。

重新启动网络管理器以使更改生效:

# systemctl restart NetworkManager

如果可以的话,最好重新启动系统:

# reboot

登录到您的服务器,并检查IP地址是否已分配给网桥接口:

$ ip a

样本输出:

在Linux中从命令行检查KVM桥IP地址

从上面的输出中可以看到,已为桥接网络接口br0分配了IP地址192.168.225.53,并且enp0s8条目现在具有“ master br0”条目。这意味着enp0s8属于网桥。

您也可以使用“ bridge”命令显示网桥状态:

# bridge link show br03: enp0s8:mtu 1500 master br0 state forwarding priority 32 cost 100,multicast,up,lower_up>

我们已经成功创建了网桥接口,并且该接口处于活动状态。我们需要做最后一件事。

我们应该将KVM配置为使用此网桥接口作为默认接口。为此,创建一个名为host-bridge.xml的XML文件:

# vi host-bridge.xml

添加以下行:

host-bridge

运行以下命令以启动新创建的网桥,并将其作为虚拟机的默认网桥:

# virsh net-define host-bridge.xml

# virsh net-start host-bridge

# virsh net-autostart host-bridge

配置KVM以将网桥接口用作所有VM的默认接口

使用以下命令验证网桥是否处于活动状态并已启动:

# virsh net-list --all

样本输出:

使用virsh命令验证KVM主机桥接状态

至此,我们已成功在CentOS 8无头服务器中安装并配置了KVM。

创建和管理KVM来宾计算机

我们可以从命令行或使用任何KVM管理工具(如Cockpit和Virt-manager)创建和管理VM,请参考(如何使用Virt-Manager管理KVM虚拟机)。