- 本文作者: wumingx
- 本文链接: https://www.wumingx.com/linux/centos-kvm.html
- 本文主题: 实战CentOS7安装且使用KVM虚拟机
- 版权声明: 本站所有文章除特别声明外,转载请注明出处!如有侵权,请联系我删除。
镜像格式
介绍
- RAW格式是直接给云服务器进行读写的文件。RAW不支持动态增长空间,是镜像中I/O性能最好的一种格式。
-
QCOW2格式镜像是QEMU模拟器支持的一种磁盘镜像,是用一个文件的形式来表示一块固定大小的块设备磁盘。与普通的RAW格式镜像相比,QCOW2格式有如下几个特性:
- 支持更小的磁盘占用。
- 支持写时拷贝(CoW,Copy-On-Write),镜像文件只反映底层磁盘变化。
- 支持快照,可以包含多个历史快照。
- 支持压缩和加密,可以选择ZLIB压缩和AES加密。
-
VMDK是VMware创建的虚拟硬盘格式。一个VMDK文件代表VMFS(云服务器文件系统)在云服务器上的一个物理硬盘驱动。
- VHD是微软提供的一种虚拟硬盘文件格式。VHD文件格式可以被压缩成单个文件存放到宿主机的文件系统上,主要包括云服务器启动所需的文件系统。微软在Windows Server 2012中的Hyper-V引入的一个新版本的VHD格式,称为VHDX。与VHD格式相比,VHDX具有更大的存储容量。它在电源故障期间提供数据损坏保护,并且优化了磁盘结构对齐方式,以防止新的大扇区物理磁盘性能降级。
- vdi(Virtual Disk Image)是Oracle的VirtualBox虚拟机中的存储格式
格式转化
在日常使用镜像的过程中,您可能需要将某格式的镜像转换为其他格式,qemu-img工具支持vhd、vmdk、qcow2、raw、vhdx、qcow、vdi或qed格式的镜像之间相互转换。在centos上,直接使用yum install qemu-img即可。
基本语法
1 |
qemu-img command [command options] |
主要参数
- info : 查看镜像的信息;
- create: 创建镜像;
- check: 检查镜像;
- convert: 转化镜像的格式;
- snapshot :管理镜像的快照;
- rebase: 在已有的镜像的基础上创建新的镜像;
- resize: 增加或减小镜像大小
创建镜像, create
1 |
[root@ubuntu ~]# qemu-img create -f raw -o size=5G /data/raw/raw-disk01.raw |
- -f fmt: 执行格式
- -o options: list of format specific options in a name1=value1,name2=value2… format. size=5G, 5G大小
1 |
[root@ubuntu cache2]# qemu-img create -f raw -o size=1G t1.raw |
从显示的文件大小上面是可以看出区别的。
查看镜像的信息, info
1 |
[root@ubuntu ~]# qemu-img info /data/raw/raw-disk01.raw |
镜像格式转换, convert
1 |
[root@ubuntu ~]# qemu-img convert -f raw -O qcow2 /data/raw/raw-disk01.raw /data/raw/qcow2-disk01.qcow2 |
- -f: 指定原镜像的格式,会自动检查可以省略
- -O: 指定目标镜像格式
镜像快照, snapshot
1 |
[root@ubuntu ~]# qemu-img snapshot /data/raw/qcow2-disk01.qcow2 -c /data/raw/qcow2-disk01.qcow2.snapshot |
- -c: 创建快照
- -l: 列出快照
- -d: 删除快照
*ps: raw不支持快照,只有qcow2支持快照
调整镜像大小, resize
1 |
[root@ubuntu ~]# qemu-img resize /data/raw/disk02.raw +2G |
ps: raw格式镜像大小都可以调整,qcow2格式镜像只能增大,不能缩小
检查镜像,check
对磁盘镜像文件进行一致性检查,查找镜像文件中的错误,目前仅支持对“qcow2”、“qed”、“vdi”格式文件的检查。qcow2是QEMU 0.8.3版本引入的镜像文件格式,也是目前使用最广泛的格式。qed(QEMU enhanced disk)是从QEMU 0.14版开始加入的增强磁盘文件格式,为了避免qcow2格式的一些缺点,也为了提高性能,不过目前还不够成熟
1 |
[root@ubuntu ~]# qemu-img check -f qcow2 /data/raw/qcow2-disk01.qcow2 |
- -f fmt: 指定文件的格式,如果不指定格式qemu-img会自动检测
安装KVM环境
检测是否支持KVM
KVM 是基于 x86 虚拟化扩展(Intel VT 或者 AMD-V) 技术的虚拟机软件,所以查看 CPU 是否支持 VT 技术,就可以判断是否支持KVM。有返回结果,如果结果中有vmx(Intel)或svm(AMD)字样,就说明CPU的支持的。
1 |
cat /proc/cpuinfo | egrep 'vmx|svm' |
关闭SELinux,将 /etc/sysconfig/selinux 中的 SELinux=enforcing 修改为 SELinux=disabled。
安装方法
通过yum就可以安装kvm基础包和管理工具了。kvm相关安装包及其作用:
qemu-kvm主要的KVM程序包python-virtinst创建虚拟机所需要的命令行工具和程序库virt-managerGUI虚拟机管理工具virt-top虚拟机统计命令virt-viewerGUI连接程序,连接到已配置好的虚拟机libvirtC语言工具包,提供libvirt服务libvirt-client为虚拟客户机提供的C语言工具包virt-install基于libvirt服务的虚拟机创建命令bridge-utils创建和管理桥接设备的工具
1 |
# 安装 kvm |
开启kvm服务,并且设置其开机自动启动
1 |
systemctl start libvirtd |
查看状态操作结果,如Active: active (running),说明运行情况良好
1 |
systemctl status libvirtd |
安装虚拟机
有2种方式,经过个人测试,建议使用VNC来创建,兼容性更好。
通过VNC来远程
1 |
# 先创建一个磁盘 |
通过 https://www.realvnc.com/en/connect/download/viewer/ 下载这个工具就可以通过VNC来远程了。运行完成之后,centos7的系统可以使用 grubby --update-kernel=ALL --args="console=ttyS0"来更新下,这时就可以实现console了。
通过重定向来远程
1 |
virt-install --virt-type=kvm --name=centos88 --vcpus=2 --memory=4096 --location=/tmp/CentOS-7-x86_64-Minimal-2003.iso --disk path=/cache2/centos88.qcow2,size=40,format=qcow2 --network bridge=br0 --graphics none --extra-args='console=ttyS0' --force |
创建成功之后,可以通过virsh console centos88来远程上机器操作了。
添加硬件
磁盘相关
1 |
|
https://opengers.github.io/virtualization/kvm-online-add-device/
快照
常用使用方法:
-
创建默认快照(一般为一串数字):
virsh snapshot-create 虚拟机名称 -
创建自定义名称快照:
virsh snapshot-create-as 虚拟机名称 快照名称 - 查看虚拟机相关的快照:
virsh snapshot-list 虚拟机名 - 删除快照:
virsh snapshot-delete 虚拟机名 快照名称 - 恢复快照:
virsh snapshot-revert 虚拟机名称 快照名称
1 |
[root@localhost Plcm-SoftMcuMain]# virsh snapshot-list --domain centos88 |
克隆虚拟机
1 |
# 暂停原始虚拟机 |
virt-clone 参数介绍
--version查看版本。-h,--help查看帮助信息。--connect=URI连接到虚拟机管理程序 libvirt 的URI。-o 原始虚拟机名称原始虚拟机名称,必须为关闭或者暂停状态。-n 新虚拟机名称—name 新虚拟机名称。--auto-clone从原来的虚拟机配置自动生成克隆名称和存储路径。-u NEW_UUID, --uuid=NEW_UUID克隆虚拟机的新的UUID,默认值是一个随机生成的UUID。-m NEW_MAC, --mac=NEW_MAC设置一个新的mac地址,默认为随机生成 MAC。-f NEW_DISKFILE, --file=NEW_DISKFILE为新客户机使用新的磁盘镜像文件地址。--force-copy=TARGET强制复制设备。--nonsparse不使用稀疏文件复制磁盘映像。
虚拟机迁移
需求:hids01需要迁移一台虚拟机到hids02、hids03的机器上。
先将以下文件scp到其他的机器上:
1 |
[root@hids01 hids]# virsh domblklist hids |
在hids02、hids03的机器上面修改hids.xml文件,修改name、uuid、mac这三项即可
1 |
cat hids.xml |egrep "<name>|mac address|uuid" |
- mac地址的生成方法:
for i in {1..6}; do printf "%0.2X:" $[ $RANDOM % 0x100 ]; done | sed 's/:$/\n/' - uuid的生成方法:
uuidgen
接下来按以下操作:
1 |
[root@hids02 hids]# virsh define --file hids.xml |
动态更改cpu数量和内存大小
动态调整,如果超过给虚拟机分配的最大内存,需要重启虚拟机。
1 |
virsh list --all |
网络模式
KVM 虚拟机默认是基于 NAT 的网络配置,只有同一宿主机的虚拟键之间可以互相访问,跨宿主机是不能访问;如果要实现跨宿主机可以访问,需要将网络模式配置成桥接模式。
NAT模式
NAT(Network Address Translation网络地址翻译),NAT方式是kvm安装后的默认方式。它支持主机与虚拟机的互访,同时也支持虚拟机访问互联网,但不支持外界访问虚拟机。
1 |
virsh net-edit default # 如果要创建或者修改NAT网络,要先编辑default.xml: |
其中virbr0是由宿主机虚拟机支持模块安装时产生的虚拟网络接口,也是一个switch和bridge,负责把内容分发到各虚拟机。几个虚拟机管理模块产生的接口关系如下图:
1 |
┌───────────────────────┐ |
从图上可以看出,虚拟接口和物理接口之间没有连接关系,所以虚拟机只能在通过虚拟的网络访问外部世界,无法从网络上定位和访问虚拟主机。
virbr0是一个桥接器,接收所有到网络192.168.122.*的内容。从下面命令可以验证:
1 |
brctl show |
同时,虚拟机支持模块会修改iptables规则,通过命令可以查看:
1 |
iptables -t nat -L -nv |
如果没有default的话,或者需要扩展自己的虚拟网络,可以使用命令重新安装NAT。
1 |
virsh net-define /usr/share/libvirt/networks/default.xml |
此命令定义一个虚拟网络,default.xml的内容:
1 |
<network> |
也可以修改xml,创建自己的虚拟网络。
重新加载和激活配置:
1 |
virsh net-define /etc/libvirt/qemu/networks/default.xml |
标记为自动启动:
1 |
virsh net-autostart default |
启动网络:
1 |
virsh net-start default |
网络启动后可以用命令brctl show 查看和验证。
总结一下:如果想自定义一个网络,假设是需要创建名为management的NAT网络,vi /usr/share/libvirt/networks/management.xml
1 |
<network> |
启用新建的NAT网络
1 |
virsh net-define /usr/share/libvirt/networks/management.xml |
Bridge模式配置
Bridge方式即虚拟网桥的网络连接方式,是客户机和子网里面的机器能够互相通信。可以使虚拟机成为网络中具有独立IP的主机。桥接网络(也叫 物理设备共享)被用作把一个物理设备复制到一台虚拟机。网桥多用作高级设置,特别是主机多个网络接口的情况。
1 |
┌─────────────────────────┐ ┌─────────────────┐ |
通过ip 命令查看宿主机配置文件的名字
1 |
ip addr |
可以看到上面eno1是有获取到ip地址的,相对应的文件在/etc/sysconfig/network-scripts/目录中,ifcfg-eno1 宿主机的物理网卡配置文件
1 |
# cat ifcfg-eno1 |
ifcfg-br0 桥接网卡配置在同一个目录中。
1 |
# cat ifcfg-br0 |
配置好之后,通过systemctl 命令重启网卡。
1 |
ifup eno1 # 激活网卡 |
端口转发
现在我们还以上述VM为例,目前该KVM的公网IP为211.11.61.7,VM的IP为192.168.188.115,现在我要求通过访问KVM的2222端口访问VM的22端口。
编辑vi /etc/rc.d/rc.local 添加下面命令,达到开机重启配置网络转发规则。
1 |
# 启动网络转发规则 |
常用命令
virsh常用
1 |
virsh list --all # 查看所有运行和没有运行的虚拟机 |
参考资料
https://www.leolan.top/index.php/posts/134.html
Centos7.4安装kvm虚拟机(使用virt-manager管理)