关于虚拟化技术
虚拟化是一种通过模拟计算机硬件,使一台计算机可以同时运行多个不同操作系统的技术。虚拟化极大地提高了硬件资源的利用率,同时降低了物理设备的成本和管理复杂性。
虚拟化软件的差别
qume 全虚拟化软件,特别慢但是兼容性特别好。
xen 半虚拟化软件,需要使用专门修改之后的内核,性能很高,兼容性很差。redhat在5.5的版本将xen替换成kvm
kvm 全虚拟化软件,它具有硬件支持cpu,内置在linux内核模块中,不需要使用专门的内核。性能好,兼容性好。
kvm的兼容性没有qume好,但是他比qume的性能好太多了
kvm的性能没有xen好,但是他比xen的兼容性好太多了
安装KVM
KVM全称:Kernel-based Virtual Machine
libvirt:因为KVM是基于内核的,linux用户是没办法直接操作内核的,这个软件包就是一个操作的工具。
virt-install:安装虚拟机用的。
qume-kvm:kvm是没有自己的虚拟磁盘技术的,所以直接兼容了qume的虚拟磁盘,这个包即兼容并优化了qume的磁盘。
yum install libvirt virt-install qemu-kvm -y
systemctl enable --now libvirtd
虚机管理
创建一个虚拟机
[root@template ~]# virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-Minimal-1511.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
Starting install...
Allocating 'centos.raw' | 10 GB 00:00:00
Domain installation still in progress. You can reconnect to
the console to complete the installation process.
要注意的是--cdrom参数,镜像不要放在root目录下会报权限相关的问题,建议丢到一个公共的位置,例如/opt下,然后操控的用户和用户组都是qemu
创建好之后可以通过vnc来连接,这里设置离连接方式是vnc,并且监听的位置是0.0.0.0
管理命令
主要使用virsh
来管理KVM虚拟机
列出虚机
virsh list
这条命令默认是列出所有运行的虚机,如果虚机在关闭状态则不会列出,想要列出所有状态的虚机需要添加--all
参数
关机
virsh shutdown 虚机名
关机的话系统必须装好,否则没用
开机
virsh start 虚机名
强制关机
virsh destroy 虚机名
这相当于拔掉虚机的电源
重启
virsh reboot 虚机名
重启的话系统必须装好,否则没用
导出配置
virsh dumpxml 虚机名
导出对应虚机的配置文件
取消定义
这里是把对应的虚拟机移除kvm的管理里,相当于从kvm中删除,配置文件也会被删除,但是实际的镜像文件还是会保留。
virsh undefine 虚机名
导入配置
virsh define xml配置文件
修改配置
virsh edit 虚机名
挂起
virsh suspend 虚机名
锁定当前状态
恢复
virsh resume 虚机名
开机自启
virsh autostart 虚机名
可以添加参数--disable
来取消开机自启
列出所有开机自启主机
virsh list --autostart --all
不加参数--all
参数的话,只会列出开机的主机。
控制台
virsh console 虚机名
想要通过console
直接连接控制虚机,需要提前在虚拟机中执行下面命令让其支持(执行完请重启虚机)
grubby --update-kernel=ALL --args="console=ttyS0,115200n8"
磁盘管理
关于磁盘格式
- RAW:原始格式,也叫野格式,不支持快照功能,不方便传输,读写性能较好。
qcow2:qcow2(copy on write)写时复制(动态占用空间),占用空间小,支持快照,性能比raw差一点,方便传输。
管理命令
主要使用
qemu-img
来管理KVM虚拟机磁盘信息
qemu-img info 虚拟磁盘
创建磁盘
qemu-img create -f qcow2 位置 大小
例如
qemu-img create -f qcow2 /opt/test.qcow2 1G
在
/opt/test.qcow2
位置创建一个1G大小的磁盘调整容量
qemu-img resize /opt/test.qcow2 +1G
给test.qcow2添加1G
后面是容量指令,具体格式参考如下- 5G 大小调整到5G
- +1G 大小增加1G
-1G 大小减小1G
RAW转换QCOW2
qemu-img convert -f raw -O qcow2 xxx.raw xxx.qcow2
这个操作请在虚拟机关闭的状态下执行,执行之后会保留之前的文件然后生成新的qcow2文件。
然后转换之后如果想开机时使用QCOW2的镜像需要edit一下虚机的配置文件qemu-img convert -f raw -O qcow2 centos.raw centos.qcow2 virsh edit centos7
大概在35行左右,原文如下
<disk type='file' device='disk'> <driver name='qemu' type='raw'/> <source file='/opt/centos.raw'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </disk>
修改成下面这种效果
<disk type='file' device='disk'> <driver name='qemu' type='qcow2'/> <source file='/opt/centos.qcow2'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/> </disk>
其他功能
快照
创建快照
virsh snapshot-create centos7 --atomic --disk-only
这里我们为虚拟机 centos7 创建了一个快照,使用了 --atomic
表示如果失败则完全回滚,--disk-only
表示仅对磁盘创建快照。
查看快照
virsh snapshot-list centos7
恢复快照
virsh snapshot-revert centos7 snapshot1
删除快照
virsh snapshot-delete centos7 snapshot1
其他
在创建和管理快照时,可以添加选项控制快照类型(disk-only、system-checkpoint等)、是否包含内存状态等,灵活控制快照行为。
克隆
完整克隆
被克隆的主机一定要处于被挂起或者关闭的状态下
使用virt-clone工具
[root@template opt]# virt-clone --auto-clone -o centos7 -n centos7-2
Allocating 'centos-clone.qcow2' | 10 GB 00:00:09
Clone 'centos7-2' created successfully.
手动克隆
qemu-img convert -f qcow2 -O qcow2 -c centos.qcow2 centos2.qcow2
virsh dumpxml centos7 > centos7-2.xml
编辑导出的xml,主要修改下面几个字段
修改 domain.name # 名字
删除 domain.uuid # uuid
删除 domain.devices.interface.mac # mac地址
修改 domain.devices.disk.source-file # 虚拟磁盘文件指定为新手动复制的。
编辑好之后导入虚机
virsh define centos7-2.xml
链接克隆
连接克隆要注意的是不能使用RAW格式的磁盘,他是不支持的。
创建引用磁盘
qemu-img create -f qcow2 -b centos.qcow2 centos3.qcow2
此时去查看centos3.qcow2的信息如下
[root@template opt]# qemu-img info centos3.qcow2
image: centos3.qcow2 file format: qcow2 virtual size: 10G (10737418240 bytes) disk size: 196K cluster_size: 65536 backing file: centos.qcow2
Format specific information: compat: 1.1 lazy refcounts: false
会发现这个字段backing file: centos.qcow2
导出xml
virsh dumpxml centos7 > centos7-3.xml
编辑导出的xml,主要修改下面几个字段
修改 domain.name # 名字
删除 domain.uuid # uuid
删除 domain.devices.interface.mac # mac地址
修改 domain.devices.disk.source-file # 虚拟磁盘文件指定为新手动复制的。
编辑好之后导入虚机
virsh define centos7-3.xml
网络
桥接网卡
如果想要将主机桥接到某个网络中则需要搞一个桥接网卡,可以通过下面命令进行桥接
virsh iface-bridge ens33 br0
ens33是被桥接的网卡,br0是桥接之后的网卡,桥接的过程中可能会出现很多问题,我出现的问题是断网,然后开启网卡开启失败具体可以参考文章
取消桥接
virsh iface-unbridge br0
创建虚机指定网卡
参数--network network=default
是NAT模式,全部参数可以参考下面
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-Minimal-1511.iso --network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
参数--network bridge=br0
是桥接模式,全部参数可以参考下面
virt-install --virt-type kvm --os-type=linux --os-variant rhel7 --name centos7 --memory 1024 --vcpus 1 --disk /opt/centos.raw,format=raw,size=10 --cdrom /opt/CentOS-7-x86_64-Minimal-1511.iso --network bridge=br0 --graphics vnc,listen=0.0.0.0 --noautoconsole
已有虚机更换网卡
通过下面命令编辑配置
virsh edit 虚机名
修改domain.devices.interface
字段,默认值如下
<interface type='network'>
<mac address='52:54:00:25:a6:67'/>
<source network='default'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
修改成下面这样
<interface type='bridge'>
<mac address='52:54:00:25:a6:67'/>
<source bridge='br0'/>
<model type='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
主要是interface
的type
字段和interface.source
的字段。
注意
每次桥接和取消桥接都会永久性的修改网卡的配置文件,这个需要注意。
关于KVM创建的虚拟机
KVM虚拟机主要有两部分组成,一部分是磁盘文件,在创建的时候通过下面命令已经指定--disk /opt/centos.raw,format=raw,size=10
另外一部分是配置文件,配置文件默认位置在/etc/libvirt/qemu
中,一般采用dumpxml来导出,只要拥有xml和镜像文件就可以恢复虚机。