如何为运行Kubernetes容器集群的VMWare VM Linux服务器分配资源

45次阅读
没有评论

问题描述

正在设计一个基于Kubernetes集群的VMWare VM Linux服务器的Web应用和Web服务托管平台。该平台将建立在现有的VMWare基础设施之上,有3个由ESX提供动力的物理主机。目前,大约有10个VLAN的网络运行着大约100到200个虚拟服务器,每个服务器有1到4个核心和1到8GB的RAM,硬盘容量为几十GB(传统硬盘,非SSD)。目前,系统是以传统的方式管理的,每个应用程序或数据库运行一个命名的VM服务器。用户需要创建一个新的VLAN,其中包含一些VMs(首先可能是5或6个),运行一个Kubernetes集群来托管Web应用程序、Web服务和数据库的Docker容器(由我们的内部GitLab实例开发和部署)。一旦这个VLAN和Kubernetes集群启动并运行一段时间,并由我和管理层验证通过,项目就是将这个架构扩展到整个VMWare基础设施,逐个VLAN扩展。问题是,如何为组成Kubernetes集群的底层Linux VMs分配资源(垂直扩展)?我应该为每个虚拟主机分配多少个CPU、RAM和磁盘空间,以便能够最大限度地发挥容器化架构、Nginx负载均衡和MongoDB分片的优势?

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

回答这个问题涉及到几个相关的系统工程权衡和选择。首先,你需要确定你的目标,并根据目标选择和权衡决策,决定哪些选项能够在垂直扩展中获得最大的收益。
首先,你没有解释你的Web应用程序有多么CPU密集,或者你期望需要多少负载均衡(基于前端API管理和后端消息传递)。虽然负载均衡器可能对你的Docker/K8s设计问题似乎不相关,但如果你考虑到太多的节点和分布不均匀或过度工作的负载均衡器对你的VLAN设计可能产生的影响,你就会明白这对你如何调整集群节点大小的影响是显而易见的。
你描述的“一个应用程序一个VM”的设计表明你的应用程序的工作负载可能相当大(对于8GB的VM来说)。需要更多的信息来深入研究这个问题,但是为每个应用程序VM分配一个数据库VM似乎在K8s的工作/管理效率方面有些浪费,除非有严重的可靠性和弹性要求。
接下来,你有什么选择来用SSD替换磁性硬盘?100GB和500GB SSD的成本已经大大降低,当你扩展时,用SSD替换磁性硬盘可以为你的集群提供很大的磁盘性能余地。除了性能之外,尽管增加了成本,整体系统的可靠性(MTTF,MTTR)将大大提高。新的SSD驱动器具有6GB的数据通道,这可能至少是你现在磁性硬盘的两倍。在构建任何规模的Docker/K8s集群时,磁盘通道带宽和处理器核心数量可以弥补许多设计缺陷。
最后,不确定你的项目交付时间表是什么,但如果你能退一步,用SysML(使用MS Visio)对其进行建模,并查看你的设计,然后应用架构权衡分析方法,可能有助于你思考所有这些并做出最佳选择。
尽管ATAM的名字听起来很复杂,但它在理论上和实践中都非常简单。ATAM之所以得名,是因为它不仅揭示了架构满足特定质量目标(如性能或“可修改性”或在你的情况下的扩展性)的程度,而且还提供了这些目标如何相互作用的见解,以及它们如何相互权衡。在开始ATAM之前,它指出了具有最深远影响并且在系统实施后最难更改的关键设计决策。
SysML和ATAM也是一种保险,以防止在未来要求你对设计选择进行成本验证或预测TCO时,将自己陷入困境,因为Web应用程序设计或VMWare基础设施发生了变化。
ATAM信息
SysML信息

正文完