内容简介:当人们讨论云计算时,经常会提及两个术语:虚拟机和容器。在多云时代尤其如此,因为组织的跨平台战略至关重要。虚拟机和容器这两种技术也有共同点:都是软件技术,都在虚拟化环境中运行。但它们在操作、大小、管理、用例和其他因素上有所不同。以下对虚拟机和容器进行一下比较:
当人们讨论云计算时,经常会提及两个术语:虚拟机和容器。在多云时代尤其如此,因为组织的跨平台战略至关重要。
虚拟机和容器这两种技术也有共同点:都是软件技术,都在虚拟化环境中运行。但它们在操作、大小、管理、用例和其他因素上有所不同。
以下对虚拟机和容器进行一下比较:
虚拟机:一个独立的实例
虚拟机是操作系统的整个实例,通常是Windows或Linux,位于服务器内存的独立部分与系统的其余部分相隔离。
整合任务
虚拟机利用CPU中的高内存容量和多个核心处理器将许多应用程序和任务整合到一个物理硬件上。当虚拟化在十年前首次应用时,这就是它的主要用途。
安全运营的未来
当时,数据中心运营商将应用程序和任务从10个或更多单实例服务器移动到一个虚拟化物理服务器上的情况并不少见。这是效率的一大进步。
成熟的技术
所有主要的虚拟机管理程序供应商(例如VMware、Microsoft、Citrix和Red Hat)都提供自己的虚拟机品牌。该技术非常成熟。
例如,如果物理服务器发生故障,管理程序将自动将其上运行的虚拟机移动到另一个物理服务器,而无需任何人工干预。十年前,工作人员必须人工完成这项工作。
虚拟机还提供硬件抽象层(HAL),因此开发人员可以编写应用程序,而无需担心与底层硬件的兼容性。
容器:只用于移动所需的东西
容器加载的内核和运行时代码足以在容器中运行应用程序,而不是像虚拟机那样加载完整的Windows或 Linux 实例。这种更轻的框架使它们足够灵活,可以在操作环境之间轻松移动。
主要采用Linux
容器只包含一个应用程序和足够的操作系统来执行该应用程序,因此需要对核心操作系统进行一些额外的削减,以适应容器较小的占用空间。因此,容器主要是一种Linux现象,因为它是开放源代码和可修改的。微软确实提供Windows容器,但它们比Linux容器更新,而不是一种成熟的技术。
编排平台
由于容器结构小巧,结构简单,因此需要对容器进行管理。这是通过所谓的编排平台完成的。容器编排管理容器的生命周期,因为它们经常比虚拟机更频繁地启动和关闭。
编排可以(但不限于)提供和部署容器、可用性和故障转移、扩展或删除容器、在发生崩溃或重载时将容器移动到新主机,以及其他资源分配。
首先推出的是Docker,它拥有用于容器管理的Swarm平台。还有Apache基金会的Mesos和Marathon,它们比Swarm复杂一点。
容器编排的黄金标准是Google的Kubernetes。它在DevOps环境中变得流行,用于提供从开发人员抽象硬件层的平台即服务。它也非常便携,可在谷歌云平台、亚马逊网络服务、微软Azure和本地数据中心上运行。
虚拟机与容器:关键区别
大小
虚拟机和容器之间的主要区别在于大小。一个容器可以小到10MB,而虚拟机可以大到几GB。显然这会影响内存,而相同的物理服务器可以容纳比虚拟机更多的容器。
结构
这两种技术的结构存在显着差异。虚拟机完全包含在内,具有操作系统的所有部分,并在硬件支持下运行。容器需要一个底层操作系统,它使用虚拟内存支持进行隔离,为所有容器化应用程序提供基本服务。所以组织需要一个完整的操作系统,无论运行虚拟机或容器,它只是一个结构。当操作系统在虚拟机中时,将在容器层下运行。
它们一起工作
由于它们的性质不同,容器和虚拟机并不会相互竞争,并且可能互相配合。组织可以在复杂的企业中使用它们,将虚拟机用于更大、更复杂的应用程序,以及用于小型、简单、单一用途应用程序的容器。
虚拟机和容器的优缺点
虚拟机提供更多资源
虚拟机比容器具有更多优点。因为组织使用的是完整的操作系统,而不是自定义的削减版本,所以组织可以充分利用操作系统。这意味着所有操作系统资源都可用,并且拥有一整套管理和安全工具。简而言之,组织拥有完整的操作系统,无论是Windows、Red Hat、Ubuntu,还是其他版本的Linux。
虚拟机需要更长的启动时间
当然,虚拟机的缺点之一是规模大。在资源受限的服务器上,这将是限制性的因素。由于具有大小差异,虚拟机可能需要几分钟才能启动,而容器化应用程序几乎可以立即启动。这意味着容器可以在需要时加载,然后在不再需要时关闭,从而释放主机上的资源。
虚拟机的安全挑战
理论上,安全性可能是公共云上的问题,因为组织与其他客户共存,并且不知道他们是谁,或不知道管理云平台的员工是谁。人们一直担心他人会在虚拟机中窥探,会从那里提取信息或数据。
但安全的主要风险更可能是事故。例如,组织可以在AWS上启动具有完全加密或其他安全保护的虚拟机。但是由于进程过载,组织的虚拟机将被移动到另一个服务器,甚至另一个物理位置,并且不会保证安全。这可以通过进行适当和重复的安全检查来缓解。
另一个潜在的安全问题是虚拟机的无序扩展,这是一种常见的现象。在这种情况下,用户会关闭许多虚拟机,而不会关闭原来打开的虚拟机。然后,组织会面临打开过多虚拟机的风险,而这些虚拟机其实是可以有效管理的。也许并不是所有的安全补丁都被应用。这是一个管理问题,而不是技术问题,所以这取决于组织来防止这个问题,而不是云计算提供商。
容器和通信控制
对于容器来说,在某些情况下,所有容器都可以默认相互通信。这意味着如果恶意用户或程序控制了一个容器,它就可以控制所有容器。开发人员应该只允许绝对需要它的容器之间的相互通信,并限制它们允许的通信类型。
由于组织在容器中创建自己的操作环境,所以需要执行内核级修补,并将所有更新应用于操作环境,这会增加组织的工作负载。需要为容器制定某种修补策略并加以实施。
容器和Linux子系统
由于容器不包含完整的操作系统,因此它们可以访问许多Linux内核子系统。Docker使用libcontainers作为其容器技术,并访问容器外的重要命名空间。因此,在容器中拥有完全权限的任何人都可以访问底层操作系统,因此,开始在容器外部进行探索,也许可以窥探其他容器。解决此问题的方法是对容器进行非常仔细和彻底的配置,以确保它们被锁定。
虚拟机和容器用例
尽管它们有相似之处,但容器和虚拟机之间存在根本的使用差异。虚拟机适用于虚拟环境,而容器不需要虚拟机管理程序并使用它们运行的底层操作系统。
虚拟化环境
在虚拟化环境中,组织在管理程序上运行多个操作系统,该管理程序在一台计算机上管理I/O。在容器化环境中,它不是虚拟化的,也不使用管理程序。这并不是说组织不能在虚拟机中运行容器。但这不是最有效的方法。
因此,尽管容器运行在单个操作系统实例上,也就像小型虚拟化一样,因为组织可以在一个物理系统上运行数十个或数百个容器。它是没有虚拟机管理程序的虚拟化,这可能是一件好事。这是因为管理程序受到性能限制,并且还可能阻止访问服务器中的某些组件,例如网络控制器。
DevOps
这是DevOps环境更喜欢容器进行开发测试构建的主要原因之一。它们的容器比虚拟机执行速度快,并且可以更好地访问系统资源。
容器的主要优点是体积小,能够在服务器上运行数百甚至数千个,而不是几十个虚拟机。这取决于容器的另一个优势:它们在虚拟机上的模块化程度更高。应用程序可以在一个称为微服务的技术中分成多个容器。显然,容器和微服务可以很好地协同工作。这种组合有助于隔离问题和任何潜在的崩溃或瓶颈。如果问题是一个大型的单一的应用程序,那么解决本地化问题要容易得多。
更安全的环境
虚拟机是更安全环境的理想选择,因为虚拟机中包含所有内容。容器经常必须与底层操作系统或其他容器通信,这可能带来安全风险。在虚拟机中,一切都在同一个孤岛中。因此,如果组织需要一个完全孤立的、隔离的操作环境,那么采用虚拟机就是解决问题的方法。
老旧系统
虚拟机还允许托管旧版本的操作系统。例如,多年前为旧操作系统编写的应用程序可能无法在新一代操作系统中运行,并且组织可能没有使其资源实现现代化。因此,在虚拟机中运行旧操作系统,让应用程序保持不变。
未来
容器在技术上需要更多的工作才能达到成熟,尽管技术正在快速发展。而虚拟机更加成熟,并且由于其性质,将会更安全且更易于管理。
容器技术(特别是其安全性)仍在不断发展。它还需要在负载平衡、可信连接以及在完整的操作系统中成熟的其他领域进行改进。这是当组织使用操作系统并将其减少到几兆字节时会发生的情况。
展望未来,预计 Docker 和谷歌公司的容器产品将会更加成熟,而虚拟机将继续专注于跨服务器的性能和可迁移性。无论如何,这两种技术将继续在云计算中发挥关键作用。
容器与虚拟机概览
虚拟机vs.容器概览
虚拟机 | 容器 | |
启动时间 | 几分钟 | 以秒计 |
大小 | 多GB | 只需10MB |
操作系统 | Windows, Linux | Linux |
每台机器有多个操作系统 | 是 | 否 |
安全性 | 是 | 否 |
加密 | 一些 | 无 |
故障转移 | 是 | 否 |
将云迁移到本地 | 是 | 是 |
每个实例有多个服务 | 是 | 否 |
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Nature of Code
Daniel Shiffman / The Nature of Code / 2012-12-13 / GBP 19.95
How can we capture the unpredictable evolutionary and emergent properties of nature in software? How can understanding the mathematical principles behind our physical world help us to create digital w......一起来看看 《The Nature of Code》 这本书的介绍吧!