Kubernetes:裸机vs虚拟机性能对比

本文对Kube.NETes集群在虚拟机和裸机上在CPU、内存、存储和网络性能方面的表现进行了详细的比较和分析 。

译自Does Kubernetes Really Perform Better on Bare Metal vs. VMs? , 作者 Oleg Zinovyev 是 Gcore 的技术内容编辑,Gcore 是一家全球云边缘提供商 。他在与云原生技术(包括 Kubernetes)相关的各种公司有超过 5 年的撰稿经验 。在转向写作之前,Oleg 曾担任过......
许多人认为部署在物理机上的 Kubernetes 集群性能比部署在虚拟机上的要好,但直到现在还没有任何证据支撑这一假设 。在 Gcore,我们只向客户提供有充分证据支撑的信息,所以我们决定自己测试一下 K8S 部署在物理机和虚拟机上的性能是否真的有差异,如果有的话差异有多大 。我将分享我们内部测试的结果 。
我有意不讨论物理机节点与虚拟节点的其他方面的竞争 , 比如成本效益或基础设施控制水平 。这已经超出了本文的范围,本文仅专注于性能比较 。
当您在虚拟机上部署 Kubernetes 集群时,与物理机相比,您会得到额外的基础架构层——一个虚拟机管理程序(hypervisor)和一个虚拟机操作系统 。
 
Kubernetes:裸机vs虚拟机性能对比

文章插图
图 1:物理机和虚拟机架构的区别 。
这些层会消耗物理 CPU 和 RAM 来运行,从而占用了一些计算能力 。虚拟化也会影响网络和存储性能:虚拟网络和存储比物理网络和存储慢 。
相比之下 , 当您在物理服务器上部署 Kubernetes 集群时,您不会有任何额外的基础架构层和虚拟化 。服务器的物理资源完全专用于您的工作负载,并且容器化应用程序直接访问这些资源 。
我们如何比较虚拟机和物理机 Kubernetes 性能为了全面了解虚拟机和物理机集群性能的比较,我们测量了以下指标:
  • CPU: 速度和利用率
  • RAM: 延迟
  • 存储: 每秒事务数(TPS)和延迟
  • 网络: 带宽和延迟
为了实验的纯净性,所有测试应用程序都是容器化的,并部署在正在比较的工作节点上 。
我们的测试条件为了测试,我们使用了在 Gcore 托管 Kuberneteshttps://gcore.com/cloud/managed-kubernetes 上运行的 K8s 集群 。但是,结果也适用于原生 Kubernetes,因为托管 Kubernetes 不会增加工作节点性能的额外开销 。
为了使工作负载保持相同的条件 , 我们选择了类似配置的虚拟机和物理机工作节点 。以下是这样的对比配置的一个示例:
  • 物理机工作节点: 1x Intel Xeon E-2388 8C/16T 3.2 GHz / 64 GB / Ubuntu 22.04
  • 虚拟机工作节点: 16 vCPU / 64 GiB 内存 / Ubuntu 22.04
测试结果摘要在测试中 , 我们比较了两个 Kubernetes 集群,一个部署在虚拟机(VM)上,另一个部署在物理机上 。它们的配置相似 。作为测试工作负载,我们运行了:
  • CPU基准测试用于 CPU 测试
  • Sysbench 用于 RAM 测试
  • Pgbench 用于存储测试
  • Netperf 用于网络测试
下表总结了最重要的测试结果:
Kubernetes:裸机vs虚拟机性能对比

文章插图
图 2:测试结果摘要 。
显然,在所有情况下,物理机集群的效率都更高 。
我们将在本文后面详细检查结果,并确定更好的物理机性能对您的工作负载意味着什么 。但是首先 , 让我们简单回顾一下在虚拟机上部署的 Kubernetes 集群与物理机上的基本区别 。
详细的测试结果现在让我们详细看一下物理机和虚拟机集群在每个评估标准方面的性能 。
CPU 速度和利用率对于 CPU 速度比较,我们使用了 Alex Dedyura 的CPU 基准测试 。这是一个计算 π 到 10,000 位小数的脚本 。计算时间以秒为单位,在 10 次测试中取平均值,作为测试结果 。计算 π 是一个 CPU 密集型任务,因此基准测试可以清楚地表明所测试 CPU 的性能 。
以下是 CPU 速度比较结果:
Kubernetes:裸机vs虚拟机性能对比

文章插图
图 3:物理机集群的 CPU 速度比虚拟机集群的 CPU 快两倍多 。
虚拟机集群的 10 次重试平均时间为 47.07 秒;对于物理机集群,它是 21.46 秒 。因此,物理机集群速度快了两倍多 。


推荐阅读