前言
好久没有更新了,在进行自我校准。
云计算是什么?
云计算是一种模型,它使得用户能够随时随地、方便地、按需访问共享的可配置计算资源池(例如,网络、服务器、存储、应用程序和服务),这些资源可以快速配置和释放,几乎不需要管理努力或服务提供商的交互。
云特征
-
按需自助服务
- 专注于根据用户请求提供IT服务
- 不需要与云提供商进行人工交互
- 云计算提供了一种交付计算服务的方式,使得用户设备之外的底层技术几乎不可见
-
广泛的网络访问
- 专注于随时随地通过用户选择的设备提供IT服务
-
资源池化
- 将计算资源整合到池中以提高利用率
-
快速弹性
- 根据底层工作负载的要求和使用特征动态分配和收缩资源
-
可度量服务
- 专注于提供可以计量使用量并按需收费的IT服务(如果需要)通过包括订阅、使用定价在内的定价模型 - 服务水平协议(SLA)
云服务模型
- 软件即服务(SaaS)
- 平台即服务(PaaS)
- 基础设施即服务(IaaS)
云部署模型
- 公有云
- 私有云
- 混合云
- 社区云
虚拟化的历史
虚拟化有多久了?
半个世纪!
当时最成功的计算机S/360大型机系统没有在CPU级别提供虚拟内存和特权分离。当时的主流计算模型是非交互式的、批量作业。
虚拟化的概念直到六十年代末才在CP-40项目中被研究和尝试,该项目最终导致了第一个真正的完整虚拟化支持,出现在1966年的IBM S/370-67中。
时间共享系统开发的主要驱动因素是,批量处理中等待I/O是低效的,程序必须在程序员可以获得失败之前排队等待。
有趣的是,正是时间共享概念的兴起催生了计算机安全问题。
尽管时间共享技术在当时的政治斗争中输给了批处理架构。
在个人电脑世界中,时间共享功能的动力并不显著,因为个人电脑的CPU足够便宜,可以分配给一个人使用。
许多公司推出了提供虚拟化功能的桌面产品。但它们并不十分实用(由于复杂性和低性能)。
然而,互联网的兴起带来了大量服务器农场的出现,运行着像网站这样的应用程序。这些应用程序的负载模式显然与大型机和终端一样是突发性的。
因此,在同一个系统上并行运行许多不同的应用程序再次变得有意义。
大约在2005年,个人电脑CPU供应商引入了支持虚拟化的新CPU指令——英特尔VT-x和AMD-V CPU。
到这一刻,实际的虚拟化已成为可能。
虚拟化到底是什么?
现在,有些人在谈到虚拟化的术语时可能会感到有点困惑。让我们弄清楚是什么:
多线程:执行环境允许每个进程并行运行多个代码流。
多任务:操作系统让每个任务(进程)感觉它是唯一在系统上运行的,并且可以完全访问系统资源(内存,I/O)。对于虚拟机工作的关键硬件组件是MMU。
有趣的事实:在批处理时代,多任务的替代方案是多编程——当任务在I/O上被阻塞时,从CPU上卸下的动态任务队列。
虚拟化:每个操作系统实例都感觉它是在CPU/系统上唯一运行的操作系统,并且可以完全访问系统资源(例如,每个操作系统都认为它有自己的CPU、内存、I/O)。
容器:给一组任务、应用程序的印象,它是在操作系统内唯一运行的。然而,容器共享同一个操作系统内核实例。
与虚拟化主题不直接相关,但并行性可能出现的另一个地方是CPU。随着制造工艺的进步,我们现在有了内置在单个芯片中的多个CPU(多核CPU)。
另一种技巧是虚拟化CPU本身——超线程技术在单个物理CPU之上呈现多个虚拟CPU。
2005年之前虚拟化是如何工作的?
实际上,基于各种技巧,使用英特尔80386+ CPU可以实现虚拟化。比如将管理程序放在环0,虚拟机放在环1,应用程序放在环2。
尽管这从实现角度来看很复杂,有显著的限制,并且运行缓慢。
随着2005年(个人电脑CPU)更好的CPU支持虚拟机管理的出现,虚拟化变得实用。
这已经是云了吗?
一旦虚拟化就位,它如何成为云?
为了提供云服务,我们需要:
- 管理程序来控制虚拟机的生命周期
- 更高层次的虚拟化管理基础设施和额外的服务
那么为什么这个东西被称为“管理程序”呢?如果这个术语没有已经被操作系统(监督资源和任务)占用的话,它可能是“监督器”。因此,管理程序监督租户操作系统。
管理程序
管理程序是一个创建和运行虚拟机的软件。
运行一个或多个虚拟机的管理程序的计算机被称为宿主机,每个虚拟机被称为客户机。
存在两种类型的管理程序:
- 第1类或裸机或本地
- 第2类或托管管理程序
本地管理程序
这些管理程序直接在宿主的硬件上运行,以控制硬件和管理客户操作系统。
IBM在1960年代开发的第一批管理程序是本地管理程序。现代本地管理程序包括:Xen、Oracle VM Server、Microsoft Hyper-V和VMware ESX/ESXi。
托管管理程序
这些管理程序像其他计算机程序一样在传统的操作系统上运行。客户操作系统作为宿主上的一个进程运行。第2类管理程序将客户操作系统从宿主操作系统中抽象出来,反之亦然。
现代托管管理程序包括:
- VMware
- VirtualBox
- Parallels Desktop
- QEMU
这两种类型之间的区别并不一定清晰。
Linux的KVM和FreeBSD的bhyve是内核模块,有效地将宿主操作系统转换为第1类管理程序。
同时,由于Linux和FreeBSD仍然是通用操作系统,有其他应用程序竞争虚拟机资源,KVM和bhyve也可以被归类为第2类管理程序。
本地与托管混淆
为了增加更多的混淆,管理程序进一步细分为所谓的全虚拟化和准虚拟化能力。
后者涉及修改客户操作系统以显式调用管理程序的服务,而不是让管理程序模拟硬件接口到客户操作系统。在硬件对虚拟化的支持没有完全实现的时候,准虚拟化更有意义。
为什么它被称为管理程序?
“管理程序”这个术语指的是当你有一个监督操作系统内核的监督器时的情况。从历史上看,操作系统内核也被称为监督器(控制用户应用程序)。因此 - 管理程序。
虚拟化管理
到目前为止,我们已经有了在宿主系统上调用虚拟机的方法。问题是:
- 除了启动虚拟机,用户可能需要部署操作系统、配置网络、存储等
- 周围有许多不同的管理程序,用户希望有一个单一的用户界面来管理它们
libvirt项目解决了后一个问题 - 系统提供了一个守护进程来管理客户机,用户面向的CLI工具来控制libvirtd守护进程,以及API让其他程序管理客户机。
oVirt软件在数据中心层面解决了这个问题。它提供了数据中心通常存在的一系列虚拟服务,如:
- [虚拟]机器是计算节点的基础
- 存储节点
- 网络
用户面向的GUI模拟了一个虚拟数据中心,用户可以点击构建他们的计算基础设施。
OpenStack项目提供了与oVirt类似的服务,但在更大的规模、灵活性和可扩展性上。有了OpenStack,人们可以在全球范围内启动成千上万的虚拟机。
OpenStack被设计为一个开放式的网络服务集合,它们相互交互以实现虚拟机生命周期的工作流程。
我们将在本课程中深入研究OpenStack。
云特性
虚拟机可以创建不同的(在它们的“硬件”能力部分)以反映操作系统/应用程序对硬件的要求。
非常容易展开一台新机器并安装操作系统。这可以完全远程完成,无需人工干预。
此外,虚拟机可以被复制(或克隆),从而创建从它们的能力角度以及运行其中的操作系统和应用程序来看完全相同的虚拟计算机。
一旦你的虚拟机处于静止状态,你可以轻松地完全备份它。它可能只是一个应用程序备份,也可以包括整个内存和整个虚拟机的状态。这可以用于运行中的虚拟机的实时迁移。
这为在运行时扩展/缩减计算资源、将虚拟机跨数据中心或地理位置移动奠定了基础。
在虚拟机内运行的操作系统通常看不到宿主计算机的真实硬件。相反,它被呈现一些通用的虚拟硬件,这些硬件映射到真实硬件,因此虚拟硬件的API永远不会改变。这使得从操作系统维护的角度来看更容易,同时也简化了虚拟机从一个硬件迁移到另一个硬件的过程。
如果你在软件开发或测试中,能够复制一个潜在复杂的黄金标准环境以备后用可能是一个非常强大的功能。