虚拟化相关概念


本文主要讲解一下虚拟化相关的一些概念及技术。

什么是虚拟化

虚拟化使得在一台物理的服务器上可以跑多台虚拟机,虚拟机共享物理机的 CPU、内存、IO 硬件资源,但逻辑上虚拟机之间是相互隔离的。
物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)。

那么 Host 是如何将自己的硬件资源虚拟化,并提供给 Guest 使用的呢?
这个主要是通过一个叫做 Hypervisor 的程序实现的。

Hypervisor

Hypervisor:一种运行在物理服务器和操作系统之间的中间层软件,可以允许多个操作系统和应用共享一套基础物理硬件,它可用协调所有物理设备和虚拟机,所以又称为虚拟机监视器(Virtual Machine Monitor, VMM)。hypervisor是所有虚拟化技术的核心
常见的Hypervisor分两类:

  1. Type-I(裸金属型),也叫全虚拟化
  2. Type-II型(宿主型),也叫半虚拟化

全虚拟化

指Hypervisor 直接运作在裸机上,使用和管理底层的硬件资源,Guest OS对真实硬件资源的访问都要通过Hypervisor 来完成,作为底层硬件的直接操作者,Hypervisor 拥有硬件的驱动程序。Hypervisor 实现方式一般是一个特殊定制的 Linux 系统。Xen 和 VMWare 的 ESXi 都属于这个类型。
在这里插入图片描述

半虚拟化

物理机上首先安装常规的操作系统,比如 Redhat、Ubuntu 和 Windows。Hypervisor 作为 OS 上的一个程序模块运行,并对管理虚拟机进行管理。KVM、VirtualBox 和 VMWare Workstation 都属于这个类型。
由于Guest OS对硬件的访问必须经过Host OS,因而带来了额外的性能开销,但可充分利用宿主操作系统提供的设备驱动和底层服务来进行内存管理、进程调度和资源管理等。
![Type-II](https://img-blog.csdnimg.cn/5144b278c00a49db961da5f55268fa97

总结

  1. 全虚拟化性能更好,因为不需要用kvm做底层
  2. 半虚拟化因为基于普通的操作系统,会比较灵活,比如支持虚拟机嵌套。嵌套意味着可以在KVM虚拟机中再运行KVM。

KVM

KVM(Kernel-based Virtual Machinel):是一个开源的、嵌入在Linux操作系统标准内核中的系统虚拟化模块,它能够将一个Linux标准内核转换成为一个VMM,也就是说计算机物理硬件层上直接就是VMM虚拟化层,在这样的环境中HostOS就是一个VMM。这种时候,由KVM创建的GuestOS都是HostOS(或VMM)上的一个单个进程。而在GuestOS上的用户空间中运行的应用可以理解为就是进程中的线程。
KVM有一个内核模块叫 kvm.ko,只用于管理虚拟 CPU 和内存。那 IO 的虚拟化,比如存储和网络设备则是由 Linux 内核与Qemu来实现。

QEMU

QEMU(Quick Emulator):一种通用的开源计算机资源仿真器和虚拟器。可以模拟CPU、内存等,使Guset OS认为自己和硬件直接打交道,其实是同QEMU模拟出来的硬件打交道,但由于所有指令都需要经过QEMU来翻译,因而性能会比较差。

QEMU-KVM

KVM负责cpu虚拟化+内存虚拟化,实现了cpu和内存的虚拟化,但kvm并不能模拟其他设备,还必须有个运行在用户空间的工具才行。KVM的开发者选择了比较成熟的开源虚拟化软件QEMU来作为这个工具,QEMU模拟IO设备(网卡,磁盘等),对其进行了修改,最后形成了QEMU-KVM。
QEMU-KVM

Libvirt

Libvirt 实际上是一个管理 hypervisor 的上层软件,管理虚拟机和其他虚拟化功能,对外提供统一、稳定的应用程序接口。
Libvirt是目前使用最为广泛的对KVM虚拟机进行管理的工具和API。

Libvirtd是一个daemon进程,可以被本地的virsh调用,也可以被远程的virsh调用,Libvirtd调用qemu-kvm操作虚拟机。它包括一个API库,一个守护程序(libvirtd)和一个命令行工具(virsh)。

一些常用的虚拟机管理工具(如virsh,virt-install,virt-manager等)和云计算框架平台(QpenStack,OpenNebula,Eucalyptus等)都在底层使用libvirt的应用程序接口。
在这里插入图片描述

API库

  1. 连接Hypervisor相关的API:以virCnnect开头的一系列函数。
  2. 域管理的的API:以virDomain开头的一系列函数。
  3. 节点管理的API:以virNetwork开头的一系列函数。
  4. 网络管理的API:以virNetwork开头的一系列函数和部分以virlnterface开头的函数。
  5. 存储卷管理的API:以virStouageVol开头的一系列函数。
  6. 存储池管理的API:以virStoragePool开头的一系列函数。
  7. 事件管理的API:以virEvent开头的一系列函数。
  8. 数据流管理的API:以virStream开头的一系列函数。

守护进程 libvirtd

守护进程 libvirtd 对 virsh 的命令做出响应。

命令行工具 virsh

常用的命令如下:

  1. virsh list 列出给定主机上的活动域域id和状态 查看在运行的虚拟机
  2. virsh list --all 查看创建的所有虚拟机
  3. virsh start domain_name 启动名称为domain_name的虚拟机
  4. virsh suspend domain_name 挂起虚拟机
  5. virsh resume domain_name 恢复被挂起的虚拟机
  6. virsh autostart domain_name 开机启动虚拟机,及在虚拟服务libvirt启动时启动虚拟机
  7. virsh auto start --disable domain_name 关闭开机启动虚拟机
  8. virsh shutdown domain_name 关闭虚拟机
  9. virsh reboot domain_name 重启持久虚拟机
  10. virsh reset domain_name 强制重启虚拟机
  11. virsh destroy domain_name 强制关闭虚拟机,这种方式是从virsh list列表中将虚拟机删
    除,仍然可以start起来
  12. virsh net-start default 启动默认的网络
  13. virsh net-autostart default 自启动默认网络

相关学习文档

KVM 介绍(1):简介及安装
kvm虚拟化
QEMU,KVM及QEMU-KVM介绍
libvirt虚拟化技术介绍
libvirt详解

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值