前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Kubernetes on Bare Metal vs. Kubernetes on VMs:不仅仅是性能问题

Kubernetes on Bare Metal vs. Kubernetes on VMs:不仅仅是性能问题

作者头像
我的小碗汤
发布2023-03-19 16:23:13
1.8K0
发布2023-03-19 16:23:13
举报
文章被收录于专栏:我的小碗汤我的小碗汤

关于在裸金属上运行Kubernetes与在虚拟机上运行Kubernetes的争论往往过于简单化。虚拟机的相对易管理性和裸金属的性能优势,这不仅仅是一种折衷。

笔者会详细介绍其中的考虑因素,笔者认为裸金属上的Kubernetes是大多数用例的发展方向。

裸金属上的Kubernetes速度更快,但只有一点点

让我们讨论一下性能与易用性的问题。

虚拟机更容易配置和管理,至少在某些方面是这样。当你可以将节点设置为虚拟机并使用虚拟机供应商的编排工具对其进行编排时,无需关心底层服务器硬件的细节。你还可以利用golden images等工具来简化虚拟机资源调配。

另一方面,如果不使用虚拟机监控程序,就不会花费硬件资源运行虚拟化软件或访客操作系统。所有物理CPU和内存都可以分配给业务工作负载。

但重要的是不要夸大这种性能优势。现代虚拟机监控程序非常高效。例如,与裸金属机相比,VMware报告的虚拟机监控程序开销率仅为2%。除了这个数字之外,还需要增加运行访客操作系统的开销,但虚拟机和裸金属之间的原始性能差异可以忽略不计,至少在你不想从基础设施中榨取最后一点计算能力的情况下是如此。(在某些情况下,2%的差异是有意义的。)

说到底,虚拟化将使pod的总资源可用性降低约10%到20%。

相互竞争的编排层

现在,让我们讨论一下在裸机上运行Kubernetes与在虚拟机上运行Kubernetes的所有其他考虑因素。首先是编排。当你将节点作为VM运行时,除了编排容器之外,还需要编排这些VM。因此,基于VM的Kubernetes集群有两个独立的编排层需要管理。

显然,每一层都在编排一件不同的事情,因此,理论上,这不应该造成问题。在实践中,却常常出现问题。例如,假设有一个失败的节点,并且VM级别的编排器和Kubernetes编排器同时都在尝试从失败中恢复。这可能会导致编排器工作不一致,因为VM编排器正试图支撑一台崩溃的服务器,而Kubernetes正试图将pod移动到不同的节点。

类似地,如果Kubernetes报告某个节点出现故障,但该节点是一个VM,那么你必须弄清楚VM是否真的出现故障,或者VM编排器只是出于某种原因将其删除。这增加了操作的复杂性,因为需要处理更多的变量。

裸金属服务器节点上的Kubernetes没有这些问题。节点要么完全启动,要么不启动,而且没有协调器争夺节点。

下面什么在运行?

在裸机上运行Kubernetes的另一个关键优势是,你总是准确地知道在节点中得到了什么。你可以完全了解硬件的物理状态。例如,你可以使用SMART等诊断工具来评估硬盘的运行状况。

虚拟机不会让你对Kubernetes集群所依赖的物理基础设施有太多了解。你不知道磁盘驱动器有多旧,甚至不知道物理服务器上有多少物理内存或CPU内核。你只知道虚拟机的虚拟资源。这使得故障排除变得更加困难,再次加重了操作复杂性。

利用你所拥有的

出于相关原因,在容量规划和规模调整方面,裸金属占据了主导地位。

在这方面有许多细微差别需要考虑。裸金属和虚拟化基础设施以不同的方式支持容量规划,并且有各种工具和策略来调整所有东西的大小。

但归根结底,在规划裸金属容量时,更容易做到准确无误。原因很简单:使用裸金属,你可以使用cgroups以超高效、超可靠的方式在pod级别管理资源分配。使用Kubernetes vertical autoscaler等工具,你可以根据每个物理服务器的总可用资源将资源分配到millicore。

这是虚拟机做不到的。你会得到一个粗糙的容量规划,因为可以分配给pod的资源取决于你对VM的资源分配。当然,你仍然可以使用cgroup,但将在一个不知道底层服务器上存在哪些资源的虚拟机中使用它。它只知道分配了什么。

最后,你不得不加大虚拟机的规模,以应对工作负载需求中不可预测的变化。结果是,pod并没有高效地使用资源,物理服务器上的大量资源很可能会在大部分时间处于空闲状态。

别忘了网络

另一个影响你决定在裸金属上运行Kubernetes而不是在虚拟机上运行Kubernetes的因素是网络性能。这是一个复杂的话题,但从本质上讲,裸机意味着对网络的抽象程度降低,从而提高网络性能。

更深一点讲,考虑到虚拟节点,每个节点有两个独立的内核网络栈:一个是VM,另一个是物理主机。在两个栈之间协商流量有各种技术(包封装、NAT等),但它们都会冲击性能。它们还为网络管理和可观测性增加了大量复杂性。

在裸金属上运行,你只需要担心一个网络堆栈,在物理机和虚拟机之间移动数据包不会浪费资源,在管理或优化网络时,需要排序的变量也更少。

诚然,管理Kubernetes中存在的各种网络(这部分取决于你使用的容器网络接口(CNI))确实会增加一些开销。但与全虚拟化带来的开销相比,这是微不足道的。

管理复杂性

裸金属上的Kubernetes还是虚拟机上的Kubernetes的决定会影响管理集群的工程师。

简单地说,裸金属在大多数方面使操作变得更简单,从而也使工程师的生活变得更简单。除了需要担心的层和移动部件更少这一事实之外,裸金属环境还可以减少团队工作的限制。他们不必记住虚拟机只支持X、Y和Z配置,也不必担心特定版本的libvirt是否支持需要的功能。

相反,他们只是简单地部署操作系统和包并开始工作。当只处理裸机时,建立集群更容易,并且更容易长期管理集群的操作。

虚拟机上的Kubernetes什么时候有用

笔者相信在某些情况下,在虚拟机上运行Kubernetes是有意义的。

一种情况是,当设置小规模的暂存环境时,性能优化并不是非常重要。对于这种类型的用例,从每一个millicore中获得最大的收益通常不是优先事项。

另一种情况是,当你在一个已经与虚拟化基础设施或特定虚拟化供应商紧密结合的组织中工作时。如果你可以在几分钟内为一些虚拟机提供自助服务,而不是花几个月的时间来获得物理服务器,那么如果虚拟机更适合你的时间表,就使用它。你的组织可能还与云提供商提供的托管Kubernetes平台结合在一起,该平台只在虚拟机上运行容器。谷歌云的托管混合多云Kubernetes产品Anthos支持裸金属部署,红帽的OpenShift也支持裸金属部署。AWS的EKS Anywhere裸金属支持将于今年晚些时候推出。

一般来说,你不应该让对虚拟机的依赖阻止使用Kubernetes。最好利用云原生技术,而不是停留在过去,否则你无法拥有最佳的基础设施。

VM显然在许多Kubernetes集群中占有一席之地,这一点可能永远不会改变。但在性能优化、精简容量管理或降低运营复杂性等问题上,裸金属上的Kubernetes领先。

- END -

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 进击云原生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档