一、kvm安装
1、CentOS
- yum安装
yum install -y qemu-kvm libvirt virt-install
二、虚拟机部署
1、配置网桥
1.1、ubuntu系统
配置虚拟网卡br0
,将虚拟网卡桥接到物理网卡enp11s0f1
上
root@node219:/data1# cat /etc/network/interfaces
auto lo
iface lo inet loopback
auto enp4s0f1
iface enp4s0f1 inet static
address 172.16.21.219
netmask 255.255.255.0
auto br0
iface br0 inet static
address 172.16.19.197
netmask 255.255.255.0
bridge_ports enp11s0f1
bridge_stp off
1.2、centos系统
配置虚拟网卡br0
,将虚拟网卡桥接到物理网卡enP1p8s0f3
上
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-enP1p8s0f3
BOOTPROTO=none
DEVICE=enP1p8s0f3
ONBOOT=yes
NM_CONTROLLED=no
BRIDGE=br0
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0
BOOTPROTO=static
DEVICE=br0
TYPE=Bridge
NM_CONTROLLED=no
IPADDR=172.16.21.161
NETMASK=255.255.255.0
GATEWAY=172.16.21.205
DNS1=114.114.114.114
DNS2=8.8.8.8
ONBOOT=yes
2、创建虚拟机
2.1、创建虚拟磁盘
创建qcow2
格式的虚拟磁盘文件ft2000.qcow2
,磁盘大小为100G
注:如需为虚拟机创建快照,磁盘格式必须为qcow2
,如使用raw
磁盘格式,则需要转换成qcow2
格式,转换命令:qemu-img convert -f raw -O qcow2 {xx.raw} {xx.qcow2}
root@node219:/data1# qemu-img create -f qcow2 ft2000.qcow2 100G
2.2、创建虚拟机
root@node219:/data1# virt-install --connect qemu:///system --virt-type kvm --name ft2000 --disk path=./ft2000.raw --ram 4096 --vcpus 4 --network bridge=br0 --memballoon model=virtio --cdrom=./zf-ft2000server.iso --graphics vnc,port=5900,listen='0.0.0.0' --autostart --noautoconsole --os-type=linux
- --name :虚拟机名称,此处为ft2000
- --disk path :虚拟机磁盘文件存放路径,此处为./ft2000.raw
- --ram :虚拟机内存大小,默认大小为MB,此处为4096(即4G)
- -vcpus :虚拟机CPU个数,此处为4
- --network bridge :虚拟机使用网桥名称,此处为br0
- --cdrom :虚拟机虚拟光盘映射镜像路径(用于系统安装),此处为zf-ft2000server.iso
2.3、连接虚拟机
修改虚拟机ft2000
启动端口后,开启虚拟机
root@node219:~# virsh edit ft2000
<graphics type='vnc' port='5904' autoport='no' listen='0.0.0.0'>
<listen type='address' address='0.0.0.0'/>
</graphics>
root@node219:~# virsh start ft2000
使用VNC Viewer
访问虚拟机地址172.16.19.197:5904
进行连接访问
正常来说,VNC(RFB协议)会根据网络质量自动调整画面质量,如KVM服务器VNC服务不能根据网络质量适配画面质量时,使用VNC Viewer
访问虚拟机控制台出现Attempting to reconnect to VNC Server Protocol error:invalid message type 20
错误信息,此时需要手动调整画面质量为具体一个等级(比如说Medium中等质量),VNC会话选择Properties
-->Options
,更改Picture quality
为Medium
(默认为Automatic
)
注:
1、若环境无法通过VNC访问虚拟机,则可通过以下方法连接
\查看当前虚拟机longsong网络Mac地址
[root@localhost data02]# virsh edit longsong
<interface type='network'>
<mac address='52:54:00:d1:a1:be'/>
<source network='default'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>
\通过arp -a查询Mac地址对应IP地址
[root@localhost data02]# arp -a
XiaoQiang (192.168.31.1) at 50:d2:f5:92:8d:b1 [ether] on enp0s3f0
? (192.168.122.100) at 52:54:00:61:1f:f9 [ether] on virbr0
? (192.168.122.49) at 52:54:00:d1:a1:be [ether] on virbr0
\宿主机直接ssh对应IP地址即可
[root@localhost data02]# ssh 192.168.122.49
2、若环境无法通过VNC访问虚拟机,则可通过virsh console {vm-name}
命令行连接到虚拟机控制台
三、常用操作
1、虚拟磁盘操作
1.1、添加虚拟磁盘
- 创建虚拟磁盘文件,磁盘格式为
qcow2
,磁盘大小为50G
root@node219:/data1# qemu-img create -f qcow2 /data2/ft2000-1.img 50G
- 添加磁盘到虚拟机上
root@node219:/data1# virsh attach-disk ft2000 /data2/ft2000-1.img sdc --cache none --subdriver qcow2 --config
注:如需在线添加,则在命令后添加参数--live
2、虚拟网卡操作
2.1、添加虚拟网卡
- 查看虚拟机网卡列表
root@node221:/data1# virsh domiflist vm94
Interface Type Source Model MAC
-------------------------------------------------------
vnet0 bridge br1 virtio 52:54:00:81:83:1c
- 添加虚拟网卡到虚拟机vm94
root@node221:/data1# virsh attach-interface vm94 --type bridge --source br1
Interface attached successfully
root@node221:/data1# virsh domiflist vm94
Interface Type Source Model MAC
-------------------------------------------------------
vnet0 bridge br1 virtio 52:54:00:81:83:1c
vnet3 bridge br1 virtio 52:54:00:38:4e:88
2.2、删除虚拟网卡
删除虚拟机vm94网卡(mac地址为52:54:00:38:4e:88)
root@node221:/data1# virsh detach-interface vm94 --type bridge --mac 52:54:00:38:4e:88 --config
3、克隆虚拟机
root@node219:/data1# virt-clone -o ft2000 -n vm201 -f /data1/vm201.raw -f /data1/vm201-1.img
- -o :后接模板虚拟机名称
- -n :后接目标虚拟机名称
- -f :后接目标虚拟机磁盘文件存放位置,当存在多个磁盘时,指定多个路径即可,示例模板虚拟机ft2000有一个系统盘和一个数据盘
4、虚拟机导入导出
- 虚拟机导出
#查看当前虚拟机列表
root@node69:/data/# virsh list --all
Id Name State
----------------------------------------------------
- ft2000-template shut off
#查看虚拟机磁盘文件和虚拟磁盘映射关系
root@node69:/data/# virsh domblklist ft2000-template
Target Source
------------------------------------------------
sda /data/ft2000-template.raw
sdb -
#导出虚拟机配置文件
root@node69:/data/# virsh dumpxml ft2000-template > ft2000-template.xml
- 虚拟机导入将虚拟机磁盘文件和配置文件拷贝到目标端,导入虚拟机文件即可
root@node67:/data# ll
total 55873340
drwxrwxrwx 2 node67 node67 4096 Sep 21 18:04 ./
drwxr-xr-x 27 root root 4096 Sep 19 11:53 ../
-rw------- 1 root root 53687091200 Sep 21 17:54 ft2000-template.raw
-rw-r--r-- 1 root root 4642 Sep 21 18:04 ft2000-template.xml
-rw-r--r-- 1 libvirt-qemu kvm 3527180288 Sep 11 17:09 zf-ft2000server.iso
root@node67:/data# virsh define ft2000-template.xml
Domain ft2000-template defined from ft2000-template.xml
root@node67:/data# virsh list --all
Id Name State
----------------------------------------------------
- ft2000-template shut off
5、重装虚拟机
因使用需求,需要对虚拟机进行重装系统操作,更改虚拟机配置信息后,重新启动虚拟机即可
相关配置信息修改如下:
- os更改启动方式为
cdrom
(从光驱启动),默认为hd
(从硬盘启动) - cdrom增加配置
<source file='/disk2/ft2500-zf/Kylin-Server-V10_U1-Release-Build02-20210729-arm64.iso'/>
,指定ISO文件路径,更改dev为hdc
注:需要对ISO多级父目录赋予执行权限chmod 755 -R /disk2/
,否则启动虚拟机会因权限不足启动失败error: internal error: qemu unexpectedly closed the monitor: Permission denied
<domain type='kvm'>
<os>
<boot dev='cdrom'/>
</os>
<devices>
<disk type='file' device='cdrom'>
<source file='/disk2/ft2500-zf/Kylin-Server-V10_U1-Release-Build02-20210729-arm64.iso'/>
<target dev='hdc' bus='scsi'/>
</disk>
</devices>
</domain>
6、基础操作命令
6.1、虚拟机管理
- 查看当前宿主机所有虚拟机:
virsh list --all
- 查看当前宿主机所有存储池:
virsh pool-list
- 命令行连接到某一台虚拟机:
virsh console {VM-name}
注:按下Ctrl ]
退出连接 - 关闭虚拟机:
virsh shutdown {VM-name}
- 开启虚拟机:
virsh start {VM-name}
- 强制关闭虚拟机:
virsh destroy {VM-name}
- 删除虚拟机:virsh
undefine {VM-name}
- 开启虚拟机开机自启动:
virsh autostart {VM-name}
- 关闭虚拟机开机自启动:
virsh autostart --disable {VM-name} --nvram
- 编辑虚拟机配置文件:
virsh edit {VM-name}
6.2、虚拟机快照
- 创建虚拟机快照:
virsh snapshot-create-as {VM-name} --name {snap-name} --description "{snap-description}"
- 查看虚拟机快照列表信息:
virsh snapshot-list {VM-name}
- 查看虚拟机某一快照具体信息:
virsh snapshot-info {VM-name} {snap-name}
- 恢复虚拟机快照:
virsh snapshot-revert {VM-name} {snap-name}
四、Q&A
1、error: Failed to connect socket to '/var/run/libvirt/libvirt-sock'
- 问题描述:
使用virsh命令操作失败,提示error: Failed to connect socket to '/var/run/libvirt/libvirt-sock'
[root@localhost home]# virsh define vm50.xml
error: failed to connect to the hypervisor
error: Failed to connect socket to '/var/run/libvirt/libvirt-sock': No such file or directory
- 解决措施:
启动libvirtd服务,设置开机自启动
systemctl start libvirtd
systemctl enable libvirtd
五、批量操作
1、批量克隆虚拟机
#!/usr/bin/env bash
DIR=$(cd `dirname $0`; pwd)
cd $DIR
for i in `seq 88 90`
do
#virsh undefine vm$i --nvram
#rm -rf /data1/vm$i.raw
virt-clone -o ft2000 -n vm$i -f /data1/vm$i.raw
qemu-img create -f qcow2 /data1/vm$i-1.img 50G
qemu-img create -f qcow2 /data1/vm$i-2.img 50G
virsh attach-disk vm$i /data1/vm$i-1.img sdc --cache none --subdriver qcow2 --config
virsh attach-disk vm$i /data1/vm$i-2.img sdd --cache none --subdriver qcow2 --config
done