前提
主机配置如下:
- 电脑为笔记本
- 处理器 intel i5-6300 HQ 2.30GHz * 4
- 内存 16G
- 硬盘 500G 固态
- 系统 Ubuntu 20.04.3 LTS 64-bit
检查
检查CPU是否支持虚拟化
$ grep -Eoc '(vmx|svm)' /proc/cpuinfo
# 输出大于 0 即可
8
输出结果大于0表示支持虚拟化
检查主板是否开启虚拟化
$ sudo apt update && sudo apt install cpu-checker -y
$ kvm-ok
# 以下输出结果可用
INFO: /dev/kvm exists
KVM acceleration can be used
安装KVM套件
安装相关包
sudo apt install qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virtinst virt-manager -y
qemu-kvm
: 提供硬件底层虚拟化。libvirt-daemon-system
: 为 libvirt作为系统服务的守护程序运行。libvirt-clients
: 为不同的虚拟机提供长期稳定的C APIbridge-utils
:提供网络桥接功能virtinst
: 为libvirt创建虚拟机提供一系列的命令行工作virt-manager
: KVM虚拟机管理图形界面,如果服务器没有安装图形化界面,没有必要安装它。
检查 libvirtd
$ sudo systemctl is-active libvirtd
# 输出以下结果表示可用
active
将当前用户加入到 libvirt 和 kvm 用户组
USER 为当前用户
sudo usermod -aG libvirt USER
sudo usermod -aG kvm USER
配置网桥
sudo vim /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
sudo vim /etc/udev/rules.d/99-bridge.rules
内容如下:
ACTION=="add", SUBSYSTEM=="module", KERNEL=="br_netfilter", \ RUN+="/sbin/sysctl -p /etc/sysctl.d/bridge.conf"
- ip link
KVM 安装后,会有默认创建的接口,需要删除
查看接口
$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether d4:be:d9:f3:1e:5f brd ff:ff:ff:ff:ff:ff
6: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether 52:54:00:1d:5b:25 brd ff:ff:ff:ff:ff:ff
7: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN mode DEFAULT group default qlen 1000
link/ether 52:54:00:1d:5b:25 brd ff:ff:ff:ff:ff:ff
删除默认的网口
$ sudo virsh net-destroy default
$ sudo virsh net-undefine default
再次查看
$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether d4:be:d9:f3:1e:5f brd ff:ff:ff:ff:ff:ff
如果还有,则需要手动删除
$ ip link delete virbr0 type brigde
$ ip link delete virbr0-nic
sudo vim /etc/netplan/00-installer-config.yaml
内容如下:
network:
ethernets:
eno1:
dhcp4: false
dhcp6: false
bridges:
br0:
interfaces: [ eno1 ]
addresses: [192.168.0.100/24]
gateway4: 192.168.0.1
mtu: 1500
nameservers:
addresses: [8.8.8.8,8.8.4.4]
parameters:
stp: true
forward-delay: 4
dhcp4: no
dhcp6: no
version: 2
注意自行更换:
eno1: 为笔记本有线网卡的网卡名,不能使用无线网卡
addresses:里面的ip为可局域网中的真实 ip 地址和掩码
gateway4:网关为局域网中的网关
sudo netplan apply
执行后则 br0 网桥就会被创建成功
$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP mode DEFAULT group default qlen 1000
link/ether c8:d3:ff:dd:74:f1 brd ff:ff:ff:ff:ff:ff
altname enp9s0
3: wlo1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether c8:21:58:17:5a:bb brd ff:ff:ff:ff:ff:ff
altname wlp8s0
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
link/ether c8:d3:ff:dd:74:f1 brd ff:ff:ff:ff:ff:ff
vim host-bridge.xml
创建kvm网桥配置文件
<network>
<name>host-bridge</name>
<forward mode="bridge"/>
<bridge name="br0"/>
</network>
- 创建 kvm 的网桥
$ sudo virsh net-define host-bridge.xml
$ sudo virsh net-start host-bridge
$ sudo virsh net-autostart host-bridge
- 查看是否创建成功
$ virsh net-list --all
Name State Autostart Persistent
------------------------------------------------
host-bridge active yes yes
创建虚拟机
sudo virt-install --name=centos7_2003 --ram=4096 --vcpus=2 --virt-type=kvm --os-type=linux --os-variant=centos7.0 --network default,model=virtio --graphics=vnc,password=123123,port=5911,listen=0.0.0.0 --noautoconsole --accelerate --cdrom=/var/lib/libvirt/images/CentOS-7-x86_64-Minimal-2003.iso --disk path=/var/lib/libvirt/images/CentOS7.qcow2,device=disk,format=qcow2,bus=virtio,cache=writeback,size=40
可自行修改:
--name=centos7_2003
为虚拟机名字
--ram=4096
为虚拟机内存
--vcpus=2
为cpu核数
password=123123
为访问虚拟机界面时需要的密码(可以删除掉)
-cdrom=/var/lib/libvirt/images/CentOS-7-x86_64-Minimal-2003.iso
为镜像路径,自行下载 阿里云centos7
-disk path=/var/lib/libvirt/images/CentOS7.qcow2
disk存放路径
size=40
磁盘大小
检查是否运行成功
$ virsh list --all
Id Name State
------------------------------
1 centos7_2003 running
配置虚拟机静态 ip
$ vi /etc/sysconfig/network-scripts/ifcfg-eth0
# 内容如下
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static # 需要改为 static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=c45492fe-bc6f-40f4-a799-e620660c5b61
DEVICE=eth0
ONBOOT=yes # 需要改为 yes
IPADDR=192.168.0.100 # 和 br0 相同网络下的 ip
METMASK=255.255.255.0 # 和 br0 相同的掩码
DNS1=114.114.114.114
GATEWAY=192.168.0.1 # 和 br0 相同的网关
IPV6_PEERNDS=yes
IPV6_PEEROUTES=yes
IPV6_PRIVACY=no
# 内容结束
查看是否连通
#重启网络
$ systemctl restart NetworkManager
# 查看网络是否连通
$ ping 114.114.114.114
PING 114.114.114.114 (114.114.114.114) 56(84) bytes of data.
64 bytes from 114.114.114.114: icmp_seq=1 ttl=94 time=39.9 ms
64 bytes from 114.114.114.114: icmp_seq=2 ttl=68 time=39.7 ms
$ ping www.baidu.com
PING www.a.shifen.com (220.181.38.149) 56(84) bytes of data.
64 bytes from 220.181.38.149 (220.181.38.149): icmp_seq=1 ttl=52 time=43.6 ms
64 bytes from 220.181.38.149 (220.181.38.149): icmp_seq=2 ttl=52 time=43.7 ms
总结
宿主机重启后,所有相关网络都会自动创建,亲测有效