最近,我学习了很多关于 Kubernetes 的知识,了解到 Kubernetes 可以在需要时水平自动扩展您的容器并在您的节点池中添加服务器(当然,云提供商应该支持此功能才能正常工作)。例如,当服务器上的容器超过该服务器上资源的 70% 时,会添加一个新服务器,并且您将自动根据每台服务器运行的小时数计费。GCP 和 AWS 等大型云提供商支持这一点。
所以,我在想,为什么不直接选择最便宜的可用服务器并让 Kubernetes 与这些服务器一起扩展呢?据我了解,当您可以使用 5 美元的服务器时,无需在节点池中使用 100 美元的服务器。当然,100 美元可以处理更多负载,但如果您使用 5 美元的服务器,Kubernetes 会自动为您添加新服务器。
为什么甚至可以选择使用更昂贵的服务器和托管 Kubernetes?为什么不是每个人都只选择最便宜的服务器?
等式有很多。
你真的能走多低?一个关键因素是你的豆荚有多小。如果您的一个 pod 中的应用程序需要 4G 的 RAM,那么将 1 台 8G 服务器拆分为 4x2G 服务器意味着该应用程序现在没有节点可以运行。
加上开销。每个节点都有一些运行 Kubernetes 的开销。还有在每个节点上运行的 DaemonSet,增加了更多开销。如果将节点数量增加一倍,则 DaemonSet 的副本也会增加一倍,这会增加运行集群的成本。即使没有这些,也会有操作系统、Linux 发行版、kubelet 和其他 Kubernetes 组件的开销。节点越小,节点上的工作负载百分比就越大,只是运行节点而不是运行应用程序的开销。
考虑管理开销。是的,基础设施即代码、自动扩展组等都有帮助。但是你拥有的节点越多,当出现问题时,你就越需要管理、监控和调试。
网络因素。节点越多,节点之间的网络流量就越多,这比 Linux 桥上节点内的虚拟网络要慢。云提供商还倾向于显着限制较小节点上的网络,从而导致超时和延迟,从而可能使应用程序无法使用。
以我的经验,公司很快就可以使用大约 10 个节点来实现 HA。您希望剩余节点中有足够的容量来处理从宕机节点故障转移的容器。对于 10 个节点,这意味着要留出 10% 以上的额外容量来处理集群中的一个故障节点。如果您只有 3 个节点,则每个节点需要少于 2/3 用于处理单个节点宕机。在这些公司达到 20 个节点之前,他们开始扩展到更大的节点。这使得集群中的节点更新可以通过一个小团队和最小的自动化进行管理。在某个点上,较大节点的成本超过了运行更多节点的更多管理开销的成本,并且它们返回到横向扩展以获得更多容量。
独立于 Kubernetes,大数据中心的主要问题是冷却、电力和空间。高端服务器通常需要较少的操作干预、紧凑且节能。从长远来看,它们都更坚固,更具成本效益。
诀窍是找到最佳的扩展单元。