知识点
1、RAW 采用预分配空间方式 , 也就是虚拟机磁盘 20G , 物理主机就会产生一个20G的文件
2、QCOW2 采用延迟分配方式 , 一开始磁盘文件在物理主机上只占很小的空间 , 随着向虚拟机写入数据 , 这个硬盘文件会自动增长
默认位置:/var/lib/libvirt/images
[root@localhost ~]# cat /proc/cpuinfo | egrep 'vmx|svm' #首先验证CPU是否支持虚拟化,输入有vmx或svm就支持,支持虚拟化则就支持KVM
[root@localhost ~]# lsmod | grep kvm #查看是否加载KVM
[root@localhost ~]# modprobe kvm #命令加载KVM
部署KVM环境
[root@localhost ~]# yum install qemu-kvm qemu-img virt-manager libvirt libvirt-python virt-manager libvirt-client virt-install virt-viewer -y
[root@localhost ~]# systemctl start libvirtd && systemctl enable libvirtd #启动libvirt并设置开机自启动
br0桥接到em1网卡
[root@localhost ~]# virsh iface-bridge em1 br0 #注意操作后会断网,需要修改br0中的网卡信息及添加DNS信息
禁用网络过滤器(可选)
向文件/etc/sysctl.conf添加以下代码:
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0
[root@localhost ~]# sysctl -p
brctl 命令详解
brctl addbr br0 #创建网桥br0
brctl delbr br0 #删除网桥br0
brctl addif br0 em1 #将em1端口加入网桥br0 brctl delif br0 em1
brctl delif br0 em1 #删除em1端口加入网桥br0
show brctl show br0 #查询网桥信息
VNC配置
[root@localhost ~]# yum install tigervnc-server -y
[root@localhost ~]# cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@:1.service
[root@localhost ~]# cat>/etc/systemd/system/vncserver@:1.service<<"EOF"
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=simple
User=<USER>
ExecStartPre=-/usr/bin/vncserver -kill %i
ExecStop=-/usr/bin/vncserver -kill %i
ExecStart=/sbin/runuser -l root -c "/usr/bin/vncserver %i"
PIDFile=/root/.vnc/%H%i.pid
#ExecStart=/sbin/runuser -l users -c "/usr/bin/vncserver %i"
#PIDFile=/home/users/.vnc/%H%i.pid
[Install]
WantedBy=multi-user.target
EOF
重启 systemd
[root@localhost ~]# systemctl daemon-reload
设置密码
[root@localhost ~]# vncpasswd
启动VNC
[root@localhost ~]# systemctl enable vncserver@:1.service
[root@localhost ~]# systemctl start vncserver@:1.service
防火墙开启VNC服务
[root@localhost ~]# firewall-cmd --permanent --add-service vnc-server
[root@localhost ~]# firewall-cmd --reload
安装KVM虚拟主机
[root@localhost ~]# mkdir -p /kvm/CentOS-1/
virt-install \
--name CentOS-1 \
--ram 4096 \
--vcpus=2 \
--disk path=/kvm/CentOS-1/CentOS-1.qcow2,size=40 \
--accelerate --cdrom /data/mirrors/CentOS-7-x86_64-Minimal-1810.iso \
--graphics vnc,listen=0.0.0.0,port=15901, \
--network bridge=br0,model=virtio \
--force \
--autostart \
--noautoconsole
virsh 相关命令
查看帮助
virsh --help
列出运行状态的虚拟机
virsh list
列出所有的虚拟机
virsh list --all
列出虚拟网络
virsh net-list
查看指定虚拟机的信息
virsh dominfo 虚拟机名称
启动虚拟机
virsh start 虚拟机名称
重启虚拟机
virsh reboot 虚拟机名称
关闭虚拟机
virsh shutdown 虚拟机名称
强制关闭虚拟机
virsh destroy 虚拟机名称
设置虚拟机开机自启
virsh autostart 虚拟机名称
创建虚拟机快照
virsh snapshot-create-as --domain 虚拟机名称 --name 快照名 --description "快照备注"
还原虚拟机快照
virsh snapshot-revert 虚拟机名称 快照名
删除虚拟机快照
virsh snapshot-delete --domain 虚拟机名称 --snapshotname 快照名
查询虚拟机快照详情
virsh snapshot-list --domain 虚拟机名称
删除虚拟机定义
virsh undefine 虚拟机名称
通过 virt-clone工具进行克隆 kvm 虚拟机
[root@localhost ~]# mkdir -p /kvm/CentOS-2/
[root@localhost ~]# virt-clone -o CentOS-2 -n CentOS-1 --file /kvm/CentOS-1/CentOS-2.qcow2 --file /kvm/CentOS-1/CentOS-2.qcow2
virt-clone 参数介绍 Options(一些基本的选项):
–version:查看版本
-h,–help:查看帮助信息
–connect=URI:连接到虚拟机管理程序 libvirt 的URIGeneral Option(一般选项):
-o ORIGINAL_GUEST, –original=ORIGINAL_GUEST:原来的虚拟机名称
-n NEW_NAME, –name=NEW_NAME:新的虚拟机名称
–auto-clone:从原来的虚拟机配置自动生成克隆名称和存储路径。
-u NEW_UUID, –uuid=NEW_UUID:克隆虚拟机的新的UUID,默认值是一个随机生成的UUIDStorage Configuration(存储配置):
-f NEW_DISKFILE, –file=NEW_DISKFILE:指定新的虚拟机磁盘文件
–force-copy=TARGET:强制复制设备
–nonsparse:不使用稀疏文件复制磁盘映像Networking Configuration:(网络配置)
-m NEW_MAC, –mac=NEW_MAC:设置一个新的mac地址,默认是一个随机的mac
查看 kvm 虚拟机的xml文件(kvm虚拟机配置信息)
[root@srv qemu]# ls -lh /etc/libvirt/qemu/CentOS-*
-rw------- 1 root root 4.1K Mar 11 16:14 /etc/libvirt/qemu/CentOS-1.xml
-rw------- 1 root root 4.1K Mar 11 17:24 /etc/libvirt/qemu/CentOS-2.xml
或
编辑虚拟主机配置文件
[root@srv qemu]# virsh edit CentOS-2
查看 kvm 虚拟机的 img 文件(kvm虚拟机磁盘文件)
[root@srv qemu]# ll /kvm/* -h
/kvm/CentOS-1:
total 2.7G
-rw------- 1 root root 41G Mar 11 16:51 CentOS-1.qcow2
-rw------- 1 qemu qemu 1.3G Mar 11 17:30 CentOS-2.qcow2
查看 xml 文件总的 source file 信息 (kvm虚拟机img文件路径)
[root@srv qemu]# grep "source file" /etc/libvirt/qemu/CentOS-*
/etc/libvirt/qemu/CentOS-1.xml: <source file='/kvm/CentOS-1/CentOS-1.qcow2'/>
/etc/libvirt/qemu/CentOS-2.xml: <source file='/kvm/CentOS-1/CentOS-2.qcow2'/>
查看 xml 文件中的 mac address (kvm虚拟机mac地址)
[root@srv qemu]# grep "mac address" /etc/libvirt/qemu/CentOS-*
/etc/libvirt/qemu/CentOS-1.xml: <mac address='52:54:00:76:90:e3'/>
/etc/libvirt/qemu/CentOS-2.xml: <mac address='52:54:00:19:51:d3'/>
KVM迁移
复制CentOS-2目录到其他host机器的/var/lib/libvirt/images/ 或者 /kvm 目录下
复制CentOS-2.xml文件到其他机器的/etc/libvirt/qemu/目录下
修改CentOS-2.xml中的路径,确保CentOS-1.qcow2和CentOS-2.qcow2路径正确
在/etc/libvirt/qemu目录下 执行virsh define ./CentOS-2.qcow2.xml
virt-edit -d CentOS-2.qcow2 /etc/network/interfaces
修改其中的ip地址virsh start CentOS-2.qcow2
如果以此为模板, clone多个的话,一定要设置不同的网卡地址,如何设置很简单,在/etc/network/interfaces文件中添加一行指令即可。auto eth0iface eth0 inet dhcp hwaddress ether 01:02:03:04:05:06
冷导出
虚拟机CentOS-1是开启状态
保存当前的运行状态
[root@srv qemu]# virsh save CentOS-1 /etc/libvirt/qemu/CentOS-1.xml.save
scp或者rsync把相关的文件都拷贝到被导出的宿主机
[root@srv qemu]# scp /etc/libvirt/qemu/kvm1.xml.save x.x.x.x:/etc/libvirt/qemu/
[root@srv qemu]# scp /etc/libvirt/qemu/kvm1.xml x.x.x.x:/etc/libvirt/qemu/
[root@srv qemu]# scp /var/lib/libvirt/images/kvm1.qcow2 x.x.x.x:/var/lib/libvirt/images/
到x.x.x.x(也就是导出的目标宿主机)上操作
[root@srv qemu]#virsh define /etc/libvirt/qemu/kvm1.xml --define一下,然后就可以用virsh list --all查看到
[root@srv qemu]#virsh restore /etc/libvirt/qemu/kvm1.xml.save