KVM基础

虚拟化是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分区、组合为一个或多个电脑配置环境。

一、KVM概述

1.概述

KVM是基于虚拟化扩展的 X86 硬件的开源Linux原生的全虚拟化方KVM (Kernel-based Vritual Machine)-案(要求 cpu支持intel-VTx或 AMD-V)需要经过修改的QEMU软件(qemu-kvm)来实现虛拟机的管理 KVM就是内核的一个模块,用户空间通过QEMU模拟硬件提供给虚拟机使用,一台虚拟机就是一个普通的Linux进程,虚拟机中的VCPU就是该进程中的线程。

2.基本架构

3.QEMU KVM QEMU-KVM libvirt

1) KVM (Kernel-based Virtual Machine)

  • 本质 :Linux 内核的一个模块(kvm.ko),从 Linux 2.6.20 版本开始被正式纳入主线内核
  • 核心功能:利用 CPU 的硬件虚拟化扩展(Intel VT-x/AMD-V)提供 CPU 和内存的虚拟化加速
  • 特点
    • 本身不执行任何硬件模拟,只负责虚拟化核心功能
    • 每个虚拟机 vCPU 对应一个普通的 Linux 进程,由 Linux 调度器统一调度
    • 性能接近物理机(通常在 95% 以上)
    • 只能在 Linux 系统上运行,且需要 CPU 支持硬件虚拟化

2)QEMU (Quick Emulator)

  • 本质:纯用户态的通用模拟器和虚拟化工具
  • 核心功能
    • 全系统模拟:可以模拟不同架构的 CPU(如在 x86 上模拟 ARM、PowerPC 等)
    • 硬件设备模拟:模拟网卡、磁盘、显卡、USB 等各种 I/O 设备
    • 纯软件虚拟化:不依赖硬件虚拟化支持,在任何系统上都能运行
  • 特点
    • 纯软件模拟时性能较差
    • 支持多种操作系统作为客户机
    • 支持多种磁盘镜像格式(qcow2、raw、vmdk 等)

3)QEMU-KVM

  • 本质:QEMU 与 KVM 的结合体,是目前最常用的硬件加速虚拟化方案
  • 核心功能:QEMU 利用 KVM 内核模块提供的硬件加速能力,将 CPU 和内存的虚拟化交给 KVM 处理,自己则专注于 I/O 设备的模拟
  • 历史演变
    • 早期是 QEMU 的一个分支,专门针对 KVM 进行优化
    • 从 QEMU 1.3 版本开始,KVM 支持被完全合并到上游 QEMU 中libvirt
    • 现在qemu-system-x86_64命令默认就支持 KVM 加速(通过-enable-kvm参数启用)

4)libvirt

  • 本质:开源的虚拟化管理库和工具集,是 Linux 虚拟化的事实标准管理接口
  • 核心功能
    • 提供统一的 API、守护进程(libvirtd)和命令行工具(virsh)
    • 管理虚拟机的生命周期(创建、启动、停止、暂停、迁移、销毁等)
    • 管理虚拟网络、存储池、快照等资源
    • 支持远程管理和多租户
  • 特点
    • 抽象了底层不同虚拟化技术的差异
    • 支持多种后端:KVM/QEMU、Xen、LXC、VirtualBox、VMware 等
    • 是 virt-manager、OpenStack、Proxmox 等上层工具和云平台的基础

QEMU、KVM、libvirt三者关系总结

QEMU是一个独立的虚拟化解决方案,并不依赖KVM(它本身自己可以做CPU和内存的模拟,只不过效率较低),而KVM是另一套虚拟化解决方案,对CPU进行虚拟效率较高(采用了硬件辅助虚拟化),但本身不提供其他设备的虚拟化,借用了QEMU的代码进行了定制,所以KVM方案一定要依赖QEMU 即使后来RedHat后来开发了libvirt,也只能简单的认为是个虚拟机管理工具,仍然需要通过用户空间QEMU来与KVM进行交互

二、KVM的安装

1.初始化服务器

复制代码
#!/bin/bash
 
# 1. 设置主机名
hostnamectl set-hostname $1

echo 192.168.22.155 $1 >> /etc/hosts
 
# 2. 关闭防火墙
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
 
# 3. 配置yum源
cd /etc/yum.repos.d
rm -rf *
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all
yum makecache
yum install epel-release -y
 
# 4. 安装必要软件
yum install vim -y
yum install net-tools -y
yum install wget -y
yum install yum-utils -y
yum install ntp -y
 
# 5. 时间同步
systemctl enable ntpd --now
 
# 6. 重启
reboot

2.CPU支持的VT技术

1)查看CPU是否支持VT基础

查看内核版本

复制代码
unname -a

查看CPU是否支持VT技术

复制代码
cat /proc/cpuinfo | grep -E 'vmx|svm'

没有输出则表示没有开启VT技术(虚拟化技术)

开启虚拟化,此时在尝试

有输出了,代表支持虚拟化

3.环境清理

如果之前安装过KVM,需要孩子选哪个这一步,没有安装过就可以跳过

bash 复制代码
# 查询qemu|virt|KVM相关的软件
rpm -qa | egrep 'qemu|virt|KVM'

# 卸载qemu|virt|KVM相关的软件
yum remove `rpm -qa | egrep 'qemu|virt|KVM'` -y

# 删除两个目录
rm -rf /var/lib/libvirt /etc/libvirt/

4.安装启动软件

1)安装软件

bash 复制代码
# 安装相关的软件
yum install qemu-kvm libvirt libguestfs-tools virt-install virt-manager virt-viewer libvirt-python -y

# 或者 使用以下命令,使用组安装,会安装虚拟化相关的所有的软件包
yum groupinstall "虚拟化*" -y

软件说明

qemu-kvm: 主包

libvirt: API接口

virt-manager: 图形管理程序

virt-viewer: 图形管理插件

安装qemu, virt相关的软件包, 以及安装librbd1-devel的依赖包 如果安装的过程中出错, 可能是操作系统的版本问题, 可以通过以下命令更新内核版本

yum upgrade

2)启动libvirtd服务

bash 复制代码
systemctl start libvirtd        # 启动libvirtd服务
systemctl enable libvirtd       # 设置libvirtd服务开机启动
systemctl status libvirtd       # 查看状态

5.检查确认

bash 复制代码
lsmod | grep kvm

三、客户机的安装

1.图形方式安装

1)上传镜像文件

将centos的镜像文件上传到宿主机系统

2)开启图形化界面

bash 复制代码
# 安装图形化组件,安装好之后重启
yum groupinstall "X Window System" -y

reboot

virt-manager

此时是有乱码的,需要修改配置文件

bash 复制代码
vim /etc/profile
# 在文件末尾添加
export LANG="en_US.UTF-8"
source /etc/profile
virt-manager

中文乱码解决了,之后创建虚拟机

找到你上传的linux最小镜像

之后直接一直下一步,磁盘大小、CPU数量、以及内存自己设定

选择网路模式和VMware一致用NAT模式通外网,Finsh之后安装linux系统

安装完成

3)配置文件与镜像文件

虚拟机镜像文件:相当于系统磁盘

bash 复制代码
/var/lib/libvirt/images

虚拟机配置文件:虚拟机相关的配置,比如:磁盘、内存、网络等

bash 复制代码
/etc/libvirt/qemu

2.命令行安装客户机

以上两种方式安装完成虚拟机之后,都会产生两个文件,一个镜像文件,一个配置文件。也就是说,如果创建了这两个文件,那么就相当于创建了一个新的虚拟机,命令行模式大致就是处于这个考量。

命令说明:

命令: virsh

说明: 来管理客户端及其管理程序的命令行界面工具,virsh 工具是构建在 libvirt 管理 API 上

bash 复制代码
# 语法:
virsh list --all : 列出所有的虚拟机
virsh dominfo name : 显示虚拟机信息
virsh define name.xml : 定义虚拟机
virsh start name : 启动虚拟机
virsh destroy name : 强制关闭虚拟机
virsh shutdown name : 关闭虚拟机
virsh undefine name : 删除虚拟机
virsh suspend name : 挂起虚拟机
virsh resume name : 恢复被挂起的虚拟机
virsh domiflist name : 查看虚拟机网卡信息

1)复制镜像文件

bash 复制代码
cp /var/lib/libvirt/images/centos7.0.qcow2 /var/lib/libvirt/images/test03.qcow2

2)复制配置文件

bash 复制代码
cp /etc/libvirt/qemu/centos7.0.xml /etc/libvirt/qemu/test03.xml

3)修改配置文件

其中的uuid、interface-mac为16进制

bash 复制代码
需要修改的选项:
• name(名字需要唯一)
• uuid(uuid需要唯一)
• devices-disk-source(指定镜像文件的路径)
• interface-mac(网络的Mac地址,只能修改后面三段)

比较两个文件不一样的地方:
diff centos7.xml test03.xml

4)定义虚拟机

bash 复制代码
virsh define /etc/libvirt/qemu/test03.xml

完成之后多一台主机

4.飞机驾驶仓模式

飞机驾驶舱模式,也是通过图形界面去操作虚拟机,需要安装一个插件

bash 复制代码
yum install -y cockpit && systemctl start cockpit && systemctl enable cockpit

# cockpit监听的端口号是:9090

# 打开浏览器,访问地址:https://192.168.217.130:9090/
# 默认账号密码为root 123456

就会监控一些一些状态

相关推荐
炸炸鱼.12 天前
KVM 高级功能部署实战手册(静态迁移 + 动态迁移 + KSM 内存优化)
kvm
炸炸鱼.13 天前
KVM 虚拟化平台部署实战手册
kvm
云达闲人15 天前
搭建DevOps企业级仿真实验环境:002Proxmox 系统安装流程详解
运维·虚拟化·devops·kvm·proxmox·实验环境搭建·web管理
黑蛋同志24 天前
KVM虚拟化热迁移
运维·虚拟化·kvm
白毛大侠1 个月前
Docker vs 虚拟机 vs Go 用户态/内核态:这三组概念
运维·docker·golang·kvm
养乐多q.♡1 个月前
AIMaLinux系统上通过KVM创建了windows10系统,在windows10系统中通过NFS分享文件夹到内网上可以挂载
虚拟机·kvm·nfs挂载·aimalinux
real向往2 个月前
物理机磁盘损坏无法克隆虚拟机
kvm·物理机·磁盘损坏
real向往2 个月前
KVM虚拟机管理(X86/ARM)
arm·kvm·x86·虚拟机管理
tianyuanwo3 个月前
KVM 虚拟化启动失败深度解析:从硬件到软件的系统性故障排除
kvm·virsh create