构建 Kubernetes:如何选择集群部署策略

一、介绍

本指南将引导您完成在为 Vultr Kubernetes 引擎 (VKE) 选择集群部署策略时应考虑的一些架构决策,以及每种方法的优缺点。

VKE 群集是一组服务器,它们为以高度可用、分布式和可扩展的方式运行应用程序和服务提供基础架构。集群由一个控制平面(负责管理集群)和一个或多个工作器节点(负责运行实际应用程序和服务)组成。控制平面提供核心调度、网络和存储服务。它管理基础结构,例如虚拟机和容器。它监督工作节点之间的通信,以确保它们以最佳方式运行。工作器节点负责运行托管群集各种工作负载的容器(称为 Pod)。

有多种方法可以配置群集体系结构以托管应用程序,这些方法具有灵活扩展、成本效率、应用程序和环境隔离、易于管理等优势。幸运的是,VKE 提供了一个免费的控制平面,并且只对工作节点的总数收费,这消除了为您的应用程序选择最佳架构时的任何成本考虑因素。但是,在选择部署策略时,除了成本之外,还应考虑其他重要事项。本指南探讨了每种方法最重要的优缺点,以帮助您做出明智的选择。

二、基于大小的架构模式

组织和分组群集的一种方法是按大小。Kubernetes 集群可以通过添加和删除工作器节点或部署具有不同计算资源量(如 CPU、内存和存储)的工作器节点来扩展或缩减。这些工作器节点是运行应用程序的物理或虚拟服务器。使用 VKE,您可以轻松添加或删除节点以调整集群大小。Kubernetes 集群非常强大和高效,允许用户根据自己的需求快速扩展或缩减其计算资源。

集群的大小是工作器节点总数及其每个计算资源的组合,它们用于部署更多 Pod(水平扩展)或为每个 Pod 分配不同数量的计算资源(垂直扩展)。

2.1、几个大型集群

在此架构配置中预置一些集群来托管工作负载。您甚至可以使用单个集群。每个都相对较大,有许多工作节点和计算资源可用于在许多 Pod 中运行工作负载。

使用几个大型集群有好处:

  • 您可以优化资源利用率。在几个大型集群上托管应用程序时,工作节点会有效地与 Pod 共享计算资源,从而最大限度地减少计算能力的浪费。
  • 您可以有效地管理基础架构,因为您无需与多个集互即可执行管理或日常任务。
  • 您可以重复使用集群范围的资源,例如负载均衡器、入口控制器等,从而使其管理更简单、更高效。一个

但是,拥有几个大型集群有一些缺点:

  • 如果需要分离不同的应用程序,单个控制平面只能具有软多租户。Kubernetes 命名空间和基于角色的访问控制提供租户之间的分离,但它们共享相同的控制平面组件,例如用于服务发现的 DNS 服务器。
  • 集群越少,容错能力就越低,因为每个集群上集中的服务就越多。任何服务中断或故障都可能导致大量容量丢失。
  • 如果大型群集发生故障,则重建该群集更具挑战性。大型群集可能具有各种不同的应用程序,这些应用程序需要复杂的配置过程。
  • 在单个群集上具有太多不同的租户应用程序可能会给控制平面组件带来压力,从而导致意外错误。如果计划托管许多应用程序,最好将它们分布在多个群集中。

2.2、许多小集群

在此体系结构模式中,您将工作负载分布在具有较小工作器节点的较大集群组中。这可实现灵活的扩展、成本效益、应用程序和环境隔离以及易于管理。如果集群过载,可以将某些 Pod 移动到另一个集群,使其成为更动态、更高效的解决方案。

如果需要,使用许多小型集群是很好的:

  • 硬多租户:您可以通过将应用程序分布在不同的集群中来完全隔离应用程序,以防止共享控制平面组件。
  • 容错:此体系结构具有更强的容错能力。在发生单个集群故障时,您可以保留大量容量。
  • 降低复杂性:重建损坏的小型群集不太复杂,因为它托管的应用程序较少。

此模式有一些缺点:

  • 您必须反复与许多不同的集互,以执行管理或例行任务,例如监视、更新等。
  • 将应用程序分散到许多不同的集群可能会浪费负载均衡器和入口控制器等资源,而这些资源可以同时处理许多应用程序。

三、基于效用的架构模式

应用程序可能包含前端、数据库、业务逻辑等的多个组件。您可能会发现自己需要部署应用程序的多个实例来创建不同的环境,例如生产、开发、测试、暂存等。这些环境中的每一个都可能具有非常不同的要求来满足应用程序的需求,这可能导致资源使用效率低下。

幸运的是,可以使用其他几种体系结构模式来解决此问题。这些关注的是 Kubernetes 集群的效用,而不是它的大小。例如,您可能会发现一个应用程序占用更多 CPU,而另一个应用程序需要大量内存。此外,生产环境可能需要入口控制器,而开发不需要,依此类推。通过选择正确的配置,您可以确保应用程序尽可能高效地运行,同时满足每个环境的需求。

3.1、每个应用程序的群集数

每个应用程序群集的方法在单个群集中运行每个应用程序及其所有环境(例如开发、测试和生产)。此体系结构配置提供了许多优点,例如应用程序隔离和易于管理,因为应用程序的所有相关组件都可以一起找到。此外,它还允许更大的可扩展性,因为可以配置集群以满足应用程序的确切要求,包括不同的计算资源和 Kubernetes 版本。

但是,由于所有环境都位于同一群集上,因此这可能会对性能和可靠性产生不利影响。假设在一个环境中出现问题,例如在测试环境中执行错误的代码。在这种情况下,它可能会导致其他环境(尤其是生产环境)的服务中断。因此,在同一群集上托管多个环境时,请务必采取额外的预防措施。

3.2、每个环境的群集数

每个环境群集的方法允许您在单个群集上托管共享环境(例如测试或生产)的多个应用程序。这种方法的好处是:

  • 高效使用资源:您可以根据环境要求预置每个集群的计算资源。您的开发和测试环境可能小于生产环境。
  • 访问隔离:更容易限制对生产群集或托管敏感环境的其他内容的访问。

但是,与每个应用程序群集的方法相比,管理单个应用程序更为复杂,因为您将环境分散在不同的群集上。可能有更好的方法来对具有高度可变要求的应用程序进行分组。例如,需要不同 Kubernetes 版本的应用程序不能使用这种方法组合在一起。

此外,使用此方法时,您必须管理多个群集及其资源,这可能会成为一项艰巨的任务。这是因为必须单独预配和维护每个群集,并且必须跨所有群集复制对应用程序或环境所做的任何更改。此外,如果一个集群关闭,可能会影响其他集群及其应用程序,从而导致潜在的停机。

幸运的是,有一些方法可以最大程度地降低此方法的复杂性。例如,您可以使用自动化工具来管理集群和资源,从而简化管理多个集群的过程。此外,您可以使用容器化技术来确保应用程序和环境可以在多个集群上运行,从而提供一定程度的冗余,以帮助最大限度地降低停机风险。

四、选择正确的架构

在托管基础结构时,没有无效的方法。上面讨论的所有体系结构都是有效的。但是,两种体系结构配置之间的选择取决于您如何确定以下因素的优先级。

  • 缩放
  • 成本效益
  • 租户隔离
  • 高可用性
  • 易于管理

随着资源需求的增加,扩展一组大型集群的成本非常高,因为与启动许多小型集群相比,每个集群的成本要高得多。您可以通过向小型集群组添加更多集群来轻松扩展基础架构,从而无限增加容量。

成本效益取决于您如何利用资源。通过在几个大型群集上托管基础结构,通过重用群集范围的资源(如入口控制器、负载均衡器等),可以更高效。拥有许多集群可能会引入资源缺口,并且成本高于您的利用率。

租户隔离有两种类型:软隔离和硬隔离。通过使用 Kubernetes 命名空间、基于角色的访问控制等在大型群集上实现软租户隔离,但由于共享控制平面组件,应用程序仍然可以发现群集上运行的其他应用程序。您可以通过在许多小型集群上托管基础架构块来实现硬租户隔离,从而消除共享控制平面组件。

Kubernetes 具有安全和资源限制功能,例如用于控制流量的 NetworkPolicy 资源、用于命名空间级别隔离的 Pod 安全准入、ResourceQuota 对象或 LimitRange 资源的资源限制等等。但是,这些方法需要额外的配置而不是硬隔离,并且无法保护您的基础结构免受每个安全漏洞的影响。

高可用性很难通过少量大型集群实现,因为它的容错能力低于拥有许多小型集群。由于大型集群中的服务中断,您可能会损失大量容量。与重建大型集群相比,您可以轻松地在一组小型集群中重建损坏的集群。

易于管理是拥有几个大型集群的一个吸引人的功能。与大型集群相比,管理由许多小型集群组成的组非常复杂,因为您需要单独与每个集群进行交互。如果您管理大量集群,则必须多次执行日常任务,例如升级 Kubernetes 版本和监控集群运行状况。

五、结论

本指南引导您完成用于托管应用程序的不同体系结构配置。它还比较了不同的配置,包括扩展、成本效率、应用程序/环境隔离、易管理性等。您可以通过根据所讨论的指针分析和评估需求,为应用程序选择正确的集群体系结构。请参阅 Kubernetes 组件概述,了解有关 Kubernetes 集群中各个组件的更多信息。

赞(0)
未经允许不得转载:主机百科 » 构建 Kubernetes:如何选择集群部署策略