Docker 已经打破了一项记录,它以惊人的速度从一项颠覆性技术转变为一种商品。 Docker 的快速采用和普及带来了很多困惑。
在这篇文章中,我想重点关注一种趋势,最近我经常听到刚开始使用 Docker 的用户提出的评论:如果他们已经选择了使用 Docker,那么使用 OpenStack 是否有意义。
在给出我的看法之前,我想先简要介绍一下提出这个问题的理由。
背景
最简单地说,Docker 提供了一个容器,用于在共享基础设施上管理软件工作负载,同时使它们彼此隔离。虚拟机(例如 KVM)通过创建完整的操作系统堆栈(通过虚拟机管理程序)来完成类似的工作。然而,与虚拟机方法不同,Docker 依赖于 Linux 操作系统的一个内置功能,称为 LXC(Linux 容器)。 LXC 利用内置的操作系统功能,对内存以及 CPU 和网络资源进行进程隔离。 Docker 镜像不需要完整启动新的操作系统,因此,为在共享计算资源上打包和运行应用程序提供了一种更轻量级的替代方案。此外,它允许直接访问设备驱动程序,这使得 I/O 操作比使用虚拟机管理程序更快。后者使得可以直接在裸机上使用 Docker,这常常使人们问到,如果他们已经在使用 Docker,那么使用云(例如 OpenStack)是否真的有必要。
Docker 和 KVM 等虚拟机管理程序之间的这种性能差异得到了 Boden Russell 最近完成的一项基准测试的支持,并在最近的 DockerCon 活动中进行了展示。
该基准测试 相当详细,并且正如预期的那样,它显示了启动 KVM 虚拟机管理程序到 Docker 容器所需的时间之间存在显着差异。它还表明两者之间的内存和 CPU 利用率存在相当大的差异,如下图所示。
这种性能差异可以转化为两者在相似比例上的密度和总体利用率差异。这种差异很容易转化为成本上的巨大差异,而成本直接受到运行给定工作负载所需的资源数量的影响。
我的看法
- 这个问题与 OpenStack 没有特别的关系,可以类似地应用于任何其他云基础设施。在我看来,它经常在 OpenStack 的上下文中被提出,是因为 OpenStack 在私有云环境中相当流行,而私有云环境是我们可以考虑纯 Docker 替代方案的唯一环境。
- 一切都与虚拟机管理程序有关!
许多性能基准测试比较了 Docker 与 KVM,而与 OpenStack 几乎无关。事实上,KVM 镜像和 Docker 容器的这种特定基准测试是通过 OpenStack 运行的,这表明这两种技术可以很好地协同工作。在这种情况下,当我选择在基于 Docker 的 Nova 堆栈之上运行 OpenStack 时,大多数利用率参数变得无关紧要,如下图所示,该图摘自 OpenStack 文档。
- 云基础设施提供了一个完整的数据中心管理解决方案,其中容器或虚拟机管理程序只是一个更大的系统的一部分。像 OpenStack 这样的云基础设施包括多租户安全性和隔离、管理和监控、存储和网络等。所有这些服务都是任何云/数据中心管理所需要的,并且与是否使用 Docker 或 KVM 几乎没有依赖关系。
- Docker (尚未) 是一个功能完善的 VM,并且在安全性方面存在一些严重的局限性,缺乏 Windows 支持(如以下 电子邮件线程 中所示),因此不能被认为是 KVM 的完整替代方案。 虽然有 正在进行的工作 来弥补这些差距,但可以肯定的是,添加缺失的功能可能会带来额外的性能成本。
- 原始虚拟机管理程序性能/容器化和应用程序性能之间存在很大差异,如下面基准测试结果中的图表所示。 一种可能的解释是,应用程序经常使用缓存技术来减少 I/O 开销。
- 如果我们将 Docker 容器打包在 KVM 镜像中,这种差异可能会变得可以忽略不计。 这种架构通常使用虚拟机管理程序来管理云计算资源,并使用诸如 Heat、Cloudify 或 Kubernetes 之类的编排层来管理虚拟机管理程序资源中的容器。
结论
这让我得出结论,看待 OpenStack、KVM 和 Docker 的正确方式是将它们视为一个互补的堆栈,其中 OpenStack 扮演着总体数据中心管理的角色。 KVM 作为多租户计算资源管理,Docker 容器作为应用程序部署包。
在这种情况下,一个常见的模型是为以下角色使用 Docker
- Docker 提供确定性的软件打包,并与不可变的基础设施模型完美契合。
- Docker 非常适合微服务 POD 的容器化
- 在 OpenStack 以及裸机环境之上使用 Docker
综上所述,我确实看到了主要针对定义明确的工作负载的情况,在这些情况下,使用云基础设施不是强制性的。 例如,如果要考虑出于 DevOps 目的自动化小型商店的开发和测试环境,我会考虑直接在裸机环境中使用 Docker。
编排可以是这两种环境之间的一个很好的抽象工具。
使用带有 Docker 的编排框架的好处之一是,它可以让我们在任何给定时间点在 OpenStack 或裸机环境之间切换。 通过这种方式,我们只需将我们的编排引擎指向所选的目标环境,就可以选择任何一种选项。 OpenStack Orchestration (Heat) 声明支持从 Icehouse 版本开始进行 Docker 编排。 Cloudify 是一个基于 TOSCA 的开源编排工具,可在 OpenStack 和其他云(例如 VMware、AWS 和裸机)上运行,并且最近包含了 Docker 编排。 Google Kubernetes 主要与 GCE 相关联,但可以自定义为与其他云或环境一起使用。
2 条评论