设计工作负载分离

本文档简要介绍了 Google Distributed Cloud (GDC) 网闸隔离配置中的工作负载管理。具体涵盖以下主题:

虽然我们推荐了部分工作负载部署设计,但您无需完全按照规定来执行。每个 GDC 宇宙都有独特的要求和注意事项,必须根据具体情况来满足。

本文档适用于平台管理员群组中的 IT 管理员(负责管理组织内的资源)以及应用运维人员群组中的应用开发者(负责在 GDC 环境中开发和维护应用)。

如需了解详情,请参阅 GDC 气隙环境受众群体文档

工作负载的部署位置

在 GDC 平台上,部署虚拟机 (VM) 工作负载和容器工作负载的操作有所不同。下图展示了组织数据平面层中的工作负载分离。

组织数据平面中的工作负载分离。

基于虚拟机的工作负载在虚拟机内运行。相反,容器工作负载在 Kubernetes 集群内运行。虚拟机与 Kubernetes 集群之间的根本性分离可在虚拟机工作负载与容器工作负载之间提供隔离边界。如需了解详情,请参阅资源层次结构

以下部分将介绍每种工作负载类型之间的差异及其部署生命周期。

基于虚拟机的工作负载

您可以创建虚拟机来托管基于虚拟机的工作负载。您可以选择多种虚拟机配置选项,包括虚拟机规格和大小,以尽可能满足基于虚拟机的各种工作负载要求。您必须在项目中创建虚拟机,该项目可以包含许多虚拟机工作负载。虚拟机是项目的子资源。如需了解详情,请参阅虚拟机概览

仅包含基于虚拟机的工作负载的项目不需要 Kubernetes 集群。 因此,您无需为基于虚拟机的工作负载预配 Kubernetes 集群。

基于容器的工作负载

您可以将基于容器的工作负载部署到 Kubernetes 集群中的 pod。Kubernetes 集群由以下节点类型组成:

  • 控制平面节点:运行管理服务,例如调度、etcd 和 API 服务器。

  • 工作器节点:运行您的 pod 和容器应用。

Kubernetes 集群架构

Kubernetes 集群有两种配置类型:

  • 共享集群:组织级 Kubernetes 集群,可以跨多个项目,不受单个项目管理,而是附加到这些项目。
  • 标准集群:项目范围的 Kubernetes 集群,用于管理项目内的集群资源,无法跨多个项目。

如需了解详情,请参阅 Kubernetes 集群配置

Kubernetes 集群提供各种资源层次结构选项,因为共享集群的范围是组织,而标准集群的范围是项目。这是 Kubernetes 集群与虚拟机相比的一个根本区别。虚拟机是项目的子资源,无法配置为在项目外部运行。如需详细了解如何设计 Kubernetes 集群基础架构,请参阅 Kubernetes 集群设计最佳实践

对于 Kubernetes 集群内的 pod 调度,GDC 采用 Kubernetes 的一般调度、抢占和逐出概念。在集群内调度 Pod 的最佳实践因工作负载的要求而异。

如需详细了解 Kubernetes 集群,请参阅 Kubernetes 集群概览。如需详细了解如何在 Kubernetes 集群中管理容器,请参阅 GDC 中的容器工作负载

设计 Kubernetes 集群的最佳实践

本部分介绍了设计 Kubernetes 集群的最佳实践:

请考虑每项最佳实践,为容器工作负载生命周期设计弹性集群。

为每个软件开发环境创建单独的集群

除了为每个软件开发环境使用单独的项目之外,我们还建议您为每个软件开发环境设计单独的 Kubernetes 集群。软件开发环境是 GDC 宇宙中的一个区域,用于执行与指定生命周期阶段相对应的所有操作。例如,如果您的组织中有三个名为 developmentstagingproduction 的软件开发环境,您可以为每个环境创建一组单独的 Kubernetes 集群,并根据需要将项目附加到每个集群。

我们建议在限定为单个项目的预生产生命周期中使用标准集群,以便将与测试相关的任何破坏性流程与生产项目隔离开来,而共享集群非常适合可跨多个项目的生产环境。托管跨多个项目的生产工作负载的共享集群提供了一个共享部署区域,其中范围限定为单个项目的标准集群可以直接将其工作负载提升到生产环境。

为每个软件开发环境定义标准集群的前提是,软件开发环境中的预生产工作负载仅限于该集群。Kubernetes 集群可以进一步细分为多个节点池,也可以使用污点来实现工作负载隔离

通过按软件开发环境分离 Kubernetes 集群,您可以隔离生产和非生产工作负载之间的资源消耗、访问政策、维护事件和集群级配置更改。

下图展示了一个示例 Kubernetes 集群设计,该设计适用于跨项目、集群、软件开发环境和不同节点池提供的机器类别的多个工作负载。

跨多个软件开发环境的 GDC 集群配置。

此示例架构假设开发、预演和生产软件开发环境中的工作负载可以共享集群。每个环境都有一个单独的标准集群,这些集群会进一步细分为多个节点池,以满足不同的机器类要求。共享集群涵盖所有软件开发环境,为所有环境提供通用部署区域。

或者,为每个软件开发环境设计多个标准集群有助于执行以下容器操作:

  • 您有一些工作负载固定到特定 Kubernetes 版本,因此您需要维护不同版本的不同集群。
  • 您有一些工作负载需要不同的集群配置,例如备份政策,因此您创建了多个具有不同配置的集群。
  • 您可并行运行集群的多个副本,以便进行破坏性版本升级或采用蓝绿部署策略。
  • 您构建了一个可能会导致 API 服务器或集群内其他单点故障受到限制的实验性工作负载,因此您将其与现有工作负载隔离开。

您必须根据容器操作的要求调整软件开发环境。

创建更少的集群

为了高效利用资源,我们建议您设计最少数量的 Kubernetes 集群,以满足您对分离软件开发环境和容器操作的要求。每个额外的集群都会导致额外的资源消耗,例如需要额外的控制平面节点。因此,与许多小型集群相比,运行许多工作负载的大型集群可以更高效地利用底层计算资源。

如果多个集群的配置相似,则需要额外的维护开销来监控集群容量并规划跨集群依赖项。

如果集群即将达到容量上限,我们建议您向集群添加更多节点,而不是创建新集群。

在集群中创建的节点池数量更少

为了提高资源利用率,我们建议在 Kubernetes 集群中设计更少但更大的节点池。

如果您需要调度需要不同机器类别的 Pod,配置多个节点池会非常有用。为工作负载所需的每个机器类创建一个节点池,并将节点容量设置为自动扩缩,以便高效使用计算资源。

后续步骤