队列要求和最佳做法

本指南提供了在组织中实现舰队的最佳实践、实用注意事项和建议。

在阅读本指南之前,您应该熟悉舰队的工作原理中的概念。我们建议您先查看本指南,然后再查看示例

组件要求

根据您的组织想要使用的舰队感知 GKE Enterprise 和 Google Cloud 组件实现舰队时,需要考虑一些限制。例如,某些组件可能尚不支持使用不属于舰队宿主项目的集群。

下表显示了每个组件的当前要求和限制。

组件
集群类型
项目要求
VPC 要求
Config Sync 所有支持 GKE Enterprise 的集群
Policy Controller 所有支持 GKE Enterprise 的集群
Anthos Service Mesh 请参阅支持的平台 集群必须注册到舰队,同一项目中的所有集群都必须注册到同一舰队。如需了解详情,请参阅 Anthos Service Mesh 舰队要求 GKE 集群必须位于同一 VPC 网络中。
多集群 Ingress Google Cloud 上的 GKE 集群 Ingress 资源、GKE 集群和舰队必须共享同一项目。 Ingress 资源和 GKE 集群必须位于同一 VPC 网络中。
工作负载身份池 针对 GKE Enterprise、GKE on Google Cloud 和 GKE on VMware 进行了优化。使用 GKE Enterprise 时,其他 Kubernetes 集群受支持,但需要手动设置。

针对队列整理项目和 VPC 网络

在设计队列架构时,您需要考虑两个基本资源:Google Cloud 项目和 Virtual Private Cloud (VPC) 网络

正如舰队的工作原理中所述,每个舰队都是在单个项目中创建的。但是,队列旨在与队列宿主项目、其他 Google Cloud 项目、其他云服务商或本地的队列感知资源搭配使用。

虽然在大多数情况下没有明确阻止,但我们还是建议将同一项目中的舰队感知资源添加到同一舰队中;它们不应分散在不同的舰队中。将同一项目中的资源拆分为多个队列被视为反模式,因为项目边界为政策和治理目的提供了更强大的保护。

在确定如何将队列感知资源放入多个项目时,我们预计许多组织将具有不同的租户要求。请考虑以下两种极端情况:

  • 某些组织可能会选择将所有队列资源放入几个集中控制的项目中,并为团队分配命名空间。
  • 其他组织可能会选择为团队提供其自有项目中的专用集群。

在第一种极端情况下,维持对资源的集中治理比较容易,但可能需要进行额外的工作才能实现所需的隔离。 在第二种极端情况下,这些利弊会颠倒过来。在一些复杂的情况下,您的组织可能同时拥有共享基础架构资源和专用资源,这些资源隔离到不同的项目中。无论最终情况如何,我们都在高度信任部分中讨论了对注册到队列的资源保持相互信任至关重要,这可维护队列的完整性。

与项目组织密切相关的是网络组织。如组件要求表中所述,多个队列需要在队列中的注册资源之间建立特定连接。随着时间的推移,其中一些要求可能会放宽。但是,现在多集群 Ingress 要求 pod 必须位于同一 VPC 网络中,且集群本身必须与舰队位于同一项目中。

如果组件可以放宽这些初始项目和 VPC 网络要求,我们预计,无论您何时需要多个项目,采用共享 VPC 模型都是最佳做法。在此类模型中,可以使用从各自服务项目中注册的资源在 VPC 网络的宿主项目中实例化队列。如果您需要多个具有共享 VPC 的队列,则可以指定项目作为队列宿主项目。

添加/移除集群资源(集群)

现有队列感知资源可以添加到队列,但必须格外小心,以确保服务不会因此添加操作而中断。特别是,在将资源添加到队列中之前,请务必考虑相同性和信任属性。队列管理员应特别注意活跃队列组件如何使用相同性。这可能需要迁移到一致的命名做法、建立资源治理,或者在将资源添加到队列之前执行其他操作。

从集群中移除资源也需要额外注意。例如,当前作为服务网格的一部分或旨在用作多集群负载均衡器的一部分的资源将会受到影响。为了准备移除资源,我们建议您查看已在队列中启用的每个组件,并采取必要的步骤排空活跃的服务网格流量或外部流量。

随着队列的演变,我们将在添加和移除队列资源时提供更多的带内指南。

启用或重新配置舰队组件

启用或重新配置使用舰队的 Google Cloud 或 GKE Enterprise 组件也需要特别注意。启用新组件时,请注意在所有集群中启用该组件的潜在副作用。例如,在启用 Anthos Service Mesh 之前,请先了解哪些服务端点进行跨资源合并,并确保这是所需的结果。

随着我们改进队列概念,我们将提供关于配置支持队列的组件的进一步带内指导。

后续步骤

  • 如需了解用于说明本指南所述注意事项的一些假设场景,请参阅 队列示例