本页面简要介绍了 GKE 多集群 Service (MCS) 的工作原理。如需了解如何使用 MCS,请参阅配置多集群 Service。
MCS 概览
利用 Kubernetes 熟悉的 Service 对象,您可以在单个 Kubernetes 集群范围内发现和访问 Service。但是,有时您需将应用拆分为多个集群,以解决状态管理、隐私性、可扩缩性、可用性和数据主权要求。使用 MCS,您可以构建跨多个集群的 Kubernetes 应用。
MCS 是利用现有 Service 对象的 Google Kubernetes Engine (GKE) 的跨集群 Service 发现和调用机制。启用了此功能的 Service 可以在具有虚拟 IP 的集群中发现和访问,并与集群中可访问的 ClusterIP Service 的行为匹配。与现有 Service 一样,MCS 与社区主导的开放式 API 兼容,可确保您的工作负载保持可移植性。
MCS 是 GKE 的功能之一。MCS 会为集群组中的每个导出服务配置 Cloud DNS 区域和记录。 借助舰队,您可以对 GKE 集群进行逻辑分组和标准化,从而简化基础架构的管理,并使用多集群功能(如 MCS)。您可以阅读舰队管理文档,详细了解舰队的优势及其创建方法。
无论类型如何,导出的服务始终具有一条 Cloud DNS 记录,导出的无头类型服务具有每个后端 Pod(包括 StatefulSet 中的 Pod)的记录(含主机名)。使用 Cloud DNS 会产生额外费用。您需按 Cloud DNS 价格付费。
如需使用 MCS 导出 Service,请使用与 Service 相同的命名空间和名称创建 ServiceExport 自定义资源。MCS 会自动将 Service 导入舰队中的每个集群。MCS 导入 Service 时,会创建:
- 使用与 Service 相同的命名空间和名称的 ServiceImport 自定义资源。
- 使用与 Service 相同的命名空间和随机名称的 Endpoints 对象。
使用 MCS 的优势
使用 MCS 可为您提供以下优势:
- 高可用性:在多个区域的不同集群中运行同一 Service,可以提升容错能力。如果一个集群中的 Service 不可用,则请求可以故障切换并从其他集群进行处理。使用 MCS,您可以跨集群管理 Service 之间的通信,从而提高容器化应用的可用性。
- 有状态服务和无状态 Service:有状态和无状态 Service 具有不同的操作依赖性和复杂性,并产生不同的操作利弊。通常,在没有状态管理的情况下,您可以更加轻松地伸缩、升级和迁移可用性较高的工作负载。MCS 可让您为有状态和无状态工作负载使用不同的集群,并使这些工作负载独立、隔离且更易于管理。
- 共享 Service:通常会创建不同的 Kubernetes 集群,从而获得更高的可用性、更好地管理有状态和无状态 Service,并且更轻松地满足数据主权要求。但是,许多 Service(例如使用 Prometheus 监控或将密文管理与保险柜结合使用)通常会在所有集群之间共享。MCS 让您可以更轻松地在单独的集群中设置所有正常运行的集群使用的通用共享 Service,而不是每个集群都需要其自己的本地 Service 副本。
- 迁移:将现有应用现代化改造为基于容器化微服务的架构通常要求您跨多个 Kubernetes 集群部署 Service。MCS 为您提供了一种机制来帮助桥接这些 Service 之间的通信,从而更轻松地迁移您的应用。该机制特别有用,因为您可以将同一 Service 部署到两个不同的集群,并且流量可以从一个集群或应用迁移到另一个集群或应用。
后续步骤
- 详细了解多集群 Ingress,它们可提供适用于南北和东西向流量的 Service。
- 详细了解 Cloud Service Mesh,它能更精细地控制路由和流量调整。