Libvirt+KVM+QEMU虚拟机

100 阅读3分钟

一、实践环境

1.1 硬件

BIOS设置

一般地,开机进入BISO设置界面,从Advance选项入口开启VT-D选项支持虚拟化功能。

检查VT是否在BIOS启用

sudo apt install cpu-checker
kvm-ok
## output
INFO: /dev/kvm exists
KVM acceleration can be used

1.2 系统

ubuntu版本

NAME="Ubuntu"
VERSION="20.04.6 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.6 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

验证CPU是否支持虚拟化

grep -Eoc '(vmx|svm)' /proc/cpuinfo 
## output
32 ## 大于0的数值

二、安装组件

2.1 安装libvirt

apt -y install libvirt-dev
apt -y install libvirt-daemon-system 
apt -y install libvirt-clients
apt -y install virtinst ## virt-install工具
apt -y install virt-manager

2.2 安装kvm+qemu

apt -y install qemu-kvm

2.3 安装网桥工具

apt -y install bridge-utils

2.4 检查kvm模块

验证kvm,输出kvm_intel、kvm两列 表示安装成功

lsmod | grep kvm

三、网络配置

3.1 配置网桥

cat /etc/netplan/01-network-manager-all.yaml,把网桥br0绑定到网卡enp0s31f6。

# Let NetworkManager manage all devices on this system
network:
    version: 2
    #renderer: NetworkManager

    ethernets:
        enp0s31f6:
            dhcp4: false
            dhcp6: false
    bridges:
        br0:
            addresses: [10.159.10.9/23]
            gateway4: 10.159.11.254
            nameservers:
                addresses: [202.101.172.35, 8.8.8.8]
                search: [msnode]
            interfaces: [enp0s31f6]

3.2 重启网络

netplan apply
systemctl restart network-manager

网络变化:ip地址被绑定到br0网桥上,同时多了一个virbr0网桥(用于创建虚拟机时指定的网桥,通过DHCP动态获取虚拟机IP地址)

ip addr
## output
enp0s31f6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master br0 state UP group default qlen 1000
    link/ether 04:42:1a:df:d4:f9 brd ff:ff:ff:ff:ff:ff
virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 52:54:00:26:c2:de brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever
virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000
    link/ether 52:54:00:26:c2:de brd ff:ff:ff:ff:ff:ff
br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 04:42:1a:df:d4:f9 brd ff:ff:ff:ff:ff:ff
    inet 10.159.10.9/23 brd 10.159.11.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::642:1aff:fedf:d4f9/64 scope link 
       valid_lft forever preferred_lft forever

3.3 重启libvirtd

systemctl restart libvirtd

四、启动虚拟机

工作目录是/data

4.1 cirros镜像

4.1.1 下载

下载地址

4.1.2 安装

virt-install --connect=qemu:///system --name=cirros --ram=512 --vcpus=1 \
--disk path=cirros-0.6.2-x86_64-disk.img,format=qcow2 --import --network network:default --vnc

4.1.3 查看

virsh list 
virsh vncdisplay cirros ## 查看VNC端口
## output
:0

4.1.4 登录系统

a. VNC方式

默认账号(cirros/gocubsgo

安装VNC客户端

image.png

b. ssh方式

ssh cirros@192.168.122.202

4.2 centos7镜像

4.2.1 下载

保存到iso目录

下载地址

4.2.3 格式化硬盘

apt-get install qemu-utils

## 修改qemu的权限为root:root
cat >> /etc/libvirt/qemu.conf <<EOF
user=root
group=root
EOF

cd kvm/image
qemu-img create -f qcow2 ./centos7.qcow2 20G

4.2.2 安装

网桥参数为virbr0而非br0,启动过程中注意选择磁盘设置与root账号设置,其他仅为测试不重要。

virt-install \
  --name=centos1 \
  --memory=1024,maxmemory=8096 \
  --vcpus=4,maxvcpus=8 \
  --os-type=linux \
  --os-variant=rhel7 \
  --location=/data/iso/CentOS-7-x86_64-Minimal-2009.iso \
  --disk path=/data/kvm/image/centos7.qcow2,size=50 \
  --bridge=virbr0 \
  --graphics=none \
  --console=pty,target_type=serial  \
  --extra-args="console=tty0 console=ttyS0"
  --vnc

4.2.3 查看

virsh list 
virsh vncdisplay centos1 ## 查看VNC端口
## output
:1

xml配置

virsh dumpxml centos1
## output 与VNC有关
<graphics type='vnc' port='5901' autoport='yes' listen='0.0.0.0'>
    <listen type='address' address='0.0.0.0'/>
</graphics>

4.2.4 登录系统

a. VNC方式

VNC Server为 <ip>:<vncport>格式

image.png

b. ssh方式

ssh root@192.168.122.230

c. console方式

virsh list
## output
 Id   Name      State
-------------------------
 2    cirros    running
 11   centos1   running

virsh console 11
## output
Connected to domain centos1
Escape character is ^]
CentOS Linux 7 (Core)
Kernel 3.10.0-1160.el7.x86_64 on an x86_64
localhost login: root

Password:

参考链接