目录
- 认识虚拟化
- 虚拟化简介
- 虚拟化架构
- 虚拟化组件
- 虚拟化特点
- 虚拟化优势
- 安装虚拟化
- 最低硬件要求
- 安装步骤
- 检验是否安装成功
- 虚拟机配置
- 介绍
- 概述
- 基本格式
- 配置流程
- 虚拟机配置描述
- domain&name
- 虚拟CPU&虚拟内存
- 虚拟设备
- 体系架构配置元素介绍
- 其他常见配置项
认识虚拟化
虚拟化简介
在计算机技术中,虚拟化是一种资源管理技术,它将计算机的各种实体资源(处理器、内存、磁盘、网络适配器等)予以抽象,转换后呈现并可供分割、组合为一个或多个计算机配置环境。这种资源管理技术打破了实体结构不可分割的障碍,使这些资源在虚拟化后不受现有资源的架设方式、地域或物理配置限制,从而让用户可以更好地应用计算机硬件资源,提高资源利用率。
虚拟化使得一台物理服务器上可以运行多台虚拟机,虚拟机共享物理机的处理器、内存、I/O资源等,但逻辑上虚拟机之间是互相隔离的。在虚拟化技术中,通常将这个物理服务器称为宿主机host,宿主机上运行的虚拟机也叫客户机guest,虚拟机内部运行的操作系统称为客户机操作系统hostOS。在宿主机和虚拟机之间存在一层叫虚拟化层的软件,用于实现虚拟硬件的模拟,通常这个虚拟化层被称为虚拟机监视器。如下图所示:
虚拟化架构
当前的主流虚拟化技术按照VMM(Virtual Machine Monitor)实现结构不同分为两种:
- Hypervisor:VMM被看做是一个完备的操作系统,同时还具备虚拟化功能。
- 宿主模型:物理资源是由宿主机操作系统管理;宿主机操作系统不提供虚拟化能力,提供虚拟化能力的VMM作为系统的一个驱动或者软件运行在宿主操作系统上,VMM通过调用host OS的服务获得资源,实现处理器,内存和I/O设备的模拟,这种模型的虚拟化实现有KVM、Virtual Box等。
KVM(Kernel-based Virtual Machine)即基于内核的虚拟机,是Linux的一个内核模块,该内核模块使Linux成为一个hypervisor。KVM本身未模拟任何硬件设备,它用于使能硬件提供的虚拟化能力,用户态QEMU配合内核KVM模块共同完成虚拟机的硬件模拟。
虚拟化组件
- KVM:提供核心的虚拟化基础设施,使Linux系统成为一个hypervisor,支持多个虚拟机同时在该主机上运行。
- QEMU:模拟处理器并提供一组设备模型,配合KVM实现基于硬件的虚拟化模拟加速。
- Libvirt:为管理虚拟机提供工具集,主要包含统一、稳定、开放的应用程序接口(API)、守护进程 (Libvirtd)和一个默认命令行管理工具(virsh)。
- Open vSwitch:为虚拟机提供虚拟网络的工具集,支持编程扩展,以及标准的管理接口和协议(如NetFlow, sFlow,IPFIX, RSPAN, CLI, LACP, 802.1ag)。
虚拟化特点
- 分区:对于一台物理服务器逻辑划分出多个不同规格的虚拟机
- 隔离:各个虚拟机之间相互独立
- 封装性:以虚拟机为粒度封装,教育物理机更加灵活
- 硬件无关:虚拟机和硬件没有直接的绑定关系,可以直接运行于其他服务器
虚拟化优势
- 灵活性和可扩展性
- 更高的可用性和更好的运维手段
- 提高安全性
- 更高的资源利用率
安装虚拟化
最低硬件要求
- AArch64处理器架构:ARMv8以上并且支持虚拟化扩展
- x86_64处理器架构:支持VT-x
- 2核CPU
- 4GB的内存
- 16GB可用磁盘空间
安装步骤
- 安装QEMU组件
# yum install -y qemu
- 安装libvirt组件
# yum install -y libvirt
- 启动libvirtd服务
# systemctl start libvirtd
检验是否安装成功
- 查看内核是否支持KVM虚拟化
$ ls /dev/kvm
$ ls /sys/module/kvm
- 确认QEMU是否安装成功
$ rpm -qi qemu
- 确认libvirt是否安装成功
$ rpm -qi libvirt
- 查看libvirt服务是否启动成功
$ systemctl status libvirtd
虚拟机配置
介绍
概述
Libvirt工具采用XML格式的文件描述一个虚拟机特征,包括虚拟机名称、CPU、内存、磁盘、网卡、鼠标、键盘等信息。用户可以通过修改配置文件,对虚拟机进行管理。本章介绍XML配置文件各个元素的含义,指导用户完成虚拟机配置。
基本格式
虚拟机XML配置文件以domain为根元素,domain根元素中包含多个其他元素。XML配置文件中的部分元素可以包含对应属性和属性值,用以详细地描述虚拟机信息,同一元素的不同属性使用空格分开。
XML配置文件的基本格式如下,其中label代表具体标签名,attribute代表属性,value代表属性值,需要根据实际情况修改。
<domain type='kvm'>
<name>VMName</name>
<memory attribute='value'>8</memory>
<vcpu>4</vcpu>
<os>
<label attribute='value' attribute='value'>
...
</label>
</os>
<label attribute='value' attribute='value'>
...
</label>
</domain>
配置流程
- 创建一个根元素为domain的XML配置文件。
- 使用标签name,根据命名规则指定唯一的虚拟机名称。
- 配置虚拟CPU和虚拟内存等系统资源。
- 配置虚拟设备。
-配置存储设备。
-配置网络设备。
-配置外部总线结构。
-配置鼠标等外部设备。 - 保存XML配置文件。
虚拟机配置描述
domain&name
- domain:虚拟机XML配置文件的根元素,用于配置运行此虚拟机的hypervisor的类型。
- type:虚拟化中domain的类型。openEuler虚拟化中属性值为kvm。
- name:虚拟机名称。虚拟机名称为一个字符串,同一个主机上的虚拟机名称不能重复,虚拟机名称必须由数字、字母、“_”、“-”、“:”组成,但不支持全数字的字符串,且虚拟机名称不超过64个字符。
虚拟CPU&虚拟内存
- vcpu:虚拟处理器的个数。
- memory:虚拟内存的大小。
属性unit:指定内存单位,属性值支持KiB(210 字节),MiB(220 字节),GiB(230 字节),TiB(240 字节)等。 - cpu:虚拟处理器模式。
属性mode:表示虚拟CPU的模式。
- host-passthrough:表示虚拟CPU的架构和特性与主机保持一致。
- custom:表示虚拟CPU的架构和特性由此cpu元素控制。
子元素topology:元素cpu的子元素,用于描述虚拟CPU模式的拓扑结构。
- 子元素topology的属性socket、cores、threads分别描述了虚拟机具有多少个cpu socket,每个cpu socket中包含多少个处理核心(core),每个处理器核心具有多少个超线程(threads),属性值为正整数且三者的乘积等于虚拟CPU的个数。
- ARM架构支持虚拟超线程, 虚拟CPU热插与虚拟超线程功能互斥。
子元素model:元素cpu的子元素,当mode为custom时用于描述CPU的模型。
子元素feature:元素cpu的子元素,当mode为custom时用于描述某一特性的使能情况。其中,属性name表示特性的名称,属性policy表示这一特性的使能控制策略:
- force:表示强制使能该特性,无论主机CPU是否支持该特性。
- require:表示使能该特性,当主机CPU不支持该特性并且hypervisor不支持模拟该特性时,创建虚拟机失败。
- optional:表示该特性的使能情况与主机上该特性的使能情况保持一致。
- disable:禁用该特性。
- forbid:禁用该特性,当主机支持该特性时创建虚拟机失败。
虚拟设备
- disk:配置存储设备
- 属性type:指定后端存储介质类型;属性值取block(块设备)、file(文件设备)、dir(目录路径)、network(网络磁盘)
- 属性device:指定呈现给虚拟机的存储介质;属性值disk(磁盘)、floppy(软盘)、cdrom(光盘)
- 子元素source:指定后端存储介质;file、dev、dir、protocol、name、host name、port
- 子元素driver:指定后端驱动的详细信息
- 子元素target:指定磁盘呈现给虚拟机的总线和设备
- 子元素boot:表示此磁盘可以作为启动盘使用
- 子元素readonly:表示磁盘具有只读属性
- interface:配置虚拟网络设备
- 属性type:ethernet、vhostuser、bridge
- bridge子元素:
- mac:虚拟网卡的mac地址
- target:后端虚拟网卡名
- source:指定虚拟网卡后端
- boot:表示此网卡可以作为远程启动
- model:表示虚拟网卡的类型
- virtualport:端口类型
- driver:后端驱动类型
- controller:一个总线,用于信息通信,外部设备需要挂载到对应的总线上。常见的设备总线有ISA总线、PCI总线、USB总线、SCSI总线、PCIe总线。
- 属性type:总线类型。常用取值有“pci”、“usb”、“scsi”、“virtio-serial”、“fdc”、“ccid”
- 属性index:总线“bus”编号
- 属性model:具体类型
- 子元素address:指定在总线上的挂载地址
- 属性type:设备地址类型。常用取值有“pci”、“usb”、“drive”
- 子元素model:具体型号的名称
- 属性name:具体名称
- serial:串口设备
属性type:类型。常用属性值为pty、tcp、pipe、file - video:媒体设备
- 属性type:类型
- 子元素:指定媒体设备类型
- input:输出设备
- 属性type:类型。常用属性值为tabe、keyboard
- 属性bus:指定挂载的总线。常用属性值为USB
- emulator:模拟器应用路径
- graphics:图形设备
- 属性type:类型。常用属性值为vnc
- 属性listen:指定监听的IP地址
体系架构配置元素介绍
- os:定义虚拟机启动参数
- 子元素type:虚拟机类型
- 属性arch:架构类型
- 属性machine:芯片组类型
- 子元素loader:指定加载固件
- 属性readonly:表示是否只读
- 属性type:类型。常见的有rom、pflash
- 子元素nvram:指定nvram文件路径
- features:hypervisor支持控制一些虚拟机CPU/machine的特性
其他常见配置项
- iothreads:指定iotheard数量,加速存储设备性能
- on_poweroff:虚拟机关闭时采取的动作
- on_reboot:虚拟机重启时采取的动作。
- on_crash:虚拟机崩溃时采取的动作。
- clock:采用的时钟类型。
属性offset:设置虚拟机时钟的同步类型,可选的值有“localtime”、“utc”、“timezone”、“variable”等。