我是 K8S 的新手。我的理解是,我将不得不为单独的区域创建一个单独的集群。例如,我必须创建 3 个集群,一个用于 us-south,另一个用于 eu-gb,第三个用于 au-syd 区域。现在假设我需要在每个区域的每个集群中运行我的应用程序。此外,我可能希望将此应用程序 foo 复制到跨每个区域的多个节点的多个 pod 上。在这种情况下,将抽象此应用程序的服务 foo-service 是特定于区域集群的服务还是跨越我的所有 3 个集群?
2 回答
我的理解是,我将不得不为单独的区域创建一个单独的集群。
是的,这是正确的。每个区域都有一个单独的集群。
现在假设我需要在每个区域的每个集群中运行我的应用程序。
集群是独立的,因此您在每个集群中部署每个应用程序,除非您设置了一些Cluster Federation。
此外,我可能希望将此应用程序 foo 复制到跨每个区域的多个节点的多个 pod 上。
集群是独立的。因此,应用程序部署在每个实例中,并在集群中进行复制——可能会通过水平自动缩放自动进行,例如,如果一个区域有更多负载,则该集群会自动将应用程序从 3 个实例扩展到 5 个实例。
在这种情况下,将抽象此应用程序的服务 foo-service 是特定于区域集群的服务还是跨越我的所有 3 个集群?
集群是独立的,因此每个服务也将独立于其他区域的服务。如果您使用可用区,则可以在同一区域中设置跨可用区的集群。
除了 Jonas 给出的解释之外,还有可能使用Pod 拓扑传播约束功能让单个集群覆盖多个区域(尽管有一些开销和配置复杂性)。
所以你的集群看起来像:
+---------------+---------------+---------------+
| zoneA | zoneB | zoneC |
+-------+-------+-------+-------+-------+-------+
| node1 | node2 | node3 | node4 | node5 | node6 |
+-------+-------+-------+-------+-------+-------+
结合 PodAffinity/PodAntiAffinity,您可以尝试将任意数量的 Pod 打包到合格的拓扑域中。
不用说,您必须拥有 3 组服务(每个区域一个)。例如,您可以使用LoadBalancer服务类型。
因此,您将能够分别处理来自 foobar.us-south 、 foobar.au-sy 和 foobar.eu-gb 的请求)并在需要时在特定区域生成额外的 pod。
希望(结合乔纳斯的回答)涵盖该主题:)