k8s mcs

参考MCS API

  • 集群集中,命名空间相同性适用,并且具有给定名称的所有命名空间都被认为是相同的命名空间。集群在它们之间共享服务。集群集中的成员关系是对称且可传递的。成员集群的集合是相互了解的,并且就它们的集体关联达成一致。
  • 每个集群必须有一个可以在集群集中唯一标识它的名称。集群名称必须是有效的RFC 1123 DNS 标签。

定义ServiceExport指定在集群集里面所有集群中导出哪些服务,ServiceExport创建在Service之后,在clusterset的其他集群创建相同namespace同名Service。

ServiceImport由mcs-controller管理,例如一个集群的Service my-svc.my-ns,需要export供使用,其他集群建立叫my-svcServiceImportmy-ns namespace ,和所有导出的集群的端点相关联

案例

  • 不同的服务分别部署到单独的集群,每个集群运行由不同团队管理的不同服务,其中一个团队的服务依赖于另一个团队的服务。确保是否迁移了依赖服务到另一个集群,被依赖者不受影响
  • 单个服务部署到多个集群

ServiceExport

默认情况下,服务对集群集中的其他集群是不可见的。使用ServiceExport,让允许用户准确地决定哪些服务应该在本地集群之外可见。

通过指定若干命名空间,或者整个集群里面的所有Service自动创建ServiceExport

ServiceImport

只要有一个ServiceExport在一个集群导出Service,其他在集群集里面的集群会创建并维护ServiceImport在对应的namespace。当ServiceExport被清除对应的ServiceImport也会被删除。

一个ServiceExport对应多个EndpointSlices,EndpointSlices有labelmulticluster.kubernetes.io/service-name描述Service和multicluster.kubernetes.io/source-cluster对应集群