kvm

72 阅读5分钟

简介:

在传统 IT 架构中,一台物理服务器通常只能运行一个操作系统,并承载一个业务系统。随着业务增长,服务器数量暴涨,硬件资源利用率低下,运维成本急剧升高,物理服务器之间存在严重资源闲置。

计算虚拟化技术通过将服务器底层硬件资源抽象、池化,再分配给多个独立的虚拟化环境(虚拟机,VM),每个虚拟机拥有自己的操作系统与应用,就像是一台独立的服务器。

虚拟化后可以在一台物理服务器上同时运行多个操作系统及业务实例,大大提高资源利用率,实现灵活部署

KVM特性

技术               | 功能        | 应用场景                |
| ---------------- | -----------| -----------------------|
| Live Migration   | 热迁移      | 业务不中断迁移 VM       |
| Snapshot         | 快照        | 系统回滚               |
| vCPU Over Commit | CPU 超配    | 云平台弹性资源          |
| NUMA Awareness   | NUMA 感知调度 | HPC、高性能业务       |
| PCI Passthrough  | 直通硬件      | GPU、NVMe、SR-IOV

组件

1. qemu-kvm

功能说明:`qemu-kvm` 是一个基于 QEMU 的开源虚拟机 CPU 模拟器,结合了 KVM(Kernel-based Virtual Machine)技术,用于在 Linux 系统上提供硬件加速的虚拟化支持。

作用:

 提供对虚拟机 CPU 和内存的模拟。
 利用 KVM 内核模块实现高性能的硬件虚拟化。
 支持多种架构(如 x86、ARM)的虚拟化。

适用场景:需要运行多个虚拟机实例,并要求接近物理机性能的场景。

2. qemu-img

功能说明:`qemu-img` 是一个专门用于管理虚拟磁盘的工具。
作用:

    -   创建、转换和修改虚拟磁盘镜像文件(如 `.qcow2``.raw` 格式)。
    -   支持快照功能,允许用户快速备份或恢复虚拟磁盘状态。
    -   转换磁盘格式,例如将 `.raw` 格式转换为 `.qcow2` 格式以节省存储空间。
适用场景:虚拟机磁盘的初始化、备份、迁移等操作。

3. libvirt

功能说明:`libvirt` 是一个开源的虚拟资源管理接口,提供了统一的 API 来管理和控制虚拟化平台。

作用:

    -   抽象底层虚拟化技术(如 KVM、Xen、LXC),提供一致的管理接口。
    -   支持虚拟机的生命周期管理(创建、启动、停止、删除等)。
    -   提供网络、存储、设备等资源的配置和管理功能。
    -   支持远程管理,允许通过网络管理虚拟化资源。
适用场景:需要集中管理多个虚拟化节点的企业级环境。

4. virt-install

功能说明:`virt-install` 是一个命令行工具,用于通过 CLI(命令行界面)创建和配置虚拟机。

作用:

支持通过命令参数指定虚拟机的 CPU、内存、磁盘、网络等配置。
可直接从 ISO 文件或网络源安装操作系统。
提供脚本化的虚拟机部署方式,适合自动化运维。

适用场景:需要快速创建虚拟机并进行批量部署的场景

5. virt-manager

功能说明:`virt-manager` 是一个图形化管理工具,用于通过 GUI(图形用户界面)管理虚拟机。

作用:

提供直观的界面,方便用户创建、启动、停止和配置虚拟机。
支持虚拟机的实时监控(如 CPU 使用率、内存占用等)。
集成了虚拟网络和存储的管理功能。

适用场景:适合不熟悉命令行操作的用户,或者需要快速查看虚拟机状态的场景。
6. virt-viewer

功能说明:`virt-viewer` 是一个轻量级的虚拟机控制台工具,用于连接和查看虚拟机的图形界面。

作用:
提供对虚拟机桌面环境的访问能力。
支持通过 VNC 或 SPICE 协议连接到虚拟机。
允许用户与虚拟机进行交互(如键盘输入、鼠标操作)。
适用场景:需要直接操作虚拟机桌面环境的场景,例如安装操作系统或调试应用程序。

KVM的内核模块叫做kvm.ko,实现对Linux的CPU和内存虚拟化,是Linux的一个进程,负责VCPU和内存的分配,而其他设备的虚拟就交给了qemu。qemu运行在用户空间,KVM运行在内核,两者通过/dev/kvm进行交互,KVM仅支持全局虚拟化。

kVM配置过程

image.png 主机虚拟化引擎开启虚拟化inter VT-X/EP

image.png

#在末尾新增一行,同时要把网卡的IP相关参数去掉
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="ens33"
UUID="5c80ab72-ebfd-49f3-86b1-e4687a44ede0"
DEVICE="ens33"
ONBOOT="yes"
IPV6_PRIVACY="no"
#IPADDR="192.168.31.169"
#PREFIX="24"
#GATEWAY="192.168.31.1"
#DNS1="192.168.31.1"
BRIDGE="br0"
[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-br0
DEVICE=br0
BOOTPROTO=static
#NM_CONTROLLED=no
ONBOOT=yes
TYPE=Bridge
IPADDR=192.168.31.169
NETMASK=255.255.255.0
PREFIX="24"
GATEWAY="192.168.31.1"
DNS1="192.168.31.1"
[root@localhost ~]# service network restart
[root@localhost ~]# ifconfig

配置桥接网卡

#安装epel源
yum install epel-rpm-macros.noarch
#安装kvm环境:
#qemu-kvm    ----模拟计算机的工具,为KVM虚拟机提供IO设备
#libvirt    ----管理虚拟机
#virt-install    ----命令行的虚拟机创建安装工具
#bridge-utils   ----网桥工具
yum install qemu qemu-img qemu-kvm  libvirt libvirt-python libguestfs-tools virt-install
#安装图形化工具
yum install virt-manager virt-viewer
systemctl enable libvirtd
systemctl start libvirtd
#检查KVM模块是否安装
lsmod |grep kvm
#创建一个虚拟机目录
mkdir /kvm
#创建一个qcow2格式的磁盘文件
qemu-img create -f qcow2 /kvm/vm.qcow2 20G
#创建一台指定配置的虚拟机
virt-install -n vm  -r 1024  --vcpus 1  -l /kvm/CentOS-7-x86_64-Minimal-1810.iso --disk path=/kvm/vm.qcow2,format=qcow2  --graphics vnc,listen=0.0.0.0,port=5924,  --noautoconsole --accelerate  --autostart

安装软件,创建虚拟机


[root@localhost ~]# virt-install -n vm \     定义虚拟机名

> -r 1024 \         内存大小

> --vcpus 1 \       CPU数量

> -l /kvm/CentOS-7-x86_64-Minimal-1810.iso \      ISO位置

> --disk path=/kvm/vm.qcow2,format=qcow2 \      磁盘文件位置及格式

> --graphics vnc,listen=0.0.0.0,port=5924, \         vnc安装,使用5924端口

> --noautoconsole  \      不要自动尝试连接到客户端控制台

> --accelerate \          提速安装

> --autostart             引导主机时自动启动域

配置文件定义

image.png 尝试连接