虚拟化介绍
**虚拟化:**在一台计算机上虚拟出多个逻辑的计算机,而且每个逻辑计算机
它可以是不同操作系统
**虚拟化技术:**可以扩大硬件容量,单个cpu模拟出多个cpu并行,
允许一个平台上同时运行多个操作系统,应用程序都可以在相互独立
的空间内运行,而且互不影响。
为什么企业使用虚拟化技术
1、节约成本
2、提高效率,物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)。
那么 Host 是如何将自己的硬件资源虚拟化,并提供给 Guest 使用的呢?
这个主要是通过一个叫做 Hypervisor 的程序实现的。
Hypervisor:一种运行在物理服务器硬件与操作系统之间的中间软件层
可允许多个操作系统和应用来共享硬件资源
根据 Hypervisor 的实现方式和所处的位置,虚拟化又分为两种:
完全虚拟化:直接在物理机上部署虚拟化,且不需要修改操作系统内核
半虚拟化:需要修改操作系统内核,使其支持虚拟化驱动来实现虚拟化技术
全虚拟化:
半虚拟化:
KVM简介
KVM 全称是 Kernel-Based Virtual Machine。也就是说 KVM 是基于 Linux 内核实现的。
KVM有一个内核模块叫 KVM.ko,只用于管理虚拟 CPU 和内存。
那 IO 的虚拟化,比如存储和网络设备则是由 Linux 内核与Qemu来实现。
Qemu-KVM虚拟化
KVM本身不执行任何设备模拟,需要用户空间程序QEMU通过/dev/KVM接口设置一个虚拟客户机的地址空间。
- KVM和Qemu的关系
- Qemu是一个独立的虚拟化解决方案,通过intel-VT 或AMD SVM实现全虚拟化,安装qemu的系统,可以直接模拟出另一个完全不同的系统环境。QEMU本身可以不依赖于KVM,但是如果有KVM的存在并且硬件(处理器)支持比如Intel VT功能,那么QEMU在对处理器虚拟化这一块可以利用KVM提供的功能来提升性能。
- KVM是集成到Linux内核的Hypervisor,是X86架构且硬件支持虚拟化技术(Intel-VT或AMD-V)的Linux的全虚拟化解决方案。它是Linux的一个很小的模块,利用Linux做大量的事,如任务调度、内存管理与硬件设备交互等。准确来说,KVM是Linux kernel的一个模块。
- Qemu的三种运行模式:
- 1.第一种模式是通过kqemu模块实现内核态的加速。
- 2.第二种模式是在用户态直接运行QEMU,由QEMU对目标机的 所有 指令进行翻译后执行,相当于全虚拟化。
- 3.第三种模式则是KVM官方提供的KVM-qemu加速模式。
- qmeu的两种特点:
- 1.QEMU可以在没有主机内核驱动程序的情况下运行。
- 2.它适用于多种操作系统(GNU / Linux,* BSD,Mac OS X,Windows)和体系结构。
- 3.它执行FPU的精确软件仿真。
QEMU的两种操作模式:完整的系统仿真和用户模式仿真。
- QEMU用户模式仿真具有以下功能:
- 1.通用Linux系统调用转换器,包括大部分ioctls。
- 2.使用本机CPU clone的仿真为线程使用Linux调度程序。
- 3.通过将主机信号重新映射到目标信号来实现精确信号处理。
- QEMU全系统仿真具有以下特点:
- 1.QEMU使用完整的软件MMU来实现最大的便携性。
- 2.QEMU可以选择使用内核加速器,如KVM。加速器本地执行大部分客户代码,同时继续模拟机器的其余部分。
- 3.可以仿真各种硬件设备,并且在某些情况下,客户机操作系统可以透明地使用主机设备(例如串行和并行端口,USB,驱动器)。主机设备传递可用于与外部物理外围设备(例如网络摄像头,调制解调器或磁带驱动器)交谈。
- 4.对称多处理(SMP)支持。目前,内核加速器需要使用多个主机CPU进行仿真。
部署KVM
环境说明
主机名 | ip | 系统 |
---|---|---|
KVM | 192.168.48.151 | centos 8 |
首先先修改机器配置
- 内存尽量给大点,cpu虚拟化功能都勾选,虚拟计数器看情况勾选
//新建分区,将硬盘所有大小都给这个分区
[root@KVM ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
|-sda1 8:1 0 1G 0 part /boot
`-sda2 8:2 0 99G 0 part
|-cs-root 253:0 0 63.9G 0 lvm /
|-cs-swap 253:1 0 4G 0 lvm [SWAP]
`-cs-home 253:2 0 31.2G 0 lvm /home
sdb 8:16 0 200G 0 disk
sr0 11:0 1 10.3G 0 rom
[root@KVM ~]# parted /dev/sdb
GNU Parted 3.2
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel
New disk label type? msdos
(parted) unit
Unit? [compact]? MiB
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 204800MiB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
(parted) mkpart
Partition type? primary/extended? primary
File system type? [ext2]? xfs
Start? 10
End? 204790
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 215GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 10.5MB 205GB 205GB primary xfs lba
(parted) q
Information: You may need to update /etc/fstab.
//刷新分区表
[root@KVM ~]# udevadm settle
[root@KVM ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 100G 0 disk
|-sda1 8:1 0 1G 0 part /boot
`-sda2 8:2 0 99G 0 part
|-cs-root 253:0 0 63.9G 0 lvm /
|-cs-swap 253:1 0 4G 0 lvm [SWAP]
`-cs-home 253:2 0 31.2G 0 lvm /home
sdb 8:16 0 200G 0 disk
`-sdb1 8:17 0 190.7G 0 part
sr0 11:0 1 10.3G 0 rom
//格式化并挂载
[root@KVM ~]# mkfs.xfs /dev/sdb1
[root@KVM ~]# blkid /dev/sdb1
/dev/sdb1: UUID="a7f6c042-a8ec-4e56-891a-fc82bea345c7" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="b1325be8-01"
[root@KVM ~]# mkdir /KVMdata
[root@KVM ~]# echo "UUID=a7f6c042-a8ec-4e56-891a-fc82bea345c7 /KVMdata xfs defaults 0 0" >> /etc/fstab
[root@KVM ~]# mount -a
[root@KVM ~]# df -Th
Filesystem Type Size Used Avail Use% Mounted on
devtmpfs devtmpfs 3.8G 0 3.8G 0% /dev
tmpfs tmpfs 3.8G 0 3.8G 0% /dev/shm
tmpfs tmpfs 3.8G 9.0M 3.8G 1% /run
tmpfs tmpfs 3.8G 0 3.8G 0% /sys/fs/cgroup
/dev/ma