多个节点池与单个池,包含许多计算机和大型计算机

时间:2018-03-20 03:12:35

标签: kubernetes google-cloud-platform google-kubernetes-engine

我们正在将所有基础设施迁移到Google Kubernetes Engine(GKE) - 我们目前拥有50多台具有大量API,服务,Web应用程序,数据库服务器等的AWS机器。

由于我们已经将所有内容都移植到底,现在是时候开始将所有内容移动到GKE了。

我有一个问题可能听起来太基本了,但我已经在互联网上搜索了一个星期,但没有找到任何合理的帖子

直截了当,以下哪种方法更好,为什么:

  1. 拥有多个具有多种机器类型的节点池,并始终指定应在哪个池中完成每个部署;或

  2. 拥有一个包含大量计算机的单个池,让Kubernetes调度程序完成工作,而不必担心我的部署将在何处完成;或

  3. 拥有BIG机器(在多个区域中提高集群的可用性和弹性)并让Kubernetes在那里部署所有内容。

2 个答案:

答案 0 :(得分:5)

仅作为提示的考虑清单,我不假装描述最佳实践。

  • 您添加的每个广告连带带来一些开销,但您在灵活性和可用性方面的增加使得节点的失败和维护对生产的影响较小。

  • 节点太小会造成很大的资源浪费,因为即使节点上的空闲RAM或CPU总量足够,有时也无法安排pod,你可以看到这个问题类似于记忆碎片

  • 我猜POD的大小及其内存和CPU请求并不相似,但我认为这不是一个原则上的大问题,也不是理由1)。我不明白为什么一个大的POD应该只在大型机器上运行而一个小的POD应该在小型节点上安排。 我宁愿使用1)如果您需要不同的memoryGB / CPUcores比率来支持不同的工作负载。

我建议你在初始阶段运行一些测试,以了解哪个是最大POD的大小和工作负载的平均大小,以便正确选择机器类型。考虑具有1个完全适合一个节点并分配给它的POD不是继续进行的权利(对于这种情况存在虚拟机)。由于资源碎片很容易导致无法安排大型节点。

  • 考虑到它们的大小将来可能会增加,并且scale vertically并不总是如此直接,您需要关闭机器并终止播放器,我会超大一点考虑到这个问题,因为水平缩放更容易。

  • 谈到机器类型,您可以决定使用机器5倍大小(或3倍?或10倍?)。 超大一点以及群集节点的数量,以考虑开销,碎片以及仍然拥有免费资源。

    1.   

      请记住,每个节点和5000个节点的硬限制为100个。

    2.   

      Remember在GCP中,网络出口吞吐量上限取决于虚拟机实例具有的vCPU数量。每个vCPU都有一个2 Gbps的出口上限,以实现最佳性能。但是,每个额外的vCPU都会增加网络上限,每个虚拟机的理论最大值为16 Gbps。

    3.   

      关于虚拟机的价格,请注意购买两台尺寸为x的机器或尺寸为2x的机器没有差别。如果您觉得您的工作负载需要更多的CPU或内存用于HighMem或HighCpu机器类型,则避免自定义机器的大小,因为很少是方便的。

P.S。由于您要构建一个非常大的集群,请检查size of the DNS

我会在脑海中添加任何考虑因素,考虑将来更新您的问题,并说明您选择的路径以及您遇到的问题。

答案 1 :(得分:3)

1)很有意义,如果你想要,你仍然可以允许kube部署将它视为一个大型池(通过不添加nodeSelector / NodeAffinity)但你可以拥有不同大小的不同机器,你可以考虑拥有毕竟,您可以将受到污染的池等排除在正常计划之外,并且只能用于特定的一组工作负载。我认为从一开始就对这种方法有一定的熟练度,但是对于许多配置者来说,无论如何都应该很容易从2)迁移到1)。

2)如上所述,它实际上是1)的一个子集,因此从第1天开始用1)方法构建exp更好,但是如果你确保你的配置解决方案支持轻松扩展到1)模型那么你从这种简化的方法开始就可以逃脱。

3)大不错,但是"大"是相对的。这取决于您的工作负载的要求和数量。请记住,虽然你需要计划整个AZ的丢失,但是松散单个节点(重新启动,退出底层硬件,更新等)会更频繁,所以如果你有更多主机,那么丢失一个节点会产生影响。小。最重要的是,你需要找到自己的平衡,这对你的特定规模是有意义的。也许50个节点太多了,会削减15个节点吗?谁知道,但你:)