參考鏈接
Ubuntu 18.04 LTS安裝KVM虛擬機
如何在 Ubuntu 18.04 服務器上安裝和配置 KVM
KVM日常管理和克隆
KVM詳解
1.准備工作
首先需要檢查一下CPU是否支持虛擬化,執行一下命令來檢查/proc/cpuinfo文件中是否又虛擬化相關的字眼,如果有的話表明CPU支持虛擬化技術。
egrep -c '(svm|vmx)' /proc/cpuinfo
上面命令執行結果如果返回0,表示CPU不支持虛擬化技術。當然主板BIOS中的虛擬化技術也可能不是默認開啟的,如果沒有開啟需要手動開啟一下。
2.安裝KVM
#執行以下命令安裝KVM
sudo apt update
sudo apt install qemu qemu-kvm libvirt-bin bridge-utils virt-manager
#將libvirtd添加自啟動
sudo systemctl start libvirtd.service
sudo systemctl enable libvirtd.service
3.選擇kvm網絡工作模式
KVM安裝完成后,首先需要進行網絡設定,KVM支持四種網絡模式:
- 橋接模式
- NAT模式
- 用戶網絡模式
- 直接分配設備模式
橋接(Bridge)模式
原理:
在橋接模式下,宿主機和虛擬機共享同一個物理網絡設備,虛擬機中的網卡和物理機中的網卡是平行關系,所以虛擬機可以直接接入外部網絡,虛擬機和宿主機有平級的IP。
原本宿主機是通過網卡eth0連接外部網絡的,網橋模式會新創建一個網橋br0,接管eth0來連接外部網絡,然后將宿主機和虛擬機的網卡eth0都綁定到網橋上。
對於未使用netplan來管理網絡服務的ubuntu服務器,如果要使用橋接模式需要進行以下操作:
編輯/etc/network/interfaces,增加如下內
auto br0
iface br0 inet dhcp # 網橋使用DHCP模式,從DHCP服務器獲取IP
bridge_ports enp3s0 # 網卡名稱,網橋創建前連接外部的網卡,可通過ifconfig命令查看,有IP地址的就是
bridge_stp on # 避免數據鏈路出現死循環
bridge_fd 0 # 將轉發延遲設置為0
接下來需要重啟networking服務(如果是通過SSH連接到宿主機上的,這一步會導致網絡中斷,如果出現問題可能導致連不上宿主機,最好在宿主機上直接操作)
systemctl restart networking.service
#使用ifconfig命令查看IP是否從enp3s0(網橋創建前的網卡)變到了br0上,如果沒有變化則需要重啟。如果宿主機ip已經成功變到網橋上,並且宿主機能正常上網而虛擬機獲取不到ip,可能是ufw沒有允許ip轉發導致的,編輯/etc/default/ufw允許ip轉發。
DEFAULT_FORWARD_POLICY="ACCEPT"
#重啟ufw服務讓設置生效
systemctl restart ufw.service
對於已經使用netplan來管理網絡的ubuntu服務器需要修改netplan而非/etc/network/interfaces
在做修改之前,我本地的ubuntu服務器已經添加靜態IP,配置如下
cat /etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by
# the datasource. Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
ethernets:
enp5s0:
dhcp4: false
addresses: [192.168.40.20/24]
gateway4: 192.168.40.1
nameservers:
addresses:
- 223.5.5.5
- 114.114.114.114
- 192.168.40.1
enp6s0:
dhcp4: true
nameservers:
addresses:
- 223.5.5.5
- 223.6.6.6
version: 2
參考參考文章2的描述,將enp5s0橋接到br0網橋,修改后的配置文件如下,我本地有兩個物理網卡,這里將enp5s0用來作橋接,enp6s0保留
cat /etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by
# the datasource. Changes to it will not persist across an instance.
# To disable cloud-init's network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
network:
ethernets:
enp5s0:
dhcp4: false
enp6s0:
dhcp4: true
nameservers:
addresses:
- 223.5.5.5
- 223.6.6.6
bridges:
kvmbr0:
interfaces: [enp5s0]
dhcp4: no
addresses: [192.168.40.20/24]
gateway4: 192.168.40.1
nameservers:
addresses: [192.168.40.1,223.5.5.5,223.6.6.6,114.114.114.114]
version: 2
4.創建kvm虛擬機
- 使用 virt-manager 圖形化界來創建
- 使用virt-install 命令行創建主機
本文主要介使用kvm命令行來創建虛擬機的流程
linuxtechi@kvm-ubuntu18-04:~$ sudo virt-install -n DB-Server --description "Test VM for Database" --os-type=Linux --os-variant=rhel7 --ram=1096 --vcpus=1 --disk path=/var/lib/libvirt/images/dbserver.img,bus=virtio,size=10 --network bridge:br0 --graphics none --location /home/linuxtechi/rhel-server-7.3-x86_64-dvd.iso --extra-args console=ttyS0
或
#不創建虛擬磁盤,一次性創建KVM虛擬機(默認為qcow2磁盤格式,網絡為橋接模式,在此前最好安裝virt-manager):
virt-install --virt-type kvm --name CentOS-7-x86_64 --ram 2048 \
-vcpus=1 -s 20 -c /vm/iso/CentOS-7-x86_64-DVD-1511.iso --hvm \
--os-type=linux -f /vm/CentOS-7-x86_64-tmp.img --graphics vnc,listen=0.0.0.0 \
--noautoconsole