文档参考:
12.2. 虚拟化 (debian.org)
Using KVM On Ubuntu 7.10 (Gutsy Gibbon) (howtoforge.com)
Setting up KVM on Red Hat Enterprise Linux | Red Hat Developer
创建桥接网络
配置这东西,时效性很强!最好的办法是去看官方文档,这次我的配置方式是根据 Debian 官方的流程配置的,而 KVM 官方也有文档指导配置。原理都一样:
- 使用的硬件必须要支持虚拟化(Intel-VT,AMD-V)
- 接着是 BIOS 要打开虚拟化支持(如果你是用虚拟机的话,就在硬件设置里把 CPU 的虚拟机选项打开!)
- 内核的模块要加载:
lsmod | grep kvm
之后要看到 kvm 模块和 kvm_intel 模块- 如果没有的话,就用
modprobe kvm
modprobe kvm_intel
来加载模块!
- 软件安装
- 源码安装
- 包管理器直接安装(省事)
- 网络配置(看需求)
然后你就可以开心地使用 KVM 创建虚拟机了。
然后关于创建虚拟机,一般就是两个步骤:
- 用 qemu-img 创建即将使用的镜像文件/磁盘分区(用于存储客户机的系统和文件)
- 用 virsh-install 创建虚拟机
本文 KVM 的部署步骤:
- 安装必备软件
apt-get install libvirt-clients libvirt-daemon-system qemu-kvm virtinst virt-manager virt-viewer
libvirt-clients 就是提供 libvirt API 工具进行管理(例如 virsh 命令行工具)。
libvirt-daemon-system 提供 libvirtd 守护进程(暂不知道为何物)。
qemu-kvm 之前说过了,是用户态工具。负责用户空间的管理。网卡、显卡、硬盘等。
virtinst 提供 virt-install。
virt-manager 图形化管理工具。
virt-viewer 让你访问虚拟机的图形控制台。
- 配置网桥隔离虚拟机但仍保留一定的网络权限。
编辑 /etc/network/interfaces,配置物理接口 (eth0 & enp1so0) 和桥接接口 (通常是br0) 的连接。
首先需要 bridge-utils 软件:apt install bridge-utils -y
网桥配置:
vim /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# auto ens33
# iface ens33 inet static
# address 192.168.137.10
# netmask 255.255.255.0
# gateway 192.168.137.2
# bridge for VM
auto br0
iface br0 inet static
address 192.168.137.10
netmask 255.255.255.0
gateway 192.168.137.2
bridge_ports ens33
bridge_stp off
bridge_waitport 5
bridge_fd 0
配置成功:
haitao@debian:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
link/ether 00:0c:29:7f:4c:ab brd ff:ff:ff:ff:ff:ff
altname enp2s1
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 2e:7c:0d:d0:36:f9 brd ff:ff:ff:ff:ff:ff
inet 192.168.137.10/24 brd 192.168.137.255 scope global br0
valid_lft forever preferred_lft forever
inet6 fe80::2c7c:dff:fed0:36f9/64 scope link
valid_lft forever preferred_lft forever
haitao@debian:~$
- 告诉 libvirtd 哪里用来存放磁盘镜像(默认是/var/lib/libvirt/images/)
haitao@debian:~$ virsh pool-create-as srv-kvm dir --target /srv/kvm/
Pool srv-kvm created
haitao@debian:~$
- 将用户添加到 libvirt 组(就不用老是 sudo 去使用 libvirt 的命令了)
usermod -aG libvirt haitao
- 开始安装虚拟机
haitao@debian:~$ sudo virt-install --name testkvm --disk /srv/kvm/testkvm.qcow2,format=qcow2,size=10 --vcpus 1 --memory 1024 --cdrom cirros-0.3.4-x86_64-disk.img --network bridge=br0 --graphics vnc --os-type generic
WARNING Graphics requested but DISPLAY is not set. Not running virt-viewer.
WARNING No console to launch for the guest, defaulting to --wait -1
Starting install...
Allocating 'testkvm.qcow2' | 10 GB 00:00
Domain is still running. Installation may be in progress.
Waiting for the installation to complete. #在这个地方,终端会一直卡在这里,不要 cut 掉它,新建终端即可!
Domain has shutdown. Continuing.
Domain creation completed.
User stopped the VM. Not rebooting.
haitao@debian:~$
- 查看客户机(domain)
root@debian:~# virsh list
Id Name State
-------------------------
1 testkvm running
报错
第一次安装虚拟机的时候,我忘记先创建镜像文件了,然后直接用了这条命令:
haitao@debian:~$ virt-install --name testkvm --disk /srv/kvm/testkvm.qcow2,format=qcow2,size=10 --vcpus 1 --memory 1024 --cdrom cirros-0.3.4-x86_64-disk.img --network bridge=br0 --graphics vnc --os-type linux
WARNING OS name 'linux' is deprecated, using 'generic' instead. This alias will be removed in the future. # linux 选项已被弃用,改用 generic 即可!
WARNING KVM acceleration not available, using 'qemu'
WARNING Graphics requested but DISPLAY is not set. Not running virt-viewer.
WARNING No console to launch for the guest, defaulting to --wait -1
Starting install...
ERROR Couldn't create storage volume 'testkvm.qcow2': 'internal error: Child process (/usr/bin/qemu-img create -f qcow2 -o preallocation=metadata,compat=1.1,lazy_refcounts /srv/kvm/testkvm.qcow2 10485760K) unexpected exit status 1: qemu-img: /srv/kvm/testkvm.qcow2: Could not create '/srv/kvm/testkvm.qcow2': Permission denied # 镜像文件(qcow2) 没有创建,最好先用 `qemu-img create` 创建镜像文件(动态变化的,不怕占磁盘)
'
Domain installation does not appear to have been successful.
If it was, you can restart your domain by running:
virsh --connect qemu:///session start testkvm
otherwise, please restart your installation.