构建 KVM 环境

发布时间 2023-05-09 15:23:41作者: no_tea

文档参考:
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 的部署步骤:

  1. 安装必备软件
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 让你访问虚拟机的图形控制台。

  1. 配置网桥隔离虚拟机但仍保留一定的网络权限。

编辑 /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:~$
  1. 告诉 libvirtd 哪里用来存放磁盘镜像(默认是/var/lib/libvirt/images/)
    haitao@debian:~$ virsh pool-create-as srv-kvm dir --target /srv/kvm/
    Pool srv-kvm created
    
    haitao@debian:~$
  1. 将用户添加到 libvirt 组(就不用老是 sudo 去使用 libvirt 的命令了)

usermod -aG libvirt haitao

  1. 开始安装虚拟机

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:~$
  1. 查看客户机(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.