在安裝KVM之前,首先請(qǐng)確保您的系統(tǒng)支持硬件虛擬化。(一般詢問服務(wù)器提供商是否支持即可)如果您的系統(tǒng)支持硬件虛擬化,請(qǐng)繼續(xù)以下步驟。
就本指南而言,我將使用以下系統(tǒng):
KVM虛擬服務(wù)器:
操作系統(tǒng) – centos 8最小化服務(wù)器(無Gui)
IP地址:192.168.225.53/24
盡管它是在centos 8上測試的,但在RHEL 8上也應(yīng)該也是可以的。
1、在centos 8中安裝KVM
注意:本教程中給出的所有命令均應(yīng)以“root”用戶身份運(yùn)行。如果您以普通用戶身份登錄,請(qǐng)?jiān)谝韵滤?a href="http://www.xiayu04.cn/help/index.php/tag/11" title="命令flickr.photos.notes.edit target="_blank">命令的前面添加“sudo”。
使用“root”用戶命令安裝Kvm和所有必需的依賴項(xiàng)以在centos 8服務(wù)器上設(shè)置虛擬化環(huán)境:
# dnf install qemu-kvm libvirt virt-install
其中:
emu-kvm –支持KVM的QEMU元軟件包(即,x86硬件上的QEMU完全虛擬化),
libvirt – libvirt庫的程序,
virt-install –用于創(chuàng)建和克隆虛擬機(jī)的程序。
安裝KVM后,啟用并啟動(dòng)libvertd服務(wù)(如果尚未啟動(dòng)):
# systemctl enable libvirtd
# systemctl start libvirtd
您還可以結(jié)合使用這兩個(gè)命令,并像下面這樣單行運(yùn)行它們:
# systemctl enable –now libvirtd
使用以下命令檢查libvirtd服務(wù)的狀態(tài):
# systemctl status libvirtd
樣本輸出:
libvertd服務(wù)已啟動(dòng)并正在運(yùn)行!
驗(yàn)證是否已加載KVM模塊:
# lsmod | grep kvm
樣本輸出:
KVM模塊已加載。現(xiàn)在讓我們創(chuàng)建一個(gè)網(wǎng)橋。
2、在centos中使用KVM設(shè)置網(wǎng)橋網(wǎng)絡(luò)
橋接網(wǎng)絡(luò)與其他VM共享主機(jī)的真實(shí)網(wǎng)絡(luò)接口,以連接到外部網(wǎng)絡(luò)。因此,每個(gè)VM可以像物理計(jì)算機(jī)一樣直接綁定到任何可用的IPv4或IPv6地址。
默認(rèn)情況下,KVM會(huì)設(shè)置一個(gè)專用虛擬網(wǎng)橋,以便所有VM都可以在主機(jī)內(nèi)相互通信。它提供了自己的子網(wǎng)和DHCP,以配置來賓網(wǎng)絡(luò),并使用NAT訪問主機(jī)網(wǎng)絡(luò)。
使用“ ip”命令查看KVM默認(rèn)虛擬接口的IP地址:
#ip a
如您所見,KVM默認(rèn)網(wǎng)絡(luò)virbr0使用192.168.122.1/24 IP地址。所有VM都將使用192.168.122.0/24 IP范圍內(nèi)的IP地址,并且主機(jī)操作系統(tǒng)將可訪問192.168.122.1。您應(yīng)該能夠從來賓OS內(nèi)ssh進(jìn)入主機(jī)OS(位于192.168.122.1),并使用scp來回復(fù)制文件。
如果僅從主機(jī)本身訪問內(nèi)部的VM,那就可以了。但是,您無法從網(wǎng)絡(luò)中的其他遠(yuǎn)程系統(tǒng)訪問VM。因?yàn)槲沂褂玫氖遣煌腎P范圍,即192.168.225.0/24。為了從其他遠(yuǎn)程主機(jī)訪問VM,我們必須設(shè)置在主機(jī)網(wǎng)絡(luò)上運(yùn)行并使用主機(jī)網(wǎng)絡(luò)上任何外部DHCP服務(wù)器的公共網(wǎng)橋。用外行術(shù)語來說,我們將使所有VM都使用主機(jī)系統(tǒng)使用的相同IP系列。
設(shè)置公共橋接網(wǎng)絡(luò)之前,出于性能和安全原因,我們應(yīng)該禁用Netfilter。默認(rèn)情況下,當(dāng)前在網(wǎng)橋上啟用Netfilter。
要禁用netfilter,請(qǐng)創(chuàng)建一個(gè)名為/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
保存并關(guān)閉文件。
然后創(chuàng)建另一個(gè)名為/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”
這將設(shè)置必要的標(biāo)志,以在系統(tǒng)啟動(dòng)的適當(dāng)位置禁用網(wǎng)橋上的netfilter。保存并關(guān)閉文件。重新引導(dǎo)系統(tǒng)以使這些更改生效。
接下來,我們應(yīng)該禁用KVM為其本身安裝的默認(rèn)網(wǎng)絡(luò)。
使用“ ip link”命令查找KVM默認(rèn)網(wǎng)絡(luò)接口的名稱:
# ip link
如您在上面的輸出中看到的,“virbr0”和“virbr0-nic”是KVM網(wǎng)絡(luò)。
讓我們使用以下命令刪除默認(rèn)的KVM網(wǎng)絡(luò):
# virsh net-destroy default
使用以下命令取消定義默認(rèn)網(wǎng)絡(luò):
# virsh net-undefine default
如果以上命令由于任何原因都不起作用,則可以使用以下命令禁用和取消定義KVM默認(rèn)網(wǎng)絡(luò):
# ip link delete virbr0 type bridge
# ip link delete virbr0-nic
現(xiàn)在再次運(yùn)行“ ip link”以驗(yàn)證virbr0和virbr0-nic接口是否已被刪除:
# ip link
樣本輸出:
好吧,KVM默認(rèn)網(wǎng)絡(luò)不見了。
現(xiàn)在,讓我們?cè)O(shè)置KVM公共橋,以在創(chuàng)建新VM時(shí)使用。
使用“ nmcli”命令創(chuàng)建一個(gè)名為“ br0”的新橋接接口:
# nmcli connection add type bridge autoconnect yes con-name br0 ifname br0
設(shè)置網(wǎng)橋接口的IP地址:
# nmcli connection modify br0 ipv4.addresses 192.168.225.53/24 ipv4.method manual
為網(wǎng)橋接口設(shè)置網(wǎng)關(guān):
# nmcli connection modify br0 ipv4.gateway 192.168.225.1
為網(wǎng)橋接口設(shè)置DNS:
# nmcli connection modify br0 ipv4.dns 192.168.225.1
接下來,我們需要?jiǎng)h除您的網(wǎng)絡(luò)接口卡之一,并將其作為從屬服務(wù)器添加到網(wǎng)橋。
請(qǐng)注意,如果您的服務(wù)器只有一個(gè)NIC,并且您正在通過ssh訪問服務(wù)器,則在刪除NIC之后,連接將終止。建議您在服務(wù)器的控制臺(tái)中執(zhí)行以下步驟。
例如,我將“ enp0s8”接口作為從屬接口添加到橋接接口br0。
要?jiǎng)h除網(wǎng)絡(luò)接口“ enp0s8”,請(qǐng)運(yùn)行:
# nmcli connection del enp0s8
用您自己的網(wǎng)卡名稱替換“ enp0s8”。
注意:
請(qǐng)勿將無線網(wǎng)絡(luò)接口卡用于網(wǎng)橋。大多數(shù)無線隔行掃描不支持橋接。始終使用有線網(wǎng)絡(luò)接口進(jìn)行無縫連接!
接下來,使用命令將“ enp0s8”添加到網(wǎng)橋:
# nmcli connection add type bridge-slave autoconnect yes con-name enp0s8 ifname enp0s8 master br0
在此,網(wǎng)橋網(wǎng)絡(luò)接口“ br0”連接到主機(jī)的網(wǎng)絡(luò)接口“ enp0s8”。替換與您的網(wǎng)絡(luò)匹配的上述網(wǎng)絡(luò)接口名稱。
重新啟動(dòng)網(wǎng)絡(luò)管理器以使更改生效:
# systemctl restart NetworkManager
如果可以的話,最好重新啟動(dòng)系統(tǒng):
# reboot
登錄到您的服務(wù)器,并檢查IP地址是否已分配給網(wǎng)橋接口:
$ ip a
樣本輸出:
從上面的輸出中可以看到,已為橋接網(wǎng)絡(luò)接口br0分配了IP地址192.168.225.53,并且enp0s8條目現(xiàn)在具有“ master br0”條目。這意味著enp0s8屬于網(wǎng)橋。
您也可以使用“ bridge”命令顯示網(wǎng)橋狀態(tài):
# bridge link show br03: enp0s8:mtu 1500 master br0 state forwarding priority 32 cost 100,multicast,up,lower_up>
我們已經(jīng)成功創(chuàng)建了網(wǎng)橋接口,并且該接口處于活動(dòng)狀態(tài)。我們需要做最后一件事。
我們應(yīng)該將KVM配置為使用此網(wǎng)橋接口作為默認(rèn)接口。為此,創(chuàng)建一個(gè)名為host-bridge.xml的XML文件:
# vi host-bridge.xml
添加以下行:
host-bridge
運(yùn)行以下命令以啟動(dòng)新創(chuàng)建的網(wǎng)橋,并將其作為虛擬機(jī)的默認(rèn)網(wǎng)橋:
# virsh net-define host-bridge.xml
# virsh net-start host-bridge
# virsh net-autostart host-bridge
配置KVM以將網(wǎng)橋接口用作所有VM的默認(rèn)接口
使用以下命令驗(yàn)證網(wǎng)橋是否處于活動(dòng)狀態(tài)并已啟動(dòng):
# virsh net-list –all
樣本輸出:
使用virsh命令驗(yàn)證KVM主機(jī)橋接狀態(tài)
至此,我們已成功在centos 8無頭服務(wù)器中安裝并配置了KVM。
創(chuàng)建和管理KVM來賓計(jì)算機(jī)
我們可以從命令行或使用任何KVM管理工具(如Cockpit和Virt-manager)創(chuàng)建和管理VM,請(qǐng)參考(如何使用Virt-Manager管理KVM虛擬機(jī))。