目录
学习目标
- 理解什么是虚拟化技术
- 理解虚拟化技术发展的方向
一、虚拟化技术概述
一般而言,狭义的虚拟化有点类似于我们常听说到的“虚拟机”,即将一台物理机器虚拟成多台逻辑上的计算机,每个逻辑计算机相对独立,可以运行不同的操作系统,跑不同的应用,这样以达到可以更自由、灵活地分配和利用物理资源的目的。
而广义的虚拟化技术是指对计算资源的抽象,这些计算资源包括CPU、内存、存储(磁盘)、网络,甚至也可以包括像GPU、FPGA这类外部设备。对计算资源做抽象的好处颇多,最显著的就是可以隐藏软硬件工作环境的复杂度,给使用方提供更简单、清晰的功能接口。
在早期,业务都是基于应用(Application),如果一台服务器上运行了两个重要的应用,其中一个应用的出错可能引起系统的奔溃,导致另外一个应用也不可提供服务,因而出于稳定性和安全方面的考虑,一台服务器上通常只运行单一应用。
在这样的场景下,伴随着业务发展,业务部门如果要新增一个应用或者对原有应用做扩展,就必须采购新的服务器。很少有人能准确评估出应用在不同场景下所需的服务器资源,所以采购部门采购的服务器一般都是性能较好的服务器,正常情况下运行应用都不会超过服务器额定负载的20%。
这样就会带来一个问题,服务器资源被很大程序的浪费了。
20世纪60年代,IBM开发了大型机CP-40系统,CP-40支持14个虚拟机同时运行,不过CP-40从未公开发售,只被用于IBM实验室里。CP-40架构被沿用到IBM之后开发的CP-67系统上,而后者是第一个支持虚拟化的商业大型机。运行在CP-67上的操作系统也被称为CMS(Console Monitor System),是IBM首个交互式的系统。
在80年代末,Insignia Solutions公司发布了SoftPC,其能够让用户在UNIX工作站上运行DOS操作系统的应用。
在90年代末,VMWare公司发布了VMWare Workstation,最早版本的VMWare Workstation只能运行在windows之上,之后的版本添加了对其他操作系统的支持。
如果只用一句话去概括虚拟化的核心含义,那就是使一个物理机器能够同时运行多个独立的系统。
虚拟机是在独立的系统资源(CPU、内存、存储、网络等)上,有操作系统及应用程序。虚拟后的资源是隔离的,也就是说操作系统是感知不到在同一台物理机上其他虚拟机的。
虚拟化技术的核心组件是虚拟机监控程序(Virtual Machine Monitor),简称VMM,又称为Hypervisor,它管理的是虚拟机上操作系统的系统调用到虚拟硬件的交互,以及发生在更底层的物理机器上的实际执行。
将物理机上的操作系统称为宿主机操作系统(Host OS),将虚拟机上的操作系统称为客户机操作系统(Guest OS),则它们的层次关系如下图
二、虚拟化技术的优点:
- 提升资源的利用率
- 便于管理
- 减少不可提供服务的时间
- 快速部署
- 更高的灵活性
三、虚拟化技术的缺点:
- 虚拟化本身消耗计算资源
- 搭建和维护虚拟化环境消耗人力资源
- 安全问题
四、虚拟化分类
对虚拟化的分类,我们可以按在硬件层上的虚拟化、操作系统层上的虚拟化、库函数层上的虚拟化和编程语言上的虚拟化来分类。平常我们所说的虚拟化,更多的是指前两种虚拟化。
一般而言,虚拟机监控程序hypervisor有两种类型
- 裸金属(bare metal)形式
直接运行在机器硬件之上,使用该架构的虚拟机有Oracle VM, Microsoft Hyper-V, VMWare ESX和Xen。
- 宿主机(hosted)形式
运行在目标机器的操作系统上。使用该架构的虚拟机包括VMware Workstation,Microsoft Virtual PC,QEMU和KVM
hypervisor中裸金属形式和宿主机形式的示意图:
裸金属形式的hypervisor由于直接在物理硬件之上,这相对于宿主形式的hypervisor有更高的资源利用率和安全性。
当然,这对开发者和维护者而言则要求有更高的门槛,毕竟直接在硬件上实现虚拟化层比在操作系统上实现虚拟化层要难很多。
举例来说明这一点,同样是要编程实现一个简单的web服务器,如果你精通特定架构CPU的汇编语言,当然比用Python语言实现的服务器效率要高的多,但是对于大多数普通的开发者而言,掌握汇编语言比掌握Python语言要困难,其开发和调试的难度也比使用Python要大。所以要选择哪种类型要看具体的应用场景及实际客观条件,没有最好的,只有更适合的,这和系统架构的选择是一样的道理。
五、虚拟化案例
桌面虚拟化之Oracle VM VirtualBox,VirtualBox可能是世界上最为人所知的虚拟化软件,因为它完全是免费的。当前它有两种版本,一种是免费但非开源的VirtualBox,另一种是免费且开源版本,叫VirtualBox-ose
桌面虚拟化之VMware Workstation,VMware Workstation分为两种,分别是VMware Workstation Player和VMware Workstation Pro。前者是免费的,比较适合普通个人用户,操作较简单,功能少,体积小。而后者则是不免费的,比较适合有基础的高级用户或企业用户。
KVM中文名是基于内核的虚拟机,是Kernel-based Virtual Machine的缩写KVM(用于基于内核的虚拟机)是适用于 x86 硬件上的 Linux 的完整虚拟化解决方案,包含虚拟化扩展(Intel VT 或 AMD-V)。它由一个可加载的内核模块 kvm.ko 组成,该模块提供核心虚拟化基础架构和一个处理器特定模块 kvm-intel.ko 或 kvm-amd.ko。使用 KVM,我们可以运行多个运行未经修改的 Linux 或 Windows 映像的虚拟机。每个虚拟机都有私有的虚拟化硬件,比如网卡、磁盘、图形适配器、CPU、内存等。
根据Docker官方的描述,Docker是一个用于开发、发布和运行分布式应用的开放平台。Docker封装了整个软件运行时环境,开发者可以像管理应用一样管理应用运行时所需要的基础设施环境。
可以这样简单地理解成,之前在虚拟机中所运行的应用,在使用了Docker之后,虚拟机所提供的“物理”环境和应用本身都可以在Docker中配置好。这样的话,测试和部署代码都很便捷,能够显著地减少开发者写代码到发布应用之间的时间。
Docker能集成应用所需的运行环境,这意味着开发者在本地容器上所开发和测试的代码是可以和将来应用上线时所运行的环境相同,只要开发者用的是同一个标准的Docker容器。如果线上的服务器有CentOS 5.3,CentOS 6.3和Debian 10 三种环境(在现实中这并不是一个非常极端的假设),那么开发者就不用为了上线应用而用与服务器分别相同的三个系统环境去单独验证了,只需要运行同一个Docker容器即可(更准确地说是同一个Docker镜像在相同配置下运行的Docker应用)
Docker架构示意图如下:
镜像是Docker里最耀眼的特性之一。Docker利用镜像提供的打包技术,实现了“一次构建、处处运行”,开启了一个全新的容器时代。
假设在电竞比赛时,允许参赛选手带上自己的键盘和鼠标是一种“封装运行环境”。那么在Docker里的“封装运行环境”就是依赖镜像来完成的,简单的理解,就是程序、相应的数据以及运行程序所需的一个Linux文件系统。在Docker里,我们把这样的Linux文件系统称为rootfs。
在操作系统中,我们可以把进程理解成是程序的执行过程,相对地程序是进程的静态视图。类似地,Docker容器在宿主机上其实就是一个进程,那么Docker容器就可以理解成是Docker镜像的运行态,而Docker镜像也可以理解为是Docker容器的静止态。
六、虚拟化探讨
虚拟化的本质是一种抽象。定积分的几何意义就是f(x)表示的曲线及其在x轴上的投影所构成图形的面积。这个面积可以看成是无数个矩形的面积之和,因为一段小的(dx足够小)曲线总能被划分成是水平的线段。也就是说,一条曲线被分解成无数个水平的小线段,如果我们把这句话反过来理解,就是无数个水平的小线段被抽象成了一条连续的曲线。
纯粹从几何的角度来看,无数个水平的线段被抽象成了一条曲线,是不是在几何图形的表现上更清晰、简洁了?
那么虚拟化要达到的效果本质上和这个是一样的。虚拟化的本质就是抽象,无论是何种类型的虚拟化,它都会屏蔽一些细节,在某种程度上让用户使用起来更方便,或者说对于资源的管理方而言,出于某种目的(通常是节约资源、最大化资源利用率的目的)而管理起来更方便、高效。
七、编写并使用Shell脚本
controller和compute节点都要做
在上次的openrc.sh脚本后面增加以下三行
Physical_NAME=provider
minvlan=100
maxvlan=201
确认外网卡为ens33
INTERFACE_NAME=ens33
1.基本配置(安装Openstack包、配置域名解析、配置防火墙和Selinux、安装ntp服务)
# controller和compute节点都要做
执行在/usr/local/bin中的
iaas-pre-host.sh进行安装
2.基础服务安装
# controller
执行在/usr/local/bin中的
iaas-install-mysql.sh进行安装
#compute节点
执行命令
#yum -y install MySQL-python
3.安装Keystone认证服务
# controller
执行在/usr/local/bin中的
iaas-install-keystone.sh进行安装
注意,若重启系统,需执行
sh /etc/keystone/admin-openrc.sh
重新获得访问所需访问所用的环境变量
#compute节点、
无需安装
4.安装Glance镜像服务
# controller
执行在/usr/local/bin中的
iaas-install-glance.sh进行安装
5.安装Nova计算服务
# controller
执行在/usr/local/bin中的
iaas-install-nova-controller.sh进行安装
#compute节点
执行在/usr/local/bin中的
iaas-install-nova-compute.sh进行安装
验证服务时输入控制节点root的密码,如Aa123456789
八、实验心得
当进行虚拟化技术实验时,我深刻体会到了其在现代计算环境中的重要性和应用。通过实验,我学到了如何使用虚拟化软件(如VMware或VirtualBox)创建和管理虚拟机。首先,我了解了虚拟化技术如何将物理硬件资源抽象化,使得多个操作系统和应用程序能够共享同一台物理主机,提高了硬件资源的利用率。
其次,我学习了虚拟机的创建过程,包括分配虚拟硬盘空间、配置内存和处理器等资源,并在其中安装操作系统。这些步骤让我更深入地理解了操作系统和硬件之间的交互过程。
在实验中,我还探索了虚拟机之间的网络配置,包括网络连接方式(如桥接、NAT、主机-only等),以及如何通过网络与虚拟机进行通信。这对于理解网络安全和应用部署有重要意义。
最后,通过实验我意识到虚拟化技术不仅仅是技术实现,还能够为企业提供灵活性和成本效益。通过虚拟化,企业可以更高效地管理其IT基础设施,降低硬件成本,并且能够更快速地部署和测试新的应用程序和服务。
在实验中,我也学习了虚拟机快照的使用。快照功能使得我能够在实验过程中随时保存虚拟机的状态,并在需要时快速恢复到先前的状态。这对于测试和实验中可能出现的意外非常有帮助,同时也提升了操作的安全性和效率。
另外,我了解到虚拟化技术对于资源隔离和安全性的重要性。通过虚拟化,不同的虚拟机可以在同一台物理主机上运行,但彼此之间是隔离的,这有效防止了应用程序之间的干扰和安全漏洞的扩散。
在网络方面,我还学习了虚拟局域网(VLAN)的配置和管理,以及虚拟交换机的使用。这些技能不仅扩展了我的网络知识,还增强了我对复杂网络环境中虚拟化配置的理解能力。
总结来说,这次虚拟化技术的实验让我不仅仅掌握了技术操作的技能,更深刻理解了其在提升整体计算效率和资源利用率方面的重要性。这对我的职业发展和技术理解都是极为宝贵的经验。