设计工作负载分离

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

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

工作负载的部署位置

在 GDC 平台上,部署虚拟机 (VM) 工作负载和容器工作负载的操作有所不同。本部分将介绍这些差异以及每种资源的部署位置。

基于虚拟机的工作负载

您可以创建虚拟机来托管基于虚拟机的工作负载。您可以选择多种虚拟机配置选项,以帮助您最大限度地满足基于虚拟机的各种工作负载要求。您必须在项目中创建虚拟机,一个项目可以包含多个虚拟机和虚拟机工作负载。如需了解详情,请参阅虚拟机概览

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

基于容器的工作负载

您可以将基于容器的工作负载部署到 Kubernetes 集群中的 pod 上。Kubernetes 集群可以附加到一个或多个项目,但它们不是项目的子资源。我们建议仅将集群附加到相应部署环境中的项目。例如,用于生产工作负载的集群会附加到用于生产工作负载的项目。

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

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

设计 Kubernetes 集群的最佳实践

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

为每个部署环境创建单独的集群

除了为每个部署环境使用单独的项目之外,我们还建议您为每个部署环境设计单独的 Kubernetes 集群。通过为每个环境分别设置 Kubernetes 集群和项目,您可以隔离生产和非生产工作负载之间的资源消耗、访问政策、维护事件和集群级配置更改。

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

GDC 配置

此示例架构假设部署环境中的工作负载可以共享集群。每个部署环境都有一组单独的 Kubernetes 集群。然后,将项目分配给相应部署环境的 Kubernetes 集群。Kubernetes 集群可能会进一步细分为多个节点池,以满足不同的机器类要求。

或者,设计多个 Kubernetes 集群有助于执行容器操作,例如在以下场景中:

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

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

GDC 配置

创建更少的聚类

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

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

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

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

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

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