KVM 虚拟化
背景:
随着硬件的设备性能越来越高,成本也越来越低廉,我们在硬件上运行一些程序跑一些业务的时候,可能会对硬件的资源造成一种浪费。这时候我们直接在硬件上采用的一些虚拟化技术,虚拟一些虚拟的机器,让业务泡在虚拟机中。方便后期的维护,迁移
常见的虚拟化:
Eg: 云平台 openstack
Hardware 是硬件
Os 系统
Hapervisor ,VMM 是虚拟软件
Guest OS 虚拟机
Os 与 hardware 构成一个服务器,通过hypersvisor 对他物理的资源进行虚拟化,通过hypervisor 管理创建的虚拟机
如果不需要os 的虚拟化称为 原生态虚拟化
如果以os 的虚拟化称为 寄居
虚拟化技术既是对资源的抽象
如果我们用虚拟化技术模拟得是底层的硬件,eg CPU 内存和外设等,这种虚拟化技术称为 “平台虚拟化” 每个平台都可以运行自己独立系统。
如果我们把操作系统及其提供的系统调用作为资源“操作系统虚拟化”模拟操作系统的一些应用程序和库。Eg:docker
平台虚拟化:
虚拟化管理程序Hypervisor (VMM)
在平台虚拟化中管理虚拟化的一套软件,可以允许多个操作系统和应用共享硬件
Hypervisor 可以以截获虚拟机的命令。让虚拟程序不去影响物理机
根据平台虚拟化,虚拟化的划分:
半虚拟化:
利用hypervisor 可以绕过自己的虚拟硬件,通过一些系统的调用去跑一些真实的物理硬件!
半虚拟化体现在输入输出的设备上如网卡硬盘,对操作系统有一定的限制
全虚拟化 ----已经淘汰了
硬件辅助全虚拟化
有硬件底层添加的虚拟化技术的支持,上层虚拟化跑的应用子调用底层的CPU直接由底层的虚拟化去调用,不在需要中间的hypervisor 的去运行,(对CPU有要求,CPU要支持虚拟化)
标志:
Intel 支持硬件辅助虚拟化 VT-x
AMD 支持硬件辅助虚拟化 AMD-v
如何实现硬件的虚拟化的那?
对CPU指令集进行改造。
能在CPU上运行的东西我们称他CPU指令集,所有能在CPU上能运行得命令是分等级分环的!
Ring 0 内核级别的命令是运行在
Ring 3 用户空间的命令
Ring 1 与 ring 2 在没有运行虚拟化的时候是空闲的。
Ring -1 是运行虚拟化的敏感命令如关机之类的
硬件辅助,中间的改造运行虚拟化都在底层的CPU上进行!
硬件辅助虚拟化: linux 的KVM
可以通过lscpu 查看机器是否支持虚拟化
操作系统虚拟化与传统虚拟化
- 省却了虚拟硬件
- 省却了虚拟软件
以lvm 为例:
Kvm 实际是内核的一个模块,这个模块本身提供了CPU 与内存的模拟,借助quem-kvm 实现一个硬盘和网卡的模拟
我们从物理机看kvm ,kvm在物理机上是以进程存在。
Libvirt 上虚拟机的一些管理命令
KVM 的安装
手工去安装kvm
方法一: 通过yum install 安装包
[root@study-server ~]# yum install qemu-kvm qemu-img libvirt
[root@study-server ~]#yum install virt-install.noarch libvirt-python.x86_64 virt-manager python-virtinst libvirt-client.i686 --skip-broken
装软件组前三必须安装: yum groupinstall -y “virt*”
通常情况下往虚拟机拷贝文件,首先的需要虚拟机是运行开启的,
Libguestfs 支持虚拟机不开机就可以往虚拟机里拷贝文件、从虚拟机往出拷贝文件等
通过: lsmod | grep kvm 检查kvm 模块是否安装成功