KVM 自 Linux 2.6.20 版本后就直接整合到 Linux 内核, 它依托 CPU 虚拟化指令集实现高性能的虚拟化支持. 它与 Linux 内核高度整合, 因此在性能, 安全性, 兼容性, 稳定性上都有很好的表现.
在 KVM 环境中运行的每个虚拟化操作系统都将表现为单个独立的系统进程. 因此它可以很方便地与 Linux 系统中的安全模块进行整合(SELinux), 可以灵活的实现硬件资源的管理和分配, KVM 虚拟化的架构图如下:
话不多说, 开始搭建 KVM 虚拟化平台:
1, 安装:
- [[email protected] media]# yum -y groupinstall "GNOME Desktop" #安装 GNOME 桌面环境
- [[email protected] media]# yum -y install qemu-kvm #KVM 模块
- [[email protected] media]# yum -y install qemu-kvm-tools #KVM 调试工具, 可不安装
- [[email protected] media]# yum -y install virt-install #构建虚拟机的命令行工具
- [[email protected] media]# yum -y install qemu-img #qemu 组件, 创建磁盘, 启动虚拟机等
- [[email protected] media]# yum -y install bridge-utils #网络支持工具
- [[email protected] media]# yum -y install libvirt #虚拟机管理工具
- [[email protected] media]# yum -y install virt-manager #图形界面管理虚拟机
- [[email protected] media]# yum -y install libguestfs-tools #用来管理虚拟机磁盘格式
- [[email protected] ~]# ls -sf /lib/systemd/system/graphical.target /etc/systemd/system/default.target
- # 将系统默认运行的 target 更改为 graphical.target, 若不执行该命令, 重启时可能会报错.
2, 安装完毕后, 需重启系统, 执行下面命令对系统进行检查:
- [[email protected] ~]# cat /proc/cpuinfo | grep vmx
- # 查看 Intel 的 CPU 是否支持虚拟化, 若是 AMD 的 CPU, 需 "cat /proc/cpuinfo | grep smv"
- [[email protected] ~]# lsmod | grep kvm #检查 KVM 模块是否安装
- kvm_intel 170181 0
- kvm 554609 1 kvm_intel
- irqbypass 13503 1 kvm
- [[email protected] ~]# systemctl start libvirtd #启动 libvirtd 服务
- [[email protected] ~]# systemctl enable libvirtd
3, 设置 KVM 网络:
在 libvirt 中运行 KVM 网络有两种方法: NAT 和 Bridge, 默认是 NAT.
关于两种模式的说明如下:
(1)NAT 模式: 也是用户模式, 数据包由 NAT 方式通过主机的接口进行传送, 可以访问外网, 但是无法从外部访问虚拟机网络, 所以一般不会用到.
(2)Bridge: 也就是桥接模式, 这种模式允许虚拟机像一台独立的主机一样拥有网络, 外部的机器可以直接访问到虚拟机内部, 但需要网卡支持, 一般有线网卡都支持.
我这里以 Bridge(桥接模式)为例:
- [[email protected] ~]# VIM /etc/sysconfig/network-scripts/ifcfg-ens33
- TYPE=Ethernet
- BOOTPROTO=none #将这项改为 none
- DEFROUTE=yes
- PEERDNS=yes
- PEERROUTES=yes
- IPV4_FAILURE_FATAL=no
- IPV6INIT=yes
- IPV6_AUTOCONF=yes
- IPV6_DEFROUTE=yes
- IPV6_PEERDNS=yes
- IPV6_PEERROUTES=yes
- IPV6_FAILURE_FATAL=no
- IPV6_ADDR_GEN_MODE=stable-privacy
- NAME=ens33
- DEVICE=ens33
- ONBOOT=yes
- BRIDGE=br0 #添加该行, 若有 UUID 的配置项, 建议删除.
- # 将网卡 ens33 的文件复制一份改名为 br0
- [[email protected] ~]# VIM /etc/sysconfig/network-scripts/ifcfg-br0
- TYPE=Bridge #将 type 改为 Bridge
- BOOTPROTO=static #这里根据实际情况改为 static 或 dhcp
- DEFROUTE=yes
- PEERDNS=yes
- PEERROUTES=yes
- IPV4_FAILURE_FATAL=no
- IPV6INIT=yes
- IPV6_AUTOCONF=yes
- IPV6_DEFROUTE=yes
- IPV6_PEERDNS=yes
- IPV6_PEERROUTES=yes
- IPV6_FAILURE_FATAL=no
- IPV6_ADDR_GEN_MODE=stable-privacy
- NAME=br0 #改名字
- DEVICE=br0 #改名字
- ONBOOT=yes
- IPADDR=192.168.1.1 #该 ip 将为宿主机的 IP 地址
- GATEWAY=192.168.1.254
- [[email protected] ~]# systemctl restart network #重启网络服务
- [[email protected] ~]# ifconfig #确认 IP 地址信息
- br0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
- .NET 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.255
- inet6 fe80::db0f:ab79:54a1:241b prefixlen 64 scopeid 0x20<link>
- ether 00:0c:29:1a:e0:46 txqueuelen 1000 (Ethernet)
- RX packets 50 bytes 4155 (4.0 KiB)
- RX errors 0 dropped 0 overruns 0 frame 0
- TX packets 58 bytes 7046 (6.8 KiB)
- TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
- ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
- ether 00:0c:29:1a:e0:46 txqueuelen 1000 (Ethernet)
- RX packets 1062 bytes 95264 (93.0 KiB)
- RX errors 0 dropped 0 overruns 0 frame 0
- TX packets 688 bytes 81579 (79.6 KiB)
- TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
4, 管理 KVM:
[[email protected] /]# virt-manager #打开图形管理软件, 执行该命令后出现以下界面
创建存储池:
再以同样的操作创建一个 iso 镜像存储池, 完成后如下:
创建存储卷:
完成后, 如下点击来创建虚拟机:
[[email protected] ~]# cp /dev/cdrom /kvm/iso/centos7.iso #先复制光盘镜像到指定目录下
根据需求给硬件资源:
创建自定义存储:
定义虚拟机名称, 并单击 "完成":
单击 "完成" 后, 会自动弹出该虚拟机的窗口, 安装系统吧, 这里和平时安装系统一样, 就省略了:
KVM 虚拟化平台至此已部署完成, 下面附加一些常用的管理命令:
- [[email protected] ~]# virsh -h #查看命令帮助
- [[email protected] ~]# ls /etc/libvirt/qemu #查看 KVM 的配置文件存放目录
- (test01.xml 是虚拟机系统实例的配置文件)
networks test01.xml
[[email protected] ~]# virsh list --all #查看虚拟机状态
Id 名称 状态
- ----------------------------------------------------
- 2 test01 running
- [[email protected] ~]# virsh shutdown test01 #关闭虚拟机
- [[email protected] ~]# virsh start test01 #开启虚拟机
- [[email protected] ~]# virsh destroy test01 #强制关机
- [[email protected] ~]# virsh create /etc/libvirt/qemu/test01.xml #通过配置文件启动虚拟机
- [[email protected] ~]# virsh suspend test01 #挂起虚拟机
- [[email protected] ~]# virsh resume test01 #从挂起状态恢复运行虚拟机
- [[email protected] ~]# virsh autostart test01 #设置虚拟机伴随宿主机自动启动
- # 虚拟机的删除与添加:
- [[email protected] ~]# virsh dumpxml test01> /etc/libvirt/qemu/test02.xml #导出虚拟机配置
- # 删除虚拟机:
- [[email protected] ~]# virsh shutdown test01
- [[email protected] ~]# virsh undefine test01
- [[email protected] ~]# virsh list --all #查看虚拟机是否被删除
Id 名称 状态
- ----------------------------------------------------
- # 通过备份的配置文件重新定义虚拟机:
- [[email protected] ~]# cd /etc/libvirt/qemu/
- [[email protected] qemu]# mv test02.xml test01.xml
- [[email protected] qemu]# virsh define test01.xml
- #修改虚拟机配置 (内存大小等) 信息:
- [[email protected] qemu]# VIM /etc/libvirt/qemu/test01.xml
- [[email protected] qemu]# virt-df -h test01 #在宿主机上查看虚拟机磁盘信息
克隆虚拟机:
- [[email protected] qemu]# virt-clone -o test01 -n test02 -f /kvm/store/test02.qcow2
- # 将 test01 克隆为 test02
- [[email protected] qemu]# virsh list --all #查看现有虚拟机
Id 名称 状态
----------------------------------------------------
- test01 关闭
- test02 关闭
虚拟机创建快照:
KVM 虚拟机要使用快照功能, 磁盘格式必须为 qcow2
- [[email protected] qemu]# virsh snapshot-create test01 #对虚拟机 test01 创建快照
- [[email protected] qemu]# virsh snapshot-list test01 #查看快照信息
名称 生成时间 状态
- ------------------------------------------------------------
- 1560191837 2019-06-11 02:37:17 +0800 shutoff
- [[email protected] qemu]# virsh snapshot-revert test01 1560191837
- # 恢复虚拟机状态至 1560191837
- [[email protected] qemu]# virsh snapshot-delete test01 1560191837 #删除快照
来源: http://www.bubuko.com/infodetail-3088615.html