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