1 虚拟化基础

1.1 传统的物理机部署方案

  • IDC选择,如:联通,电信,世纪互联,鹏博士等
  • 服务器选型及采购
  • 服务器系统选择、系统安装、上架
  • 应用规划及部署
  • 域名选择及注册
  • DNS配置映射
  • 测试外网访问

传统数据中心面临的问题:

  • 服务器和网络设备资源利用率过低,并且无法共享,导致资源浪费
    据统计大部分数据中心中的服务器和网络设备的利用率仅在24%~30%之间,有的CPU利用率、硬盘利用率都在10%以下
  • 资源分配后进行调整困难
    资源分配不合理也是传统网络架构存在的问题,因为资源不能动态调配,分配出去的资源是固定的,不能随意添加或删除。
  • 难以实现自动化
    初始化成本高,服务器迁移和升级很繁琐,无法实现自动化
  • 成本高昂
    集群环境需要大量的服务器主机,硬件投入和后期维护管理成本巨大

1.2 虚拟化和虚拟机

1.2.1 虚拟化

参考资料:https://www.vmware.com/cn/solutions/virtualization.html

1.2.1.1 什么是虚拟化

在计算机技术中,虚拟化(Virtualization)是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分割、组合为一个或多个计算机配置环境,并重新分割、重新组合,以达到最大化合理利用物理资源的目的。

1.2.1.2 虚拟化优势

虚拟化可以提高IT敏捷性、灵活性和可扩展性,同时大幅节约成本。更高的工作负载移动性、更高的性能和资源可用性、自动化运维–这些都是虚拟化的优势,虚拟化技术可以使IT部门更轻松地进行管理以及降低拥有成本和运维成本。其优势包括:

  • 资源超分,如物理内存128G,可以给虚拟机分配200G内存
  • 降低资金成本和运维成本
  • 最大限度减少或消除停机
  • 提高IT部门的工作效率、效益、敏捷性和响应能力
  • 加快应用和资源的调配速度
  • 提高业务连续性和灾难恢复能力
  • 简化数据中心管理
  • 真正的Software-Defined Data Center的可用性
  • 减少端口的冲突

1.2.1.3虚拟化的发展史

1959年,计算机科学家christopher strachey发表了一篇名为《大型高速计算机中的时间共享》(Time Sharing in Large Fast Computers)的学术报告,他在文中首次提出了虚拟化的基本概念,被认为是虚拟化技术的最早论述

1964年,IBM推出了专为System/360 Mainframe量身订造的操作系统CP-40,首次实现了虚拟内存和虚拟机。

1967年,第一个管理程序(hypervisor)诞生,5年之后,IBM发布用于创建灵活大型主机的虚拟机(VM)技术,该技术可根据动态的需求快速而有效地使用各种资源。从此,虚拟化这一词汇正式被引入了IT的现实世界。

20世纪70年代的system 370系列中通过虚拟机监控器(virtual Machine Monitor,VMM)的程序在物理硬件之上生成多个可以独立运行操作系统软件的虚拟机实例

20世纪 90年代windows的广泛使用以及Linux作为服务器系统的出现奠定了x86服务器的行业标准地位。

1998年VMware公司在美国成立,1999年VMware发布了它的第一款产品VMware Workstation、2001年发布VMware GSX Server和VMware ESXI Server宣布进入服务器虚拟化市场, 2003年VMware推出了VMware virtual Center,2004年推出了64位支持版本,同年被EMC收购,2013年收入52.1亿美元。2015年10月12日,戴尔与数据存储公司EMC的并购宣布完成,最终戴尔以670亿美元收购了EMC

2003年,Xen实现半虚拟化

2005年,HVM硬件辅助的虚拟化,Intel VT-x,AMD-V

2005年,openVZ出现,在linux平台上的容器化技术实现

2006年,QEMU

2007年,KVM(Kernel-based Virtual Machine)基于内核Linux 2.6.20

2007年8月21日,思杰宣布5亿美元收购XenSource公司,并推出服务器虚拟化XenServer、桌面虚拟化XenDesktop和应用虚拟化XenApp,2013年收入29亿美元。

2008年,LXC发布

2008年3月13日微软在北京发布Windows Server 2008,内置虚拟化技术hyper-v。

2008年9月,红帽以1.07亿美元的价格收购KVM的以色列母公司Qumranet,并推出企业级虚拟化解决方案RHEV,目前最新版本3.3,2013年收入超过13亿美元

2013年,docker发布

2017年11月全球最大公有云厂商AWS宣布了全新的C5实例,该实例完全基于新的虚拟机监控程序(Hypervisor): KVM。在之前的11年里,AWS的所有虚拟化实例都是基于XEN技术实现的。也就是说AWS也开始转向了KVM之路而不再坚持使用从其诞生之日起一直使用的XEN技术,事实上国内的阿里云早在2015年就开始从XEN切换到KVM

1.2.2 虚拟机

1.2.2.1 虚拟机

虚拟计算机称为"虚拟机"(VM,Virtual Machine),它是一种严密隔离且内含操作系统和应用的软件容器。每个虚拟机都是完全独立的。通过将多台虚拟机放置在一台物理计算机上,可仅在一台物理服务器或"主机"上运行多个操作系统和应用,名为"hypervisor"的精简软件层可将虚拟机与主机分离开来,并根据需要为每个虚拟机动态分配计算资源。

1.2.2.2 虚拟机的主要特性

虚拟机具有以下特征,这些特征可提供多项优势

分区

可在—台物理机上运行多个操作系统
可在虚拟机之间分配系统资源

隔离

可在硬件级别进行故障和安全隔离
可利用高级资源控制功能保持性能

封装

可将虚拟机的完整状态保存到文件中
移动和复制虚拟机就像移动和复制文件─样轻松

独立于硬件

可将任意虚拟机调配或迁移到任意物理服务器上
安装系统不会受硬件兼容性的影响

1.3 虚拟化类型

1.3.1 服务器虚拟化

服务器虚拟化支持将多个操作系统作为高效的虚拟机在单个物理服务器上运行。主要优势包括:

  • 提升IT效率
  • 降低运维成本
  • 更快地部署工作负载
  • 提高应用性能
  • 提高服务器可用性
  • 消除服务器数量剧增情况和复杂性

1.3.2 网络虚拟化

通过软件定义网络(Software Defined Network,SDN),即网络的创建不再依赖于物理设备,如公有云厂商允许用户自己创建新的网络,在kubernetes、openstack中都会使用到网络虚拟化。

1.3.3 桌面虚拟化

将桌面部署为代管服务,使IT组织能够更快地响应不断变化的工作场所需求和新出现的机会。还可以将虚拟化桌面和应用快速、轻松地交付给分支机构、外包和离岸员工以及使用iPad和Android平板电脑的移动员工。

Citrix思杰公司在云计算虚拟化、虚拟桌面和远程接入技术领域的处于优势地位

1.3.4 应用虚拟化

将软件虚拟化,比如office 365,钉钉,企业微信

1.3.5 存储虚拟化

SAN(基于磁盘)/NAS(NFS/Samba)/GlusterFS/ceph等

1.3.6 库虚拟化

在linux上运行windows程序使用wine,在mac系统运行windows程序使用CrossOver等

1.3.7 容器虚技术

被称为下—代虚拟化技术,典型代表:Docker、Podman、Linux Container(LXC)、Pouch

1.4 Hypervisor类型

1.4.1 Hypervisor介绍

  • Hypervisor是一种运行在基础物理服务器和操作系统之间的中间软件层,其可以允许多个操作系统和应用共享底层的内存、CPU、磁盘等物理硬件,也可叫做VMM (virtual machine monitor),即虚拟机监视器。
  • Hypervisor是所有虚拟化技术的核心,非中断地支持多工作负载迁移的能力是Hypervisor的基本功能,当服务器启动并执行Hypervisor时,它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的客户操作系统。
  • 多数的虚拟化而采用虚拟机管理程序Hypervisor
  • 允许多种操作系统在相同的物理系统中运行
  • 控制硬件并向来宾操作系统提供访问底层硬件的途径
  • 向来宾操作系统提供虚拟化的硬件

X86 CPU的保护环

注意:CPU为了保证程序代码执行的安全性、多用户的独立性、保护OS的正常运行,提出了CPU执行状态的概念。这样能够限制不同程序之间的访问能力,避免一个程序获取另一个程序的内存数据造成数据混乱,同时也避免了程序错误的操作物理硬件。一般CPU都会划分为用户态和内核态,x86的CPU架构更是细分为了Ring3~0四种状态。

Ring3用户态(User Mode):运行在用户态的程序代码需要受到CPU的检查,用户态程序代码只能访问内存页表项中规定能被用户态程序代码访问的页面虚拟地址(受限的内存访问),而且还只能访问任务描述符TSS中的I/O Permission Bitmap中规定能被用户态程序代码访问的端口。甚至不能直接访问外围硬件设备、不能抢占CPU。所有的应用程序都运行在用户态上。当运行在用户态的Application需要调用只能被核心态代码直接访问的硬件设备时,CPU会通过特别的接口去调用核心态的代码,以此来实现Application对硬件设备的调用。如果用户态的Application直接调用硬件设备时,就会被Host OS捕捉到并触发异常,弹出警告窗口。

Ring0核心态(Kernel Mode):是Host OS Kernel运行的模式,运行在核心态的代码可以无限制的对系统内存、设备驱动程序、网卡接口、显卡接口等外围硬件设备进行访问。只有Host OS能够无限制的访问磁盘、键盘等外围硬件设备的数据,但是首先需要在Host OS上安装驱动程序

1.4.2 Hypervisor分类

1974年Gerald J.Popek和Robert P.Goldberg的文章"Formal Requirements for Virtualizable Third Generation Architectures"将Hypervisor分为两类:

1.4.2.1 类型I:裸金属型

直接运行到物理机的Hypervisor上,这种架构搭建的虚拟化环境称为裸机虚拟化环境(Bare-Metal Hardware

KVM
XEN
vmware esxi
rhev hypervisor
Hyper-v Server

# Redhat将KVM划分到类型Ⅰ即裸机型:
https://www.redhat.com/zh/topics/virtualization/what-is-KVM

1.4.2.2 类型Ⅱ:宿主型

即需要运行在具有虚拟化功能的操作系统上的Hypervisor,构建的是主机虚拟化环境(Hosted Virtualization)

vmware workstation
Microsoft Hyper-V
VirtualBox
paralles desktop    # Mac系统最强虚拟机技术