一、简介
1、什么是虚拟化?
在计算机技术中,虚拟化(技术)或虚拟技术(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分区、组合为一个或多个电脑配置环境由此,打破实体结构间的不可切割的障碍,使用户可以比原本的配置更好的方式来应用这些电脑硬件资源。这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理配置所限制。
2、为什么要用虚拟化
同一台物理机运行多个不同版本应用软件
硬件依赖性较低和便于数据迁移
3、虚拟化技术的优势
1.降低运营成本
2.提高应用兼容性
3.加速应用部署
4.提高服务可用性
5.提升资源利用率
6.动态调度资源
7.降低能源消耗
4、KVM 简介
KVM — 全称是基于内核的虚拟机(Kernel-based Virtual Machine)** 是一个开源软件,基于内核的虚拟化技术,实际是嵌入系统的一个虚拟化模块,通过优化内核来使用虚拟技术,该内核模块使得 Linux 变成了一个 Hypervisor,虚拟机使用Linux 自身的调度器进行管理。
KVM 是基于虚拟化扩展(Intel VT 或者 AMD-V)的 X86 硬件的开源的 Linux 原生的全虚拟化解决方案。KVM 中,虚拟机被实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度;虚机的每个虚拟 CPU 被实现为一个常规的 Linux 进程。这使得 KMV 能够使用 Linux 内核的已有功能。但是,KVM 本身不执行任何硬件模拟,需要客户空间程序通过 /dev/kvm 接口设置一个客户机虚拟服务器的地址空间,向它提供模拟的 I/O,并将它的视频显示映射回宿主的显示屏。目前这个应用程序是 QEMU。
二、安装 KVM
1、实验环境准备:
egrep "(svm|vmx)" /proc/cpuinfo #查看 cpu 是否支持虚拟化
#vmx 对应 inter 的 cpu,svm 对应 amd 的 cpu,还需在主板 bios 打开虚拟化选项,目前,多数服务器基础桌面计算机均处理启动状态
apt-get install libvirt0 libvirt-daemon qemu virt-manager bridge-utils libvirt-clients python-libvirt qemu-efi uml-utilities virtinst qemu-system
#安装 KVM 和相关虚拟化工具libvirt 是管理虚拟机和其他虚拟化功能,比如存储管理,网络管理的软件集合。它包括一个API 库,一个守护程序(libvirtd)和一个命令行工具(virsh);libvirt 本身构建于一种抽象的概念之上。它为受支持的虚拟机监控程序实现的常用功能提供通用的 API。libvirt 的主要目标是为各种虚拟化工具提供一套方便、可靠的编程接口,用一种单一的方式管理多种不同的虚拟化提供方式。
2、两种管理方法:
virt-manager 是图形化方式,相对直观。
virsh 是命令行方式
systemctl restart libvirtd.service #启动 libvirtd
systemctl status libvirtd.service #查看启动状态
使用图形化安装 一台名为 UOS1 的虚拟机
三、基础操作指令
virsh(虚拟 shell),基于命令行的管理工具,可以实现简单的资源管理。支持交互模式
virsh shutdown uos1 #正常关闭 vm 虚拟机
virsh start uos1 #启动 kvm 虚拟机
virsh destroy uos1 #强制关闭 kvm 虚拟机
virsh list #显示本地活动虚拟机
virsh list --all #查看所有虚拟机
virsh suspend uos1 #挂起 kvm 虚拟机
virsh resume uos1 #恢复被挂起虚拟机
virsh dominfo uos1 #查看指定虚拟机的配置摘要信息
virsh undefine uos1 #删除 kvm 虚拟机(如果虚拟机处于 runing,一旦关闭就会消失)
virsh dumpxml uos1 #显示虚拟机的当前配置文件
virsh define uos2.xml #通过配置文件定义一个虚拟机(这个虚拟机还不是活动的)
virsh autostart uos1 # 虚 拟 机 设 为 自 动 启 动 ( 生 成/etc/libvirt/qemu/autostart/ )
virsh autostart --disable uos1 #取消自动启动
virsh edit ubuntu #编辑配置文件(一般是在刚定义完虚拟机之后)
virsh setmem ubuntu 512000 #给不活动虚拟机设置内存大小
virsh setvcpus ubuntu 4 # 给不活动虚拟机设置 cpu 个数
四、xml 配置文件的应用
(1)xml 配置文件详解
xml 配置文件也就是通常所说的虚拟机的描述文件,主要用来定义一个虚拟机的名称、UUID、CPU、内存、虚拟磁盘、网卡等各种参数设置
/etc/libvirt/qemu/ #配置文件默认路径
uos.xml 配置文件说明:
<domain type=’kvm’>
<name>uos</name> #虚拟机的名字
<uuid>16e9cb49-8b05-4b34-9325-3bcf169dd32e</uuid> #uuid 值
<memory unit=’KiB’>4194304</memory> #虚拟机的最大内存
<currentMemory unit=’KiB’>4194304</currentMemory> #虚拟机当前的内存
<vcpu placement=’static’>4</vcpu> #该虚拟机的 cpu 数
<os>
<type arch=’x86_64′ machine=’pc-i440fx-3.1’>hvm</type> #hvm 表示全虚拟化
<boot dev=’hd’/> #hd 表示从硬盘启动
</os> Id Name State
———————–
– uos2 shut off
<emulator>/usr/bin/qemu-system-x86_64</emulator> #二进制模拟器设备的完整路径
<disk type=’file’ device=’disk’> #disk 是用来描述磁盘的主要容器
<driver name=’qemu’ type=’qcow2’/>
<source file=’/var/lib/libvirt/images/kvm/uos.qcow2’/>
Id Name State
———————–
– uos2 shut off #指定磁盘上文件的绝对路径
<target dev=’hda’ bus=’ide’/>
<address type=’drive’ controller=’0′ bus=’0′ target=’0′ unit=’0’/>
<interface type=’ direct #桥接设备
<mac address=’52:54:00:0c:ae:41’/> #MAC 地址
<source dev=’enp2s0′ mode=’bridge’/>
<model type=’e1000’/>
<address type=’pci’ domain=’0x0000′ bus=’0x00′ slot=’0x03′ function=’0x0’/>
</interface>
<source network=’br0/>
(2)qemu-img 是一个功能强制磁盘镜像管理工具
qemu-img –help 包括以下功能
check 检查完整性
create 创建镜像
commit 提交更改
compare 比较
convert 转换
info 获得信息
map 映射
snapshot 快照管理
rebase 在已有的镜像的基础上创建新的镜像
resize 调整大小
amend 修订镜像格式选
(3)将虚拟机 uos1 改名为 uos2
uuidgen #生成新的 UUID 字串,并复制备用
76d5dc2c-5eef-4e30-8b6c-e58851814f84virsh edit uos #编辑虚拟机配置
<domain type=’kvm’>
<name>uos2</name> #新名称
<uuid>76d5dc2c-5eef-4e30-8b6c-e58851814f84</uuid> #新 UUID 值virsh list --all #确认导入的新配置
Id Name State
———————–
-uos1 shut off
uos2 shut off #新名称的虚拟机
virsh undefine uos1 #删除旧名称的虚拟机
virsh list --all #确认结果
Id Name State
———————–
– uos2 shut off
(4)复制 uos2 虚拟机为 uos3
uuidgen #生成新 UUID,并复制备用
7b292992-a86e-4386-951f-a577365cc721
Id Name State
———————–
– uos2 shut off
virsh dumpxml uos2>/etc/libvirt/qemu/uos3.xml #导出配置
vim /etc/libvirt/qemu/uos3.xml #修改导出后的配置
<domain type=’kvm’>
<name>uos3</name> #新名称
<uuid>3d7f2197-8dad-473c-99af-0570cd02ae5c</uuid> #新 UUID 值
<memory unit=’KiB’>4194304</memory> #内存大小,单位 KB
<currentMemory unit=’KiB’>4194304</currentMemory> #虚拟机分配的内存大小,单位 KB
<vcpu placement=’static’>2</vcpu> #虚拟 CPU 核数
<disk type=’file’ device=’disk’>
<driver name=’qemu’ type=’qcow2’/>
<source file=’/var/lib/libvirt/images/uos3.qcow2’/> #新磁盘路径
<target dev=’hda’ bus=’ide’/>
<address type=’drive’ controller=’0′ bus=’0′ target=’0′ unit=’0’/>
</disk>
<interface type=’network’> #虚拟机网络连接方式
<mac address=’52:54:00:f5:9c:44’/> #修改 MAC 地址
<source network=’private1’/> #当前主机网桥的名称
<model type=’e1000’/>
<address type=’pci’ domain=’0x0000′ bus=’0x00′ slot=’0x03′ function=’0x0’/>
virsh list --all #确认结果
Id Name State
———————–
– uos2 shut off
– uos3 shut off #新虚拟机
(5)快建虚拟机
把 uos2 当做模板机,提取 uos2 的虚拟机磁盘、xml 配置文件qemu-img info /var/lib/libvirt/images/kvm/uos2.qcow2 #
image: /var/lib/libvirt/images/kvm/uos.qcow2
file format: qcow2
virtual size: 64G (68719476736 bytes) #虚拟机磁盘容量
disk size: 8.1G #在 KVM 服务器占用容量
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: true
refcount bits: 16
corrupt: false
qemu-img create -f qcow2 -b /var/lib/libvirt/images/kvm/uos2.qcow2 /var/lib/libvirt/images/kvm/uos4.qcow2 #复用 uos2 模板机的磁盘数据
cd /etc/libvirt/qemu/
cp uos2.xml uos4.xml #复制配置
vim uos4.xml #修改配置文件
<name>uos4</name> #新虚拟机名称
<uuid>da2478f0-abf0-11ea-a912-6f46e76df6b1</uuid> #新 UUID 值
<disk type=’file’ device=’disk’> #文件类型
<driver name=’qemu’ type=’qcow2’/> #磁盘类型
<source file=’/var/lib/libvirt/images/kvm/uos4.qcow2’/> #新虚拟卷位置
<target dev=’hda’ bus=’ide’/>
<address type=’drive’ controller=’0′ bus=’0′ target=’0′ unit=’0’/>
</disk>
</controller>
<interface type=’network’> #虚拟机的网络接口类型
#删除 MAC 地址
<source network=’network1’/> #虚拟机的网卡的源网络名称
<model type=’e1000’/>
virsh define /etc/libvirt/qemu/uos1.xml Domain uos1 defined from /etc/libvirt/qemu/uos4.xml #根据配置文件定义虚拟机
virsh list --all #查看所有虚拟主机
Id Name State
———————–
– uos2 shut off
– uos4 shut off
virsh start uos4 #开启 uos 虚拟机配置主机名、ip 地址等
(6)快照(raw 格式的磁盘无法创建快照)
qemu-img snapshot -l /kvm/img/test12.qcow2 #查看磁盘快照
virsh snapshot-list test12 #查看快照
virsh snapshot-create test12 #生成快照
virsh snapshot-create-as test12 snap1 #自定义快照名
virsh snapshot-revert test12 snap1 #快照恢复虚拟
virsh snapshot-delete test12 snapname #删除指定快照
virsh snapshot-current test12