kvm简单使用
# KVM简单使用
需求:在一台配置不错的机器上安装kvm,然后开小虚拟机,小虚拟机拥有局域网ip地址
# 首先是宿主机安装kvm
下面操作均是切换至root用户进行的。
# 检查cpu是否支持虚拟化
egrep -c '(svm|vmx)' /proc/cpuinfo
上面命令执行结果如果返回0,表示CPU不支持虚拟化技术。当然主板BIOS中的虚拟化技术也可能不是默认开启的,如果没有开启需要手动开启一下。
# 安装
apt update
apt install qemu qemu-kvm libvirt-bin bridge-utils virt-manager
2
将libvirtd添加自启动
systemctl start libvirtd.service
systemctl enable libvirtd.service
2
# 配置桥接
kvm支持多种网络模式,比如NAT、桥接。
NAT是默认的网络模式,KVM会创建一个名为virbr0的虚拟网桥,然后在这个网桥上给虚拟机分配自己的内网ip。(相当于内部组了一个局域网) NAT模式,外网是无法访问虚拟机的。
桥接模式,用一个新网桥来接管宿主机网卡对应的外部网络,然后让宿主机和虚拟机都通过这个网桥来访问外部网络,大家都能拿到外部网络的ip。
首先查看宿主机的网卡
ip addr
找到绑定了局域网ip的那个网卡,我的是enp12s0
然后修改netplan配置
cat /etc/netplan/50-cloud-init.yaml
network:
ethernets:
enp12s0:
dhcp4: no
optional: true
nameservers:
addresses: [192.168.1.1,114.114.114.114,8.8.8.8]
bridges:
br0:
interfaces: [enp12s0]
dhcp4: no
addresses: [192.168.1.54/24]
gateway4: 192.168.1.1
nameservers:
addresses: [192.168.1.1,114.114.114.114,8.8.8.8]
version: 2
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
这里我的宿主机局域网ip是 192.168.1.54 然后网关(路由器)的ip是 192.168.1.1
# 防火墙配置
vim /etc/default/ufw
# ... 省略
DEFAULT_FORWARD_POLICY="ACCEPT"
# ... 省略
2
3
4
5
重启ufw服务让设置生效
systemctl restart ufw.service
iptable设一下
iptables -A FORWARD -j ACCEPT
至此kvm的宿主机设置就完成了
# 启动虚拟机
virt-install \
-n ubuntu18.04-template \
--description "ubuntu18.04-template" \
--accelerate \
--ram=8192 --vcpus=2 \
--network bridge:br0 \
--graphics vnc,listen=0.0.0.0,keymap=en-us \
--os-type=linux --os-variant=ubuntu18.04 \
--disk path=/hdd-data/img/ubuntu18.04-template.img,bus=virtio,size=40 \
--cdrom /ssd-data/iso/ubuntu-18.04.4-live-server-amd64.iso
2
3
4
5
6
7
8
9
10
这个os-variant参数可以参考http://www.linuxcoming.com/blog/2019/09/03/linux_basic_tools_virt_install_os_variant.html
启动之后,需要通过vnc连接虚拟机以完成安装。这个地方建议多开一个终端,因为安装完成之前这个终端的命令输入是阻塞的。
查看vnc端口:
virsh vncdisplay 虚拟机名称
vnc的端口是从5900开始的 所以这个命令返回的数字+5900就是具体的端口号
# 克隆虚拟机
virt-clone \
-o ubuntu18.04-template \
-n ubuntu-jdk001 \
-f /hdd-data/img/ubuntu-jdk001.img
2
3
4
# 连接到虚拟机
因为虚拟机有局域网ip,所以可以用ssh连接虚拟机,不过如果是刚复制出来的虚拟机,我们并不能直接得到它的ip地址,用arp也不行。
此时有2种方法:
- vnc连上去,然后看ip
- virsh console 命令
这里说下virsh console,因为比较方便
首先是用于复制的模版虚拟机需要执行以下命令来开启访问服务:
sudo systemctl enable serial-getty@ttyS0.service
sudo systemctl start serial-getty@ttyS0.service
2
宿主机访问虚拟机
virsh console 虚拟机名称
执行之后要按一下回车才会提示登陆
然后是按ctrl+] 退出访问
# 安装windows10虚拟机
安装Windows 10虚拟机会出现没有virtio驱动的问题,导致安装程序找不到硬盘,需要先下载virtio驱动。
https://docs.fedoraproject.org/en-US/quick-docs/creating-windows-virtual-machines-using-virtio-drivers/index.html
virt-install \
-n win10-1909-template \
--description "win10-1909-template" \
--accelerate \
--ram=8192 --vcpus=2 \
--network bridge:br0 \
--graphics vnc,listen=0.0.0.0,keymap=en-us \
--os-type=win --os-variant=win10 \
--disk path=/hdd-data/img/win10-1909-template.img,bus=virtio,size=60 \
--disk path=/ssd-data/iso/virtio-win-0.1.171_amd64.vfd,device=floppy \
--cdrom=/ssd-data/iso/win10-1909-x64.iso
2
3
4
5
6
7
8
9
10
11
安装时会找不到硬盘,这时候选择加载驱动,然后选择加载软盘里的驱动就可以了
# 虚拟机管理
# 查看虚拟机
virsh list
# 虚拟机关机(拔电源)
virsh destroy 虚拟机名称
# 删除虚拟机
virsh undefine 虚拟机名称
还需要手动删除虚拟机的img文件
# 参考资料
- https://segmentfault.com/a/1190000015418876