在安裝KVM之前,首先請確保您的系統支持硬件虛擬化。(一般詢問服務器提供商是否支持即可)如果您的系統支持硬件虛擬化,請繼續以下步驟。
就本指南而言,我將使用以下系統:
KVM虛擬服務器:
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模塊已加載?,F在讓我們創建一個網橋。
2、在centos中使用KVM設置網橋網絡
橋接網絡與其他VM共享主機的真實網絡接口,以連接到外部網絡。因此,每個VM可以像物理計算機一樣直接綁定到任何可用的IPv4或IPv6地址。
默認情況下,KVM會設置一個專用虛擬網橋,以便所有VM都可以在主機內相互通信。它提供了自己的子網和DHCP,以配置來賓網絡,并使用NAT訪問主機網絡。
#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
如您在上面的輸出中看到的,“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 a
樣本輸出:
從上面的輸出中可以看到,已為橋接網絡接口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虛擬機)。