设计工作负载分离

本文档简要介绍了 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 集群中的 pod 调度,GDC 采用 Kubernetes 的一般调度、抢占和逐出概念。关于在集群内调度 Pod 的最佳实践因工作负载的要求而异。

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

设计 Kubernetes 集群的最佳实践

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

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

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

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

为每个软件开发环境定义集群的前提是,软件开发环境中的工作负载可以共享集群。然后,将项目分配给相应环境的 Kubernetes 集群。Kubernetes 集群可能会进一步细分为多个节点池,或者使用污点来实现工作负载隔离

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

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

GDC 配置

此示例架构假定生产和开发软件开发环境中的工作负载可以共享集群。每个环境都有一组单独的 Kubernetes 集群,这些集群会进一步细分为多个节点池,以满足不同的机器类要求。

或者,设计多个 Kubernetes 集群有助于执行以下容器操作:

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

下图展示了一个示例,其中每个软件开发环境都配置了多个集群,这是因为存在上一部分中描述的容器操作等要求。

GDC 配置

创建更少的聚类

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

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

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

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

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

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

后续步骤