性能评测|虚拟化和裸金属 K8s 哪个性能更好?
本文重点
- 整体而言,SKS(虚拟机 Kubernetes)可以达到裸金属 Kubernetes 性能的 82% – 96%,满足绝大部分场景下生产容器应用的性能需求。
- 更多虚拟化与裸金属 Kubernetes 架构、特性、适用场景与性能对比,欢迎阅读文末电子书《IT 基础架构团队的 Kubernetes 管理:从入门到评估(更新版)》。
前段时间,我们通过《虚拟化 vs. 裸金属:K8s 部署环境架构与特性对比》和《适合在虚拟化环境中部署 Kubernetes 的三个场景》两篇文章,从功能特性和应用场景的角度,对比了虚拟化环境和裸金属环境部署 Kubernetes 的区别和优劣势。在性能方面,虽然普遍认为裸金属支持 Kubernetes 性能更佳,但对于两个环境的具体表现和性能差距并没有明确的数据参考,甚至有不少用户认为“虚拟化上的 Kubernetes 不能满足生产需求”。
为了让用户直观感受两个环境对 Kubernetes 的支持能力,我们分别测试了基于裸金属与 SMTX Kubernetes Service(SKS)运行有状态应用和无状态应用的性能表现。综合结果显示,SKS(虚拟机 Kubernetes)可以达到裸机 Kubernetes 性能的 82% – 96%,满足绝大部分场景下生产容器应用的性能需求。
1 测试目标
在 Kubernetes 版本、相关的调优参数、应用的资源配置均保持一致的情况下,对比测试超融合(虚拟化环境)上部署 Kubernetes 集群与裸金属服务器部署 Kubernetes 集群的基础性能、有状态应用性能和无状态应用性能。其中,有状态应用选择 MySQL、Redis 和 Kafka,无状态应用选择 Nginx 和微服务测试 Online Boutique。
在这次测试中,我们使用了配置相同(包括 CPU、内存、本地盘和网络)的裸金属服务器。这些服务器被用于部署两种 Kubernetes 集群:一种是通过 SmartX 超融合(内置原生虚拟化 ELF)部署的 SKS Kubernetes 集群(包含 1 个 Control Plane 和 1 个 Worker),另一种是直接运行在一个裸金属上的 Kubernetes 集群。
SKS Kubernetes 集群使用了超融合集群自身的分布式存储,而裸金属上的 Kubernetes 集群则通过 CSI 使用了分离部署的分布式存储集群的资源。这个分布式存储集群的配置(CPU/内存/本地盘/网络)与超融合集群保持一致。


测试环境架构图
为了方便表述,下文中两种测试环境分别简称为“SKS”和“裸金属 Kubernetes”。
2 测试环境配置
2.1 软件环境
2.1.1 SKS 环境(基于超融合部署)
SMTX OS(SmartX 超融合软件):

SKS:

2.1.2 裸金属环境

2.2 硬件环境
裸金属服务器配置见下表。

3 测试过程与结果
3.1 基础性能测试
利用 FIO 对两个环境进行压力测试,结果显示,得益于 SMTX ELF CSI 具备超融合系统中 I/O 本地化的性能优势,SKS 相比裸金属 Kubernetes 性能更佳。




3.2 有状态应用测试
3.2.1 MySQL软件列表:

测试结果:
- ReadWrite

- 连续 1 小时压测

3.2.2 Redis参数设定:
- 10,000,000 requests
- 200 parallel clients
- Mixed 模式数据持久化模式(AOF、RDB)
测试结果:

3.2.3 Kafka参数设定:
- 6 Partition 3 Replication
- num-records 10,000,000
测试结果:

3.3 无状态应用测试
3.3.1 Nginx软件列表:

测试结果:
可以看到,20000 以下的用户并发场景下,SKS 与裸金属 Kubernetes 性能相差小于 1%。

长时间运行后,25000 用户并发场景下,SKS 与裸金属 Kubernetes 性能相差在 12% 左右。

3.3.2 微服务测试 Online Boutique
Online Boutique 是一个云优先的微服务演示应用程序,由 11 层微服务应用程序组成。该应用程序是一个基于网络的电子商务应用程序,用户可以在其中浏览商品、将其添加到购物车并购买。
软件列表:

测试结果:
可以看到,5000 以下的用户并发场景下,SKS 与裸金属 Kubernetes 性能相差小于 4%,后随着用户数量提升,最大差距在 20% 左右。

4 测试结论
综合以上测试结果,可以看到,在 SKS 上运行的有状态和无状态应用的整体性能水平,可达到裸金属 Kubernetes 的 82% – 96%,在一些常规业务压力的场景下,SKS 与裸金属 Kubernetes 几乎可以提供相同的性能,满足绝大多数业务场景的性能需求。具体来说:
- SKS 可以很好地支撑处于早期和起步阶段的用户的容器化应用。
- SKS 可以很好地支撑所有场景中的研发测试集群上的容器化应用。
- 虽然各类企业应用对性能的需求不尽相同,但通过以上多个场景的测试结果可以看出,SKS 可满足大部分常规应用场景的性能需求(除非应用对性能要求非常严格,或同时在线用户数可达到较高水平)。SKS 在下一版本也会增加对裸金属部署环境的支持能力,以满足不同用户和应用的性能需求。
- 另外值得注意的是,此次测试时 SKS 基于 SmartX 超融合部署,并开启了 Boost 模式进行加速,其他的虚拟化方案可能无法达到相同的性能水平。

此外,正如《适合在虚拟化环境中部署 Kubernetes 的三个场景》文章中提到,虽然虚拟化和裸金属支持 Kubernetes 在性能上有所差距,但由于虚拟化在资源效率、弹性扩缩、安全隔离、简易运维等方面的优势,Gartner 预计直到 2027 年依旧会有 70% 的数据中心 x86 工作负载部署在虚拟化环境,为容器化应用提供敏捷支持。

基于虚拟化/超融合建设 Kubernetes 的优势
更多关于 Kubernetes 平台的管理运维知识,您可点击获取电子书《IT 基础架构团队的 Kubernetes 管理:从入门到评估(更新版)》。
阅读原文:虚拟化和裸金属 K8s 哪个性能更好?一文了解多场景下的性能对比数据
相关文章:
性能评测|虚拟化和裸金属 K8s 哪个性能更好?
本文重点 整体而言,SKS(虚拟机 Kubernetes)可以达到裸金属 Kubernetes 性能的 82% – 96%,满足绝大部分场景下生产容器应用的性能需求。更多虚拟化与裸金属 Kubernetes 架构、特性、适用场景与性能对比,欢迎阅读文末电…...
【大厂AI课学习笔记】【1.6 人工智能基础知识】(1)人工智能、机器学习、深度学习之间的关系
6.1 人工智能、机器学习与深度学习的关系 必须要掌握的内容: 如上图:人工智能>机器学习>深度学习。 机器学习是人工智能的一个分支,该领域的主要研究对象是人工智能,特别是如何在经验学习中改进具体算法的性能。 深度学习…...
计算机毕业设计基于的农村蔬菜销售系统SSM
项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: vue mybatis Maven mysql5.7或8.0等等组成,B…...
【Chrono Engine学习总结】3-地型terrain
由于Chrono的官方教程在一些细节方面解释的并不清楚,自己做了一些尝试,做学习总结。 1、关于物体材质 在介绍地型之前,要初步了解chrono中关于材质的一些基本概念。 首先,最基本的材质类是ChMaterialSurface,其进一步包括&…...
【Linux】构建模块
🔥博客主页:PannLZ 🎋系列专栏:《Linux系统之路》 🥊不要让自己再留有遗憾,加油吧! 文章目录 构建第一个模块1模块的makefile2内核树内构建3内核树外构建 构建第一个模块 可以在两个地方构建模…...
vscode远程连接失败
目录 解决方案尝试1解决方案尝试2 解决方案尝试1 最近通过vscode一直使用腾讯云的服务器作为远程开发环境,以前一直很好用。 直到最近重装了系统之后,发现vscode没法对云服务器进行连接了,即使在远程主机添加了本地的公钥也不行。直接报错:…...
C#系列-C#访问FTP服务器实现上传下载(8)
FTP Server是什么? FTP Server(File Transfer Protocol Server),即文件传输协议服务器,是在互联网上提供文件存储和访问服务的计算机。它依照FTP协议提供服务,专门用来传输文件。 FTP Server允许不同的客…...
django中实现登录
Django中实现登录功能,通常涉及以下几个步骤: 一:实现步骤 1:创建用户模型:Django自带了一个用户认证系统,通常使用内置的User模型来管理用户。你也可以根据需要自定义用户模型。 2:创建登录表…...
【安卓操作系统——讲解】
安卓操作系统 安卓操作系统 安卓操作系统 安卓(Android)是一种基于Linux内核和其他开源软件的移动操作系统,主要用于触屏移动设备如智能手机和平板电脑。由Andy Rubin等人开发,最初的目的是创建一个先进的操作系统,用…...
Linux发行版全景:选择、使用和未来趋势
1. 引言 Linux操作系统的简介 Linux是一种自由和开源的操作系统内核,由Linus Torvalds在1991年首次发布。随着时间的发展,Linux已经成为世界上最流行的操作系统之一,广泛用于服务器、桌面电脑、移动设备以及嵌入式系统。Linux的主要特点是其…...
STM32 与 ARM 的联系
STM32 和 ARM 是两个不同的概念,但它们之间存在一定的联系。 STM32是一种微控制器产品,由意法半导体(STMicroelectronics)推出,其内核采用了 ARM Cortex-M 核。ARM 是一家英国芯片设计公司,专注于设计和许可…...
每日五道java面试题之java基础篇(二)
第一题. 为什么说 Java 语⾔“编译与解释并存”? ⾼级编程语⾔按照程序的执⾏⽅式分为编译型和解释型两种。 简单来说,编译型语⾔是指编译器针对特定的操作系统将源代码⼀次性翻译成可被该平台执⾏的机器码;解释型语⾔是指解释器对源程序逐…...
【Linux】Shell编程
Shell编程 目录 Shell编程1.shell基础1.输入重定向 & 输出重定向2.管道3.特殊字符(3.1)通配符(3.2)引号(3.3)注释符(#) 4.别名5.命令历史history 2.Shell脚本Shell脚本的执行方式(1)为脚本文件加上可执行权限,然后在命令行直接输入shell脚本文件名执行。(2)sh shell脚本名(…...
斯巴鲁Subaru EDI需求分析
斯巴鲁Subaru是日本运输集团斯巴鲁公司(前身为富士重工)的汽车制造部门,以性能而闻名,曾赢得 3 次世界拉力锦标赛和 10 次澳大利亚拉力锦标赛。 斯巴鲁Subaru EDI 需求分析 企业与斯巴鲁Subaru建立EDI连接,首先需要确…...
golang 集成sentry:PostgreSQL
本文介绍通过 pgx库集成sentry, pgx 特点是速度快,可以完全控制,并且支持所有 postgres 数据类型。 pgx地址: https://github.com/jackc/pgx 最简单的接入方式是自定义一个logger, 然后注入到pgx, 完整示…...
ubuntu20.04 安装mysql(8.x)
安装mysql命令 sudo apt-get install mysql-server安装完毕后,立即初始化密码 sudo mysql -u root # 初次进入终端无需密码ALTER USER rootlocalhost IDENTIFIED WITH caching_sha2_password BY yourpasswd; # 设置本地root密码设置mysql远程登录 设置远程登录账…...
ChatGPT升级至GPT-4 Turbo:性能升级同时更为经济
ChatGPT升级至GPT-4 Turbo:性能升级同时更为经济 随着技术的进步,ChatGPT迎来了其最新的迭代版本——GPT-4 Turbo。这一最新版本不仅在性能上得到了显著提升,而且在成本效益上也更加引人注目。 性能提升 GPT-4 Turbo带来了诸多改进&#x…...
Android 粒子喷泉动效
一、前言: 在学习open gl es实现动效的时候,打算回顾了一下用普通的2D坐标系实现粒子效果和 open gl 3d 坐标系的区别,以及难易程度,因此本篇以Canvas 2D坐标系实现了一个简单的demo。 粒子动效原理: 粒子动效本质上…...
fast.ai 深度学习笔记(一)
深度学习 2:第 1 部分第 1 课 原文:medium.com/hiromi_suenaga/deep-learning-2-part-1-lesson-1-602f73869197 译者:飞龙 协议:CC BY-NC-SA 4.0 来自 fast.ai 课程的个人笔记。随着我继续复习课程以“真正”理解它,这…...
【机器学习】Ubuntu系统下CUDA驱动卸载及重装
目录 背景 驱动卸载 驱动安装 CUDA驱动安装 安装nvidia-smi 背景 这里包含显卡驱动和CUDA驱动,在如下场景下,我们需要卸载显卡驱动并重新安装。 在某些情况下需要对显卡驱动进行升级某些情况下(如重启,或者调整系统配置等&a…...
C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
