目录

  • 认识虚拟化
  • 虚拟化简介
  • 虚拟化架构
  • 虚拟化组件
  • 虚拟化特点
  • 虚拟化优势
  • 安装虚拟化
  • 最低硬件要求
  • 安装步骤
  • 检验是否安装成功
  • 虚拟机配置
  • 介绍
  • 概述
  • 基本格式
  • 配置流程
  • 虚拟机配置描述
  • 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可用磁盘空间

安装步骤

  1. 安装QEMU组件
# yum install -y qemu
  1. 安装libvirt组件
# yum install -y libvirt
  1. 启动libvirtd服务
# systemctl start libvirtd

检验是否安装成功

  1. 查看内核是否支持KVM虚拟化
$ ls /dev/kvm
$ ls /sys/module/kvm
  1. 确认QEMU是否安装成功
$ rpm -qi qemu
  1. 确认libvirt是否安装成功
$ rpm -qi libvirt
  1. 查看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>
配置流程
  1. 创建一个根元素为domain的XML配置文件。
  2. 使用标签name,根据命名规则指定唯一的虚拟机名称。
  3. 配置虚拟CPU和虚拟内存等系统资源。
  4. 配置虚拟设备。
    -配置存储设备。
    -配置网络设备。
    -配置外部总线结构。
    -配置鼠标等外部设备。
  5. 保存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”等。