zoukankan      html  css  js  c++  java
  • 虚拟化技术

    一、名词

    1、Virtual Machine Monitor/Hypervisor

    Hypervisor,又称虚拟机监视器(英语:virtual machine monitor,缩写为 VMM)。

    Virtual Machine Monitor/Hypervisor屏蔽底层差异,同一Guest操作系统可以在硬件架构完全不同的服务器上运行(Mac,X86等),

    没有硬件依赖,它可以从一种硬件服务器迁移到另外一台完全不同的硬件服务器,不需要做改变和适配,用户无感知。

    作用

    • 为VM提供硬件模拟(完全虚拟化场景下,其他场景是直接访问硬件)。
    • 隔离VM彼此之间的访问(只可以通过网络进行通信,例如socket)。
    • 限制单个VM对系统资源的访问,防止不稳定的VM影响整个系统性能。

    2、KVM

    KVM(Kernel-based Virtual Machine)

    KVM 全称是 基于内核的虚拟机(Kernel-based Virtual Machine),它是Linux 的一个内核模块,该内核模块使得 Linux 变成了一个 Hypervisor。

    它由 Quramnet 开发,该公司于 2008年被 Red Hat 收购。

    它支持 x86 (32 and 64 位), s390, Powerpc 等 CPU。

    它从 Linux 2.6.20 起就作为一模块被包含在 Linux 内核中。

    它需要支持虚拟化扩展的 CPU。

    它是完全开源的。官网

    3、OpenStack

    OpenStack是一个开源的云计算管理平台项目,是一系列软件开源项目的组合。

    OpenStack 是当今最具影响力的云计算管理工具——通过命令或者基于 Web 的可视化控制面板来管理 IaaS 云端的资源池(服务器、存储和网络)。

    它最先由美国国家航空航天局(NASA)和 Rackspace 在 2010 年合作研发,

    现在参与的人员和组织汇集了来自 100 多个国家的超过 9500 名的个人和 850 多个世界上赫赫有名的企业,如 NASA、谷歌、惠普、Intel、IBM、微软等。

    二、服务虚拟化技术的分类

    1、基于主机的服务器虚拟化技术(Host-based server virtualization ,虚拟机)

    • 完全虚拟化

      完全虚拟化提供了完整的硬件模拟,这有一个优势,即完全的虚拟机可移植性。

    • 半虚拟化

      虚拟机中的Guest操作系统需要重新编译,让其知道处于虚拟化环境中,以便可以和 Host 操作系统或者VMM/Hypervisor协调工作。

    • 硬件辅助虚拟化

      英特尔和AMD都积极致力于使其处理器实现虚拟化,意识到虚拟环境的存在,CPU可以直接和VMM/Hypervisor交互。

    2、操作系统虚拟化技术(OS virtualization ,容器)

    • 操作系统虚拟化以应用程序为中心,允许多个虚拟环境(VE)共享一个通用操作系统,每个环境的运行开销比完全虚拟化的主机少得多。
    • 操作系统虚拟化的另一个好处是它不需要虚拟环境中的任何驱动程序或完整硬件仿真。

    OS虚拟化层借助Linux操作系统内核的特性(比如namespacecgroup等)为每个应用程序构建独立的虚拟环境(VE-id),

    各自拥有独立的根文件系统、启动脚本、init、进程ID(同一虚拟环境下的进程ID不重复,不同虚拟环境下的进程ID可以重复),使其认为独占了整个硬件系统。

    虚拟环境(VE)不需要安装操作系统、设备驱动等,相比虚拟机,要省去了很多内存和硬盘开销。

    同时,不需要模拟硬件指令(直接调用操作系统的system Call),虚拟环境中的应用程序执行性能接近本机。

    • 内核对容器的支持

    基于容器的虚拟化使用了内核提供的许多功能,以便隔离进程或实现其他有助于实现此目的的目标,

    大多数解决方案都基于Linux内核,由于内核提供了所需的大部分功能,容器工具包通常不必再次实现它们,

    内核代码已经被其他被认为是稳定的并且已经在生产中使用的软件所使用。如果内核提供的机制存在安全问题,

    则会随着内核更新而分发修复程序,这意味着不需要修补容器软件,用户只需保持内核的最新状态。

    chroot:chroot机制允许更改进程及其所有子进程的根目录,用于限制对单个文件夹的文件系统访问,目标进程及其子进程将该文件夹视为根文件夹(/)(不提供进程隔离)。

    namespace(by IBM):内核命名空间是进程隔离的基础,是实现基于容器的虚拟化的关键概念之一,

    它能够隔离进程、进程组甚至完整的子系统(如进程间通信或者内核的网络子系统)。每个命名空间中的进程ID分配是独立的,不同命名空间中的进程可能具有相同的进程ID。

    Control group(by Google ):cgroup是一种跟踪进程和进程组(包括创建的子进程)的机制,它提供的钩子允许其他子系统扩展这些功能,

    并实现细粒度的资源控制和限制。将资源分配给进程、进程组并管理这些分配的能力允许规划和控制容器的使用。同样,若有进程已声明了对某些资源的占用,其他进程则无法使用。

    Mandatory Access Control :MAC策略通常用于限制对敏感资源的访问(而这些访问在一定上下文下是不需要的),以减轻从容器内部对主机和其他容器的攻击,

    从而提高容器虚拟化技术的安全性。

    参考资料

    从虚拟机到容器,详谈各种服务虚拟化技术及其应用场景

    OpenStack是什么?

    KVM系列文章

    (1)介绍和安装

    (2)CPU 和 内存虚拟化

    (3)I/O QEMU 全虚拟化和准虚拟化(Para-virtulizaiton)

    (4)I/O PCI/PCIe设备直接分配和 SR-IOV

    (5)libvirt 介绍

    (6)Nova 通过 libvirt 管理 QEMU/KVM 虚机

    (7)快照 (snapshot)

    (8)迁移 (migration)

  • 相关阅读:
    Java 线程具有五中基本状态 ?
    可以直接调用 Thread 类的 run ()方法么?
    创建线程的三种方式的对比?
    FutureTask 是什么 ?
    什么是 CAS?
    如何让正在运行的线程暂停一段时间?
    什么是不可变对象(immutable object)?Java 中怎么 创建一个不可变对象?
    创建线程的有哪些方式?
    Semaphore 有什么作用 ?
    CopyOnWriteArrayList 可以用于什么应用场景?
  • 原文地址:https://www.cnblogs.com/wangwangfei/p/13942288.html
Copyright © 2011-2022 走看看