

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 工作负载扩展
<a name="workload-scaling"></a>

Kubernetes 中的工作负载扩展对于在动态环境中保持应用程序性能和资源效率至关重要。扩展有助于确保应用程序能够在不降低性能的情况下处理不同的工作负载。Kubernetes 提供了根据实时指标自动向上或向下扩展资源的功能，从而使组织能够快速响应流量变化。这种弹性不仅可以改善用户体验，还可以优化资源利用率，从而有助于最大限度地降低与未充分利用或过度配置资源相关的成本。

此外，有效的工作负载扩展支持高可用性，确保应用程序即使在需求高峰期也能保持响应能力。Kubernetes 中的工作负载扩展使组织能够通过动态调整容量来满足当前需求，从而更好地利用云资源。

本节讨论以下类型的工作负载扩展：
+ [水平吊舱自动扩缩器](#hpa) 
+ [集群比例自动扩缩器](#cpa)
+ [基于 Kubernetes 的事件驱动型自动扩缩器](#keda)

## Horizontal Pod Autoscaler
<a name="hpa"></a>

[水平容器自动扩缩器](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale/) (HPA) 是一项 Kubernetes 功能，可根据观察到的 CPU 利用率或其他选定指标自动调整部署、复制控制器或状态集中的容器副本数量。HPA 确保应用程序无需手动干预即可管理波动的流量和工作负载级别。HPA 提供了一种在有效利用可用资源的同时保持最佳性能的方法。

在用户需求可能随着时间的推移而大幅波动的情况下，例如 Web 应用程序、微服务和 APIs HPA 特别有用。

水平吊舱自动扩缩器提供以下主要功能：
+ **自动扩展** — HPA 会根据实时指标自动增加或减少 pod 副本的数量，从而确保应用程序可以扩展以满足用户需求。
+ **基于指标的决策** — 默认情况下，HPA 基于 CPU 利用率进行扩展。但是，它也可以使用自定义指标，例如内存使用率或特定于应用程序的指标，从而可以制定更量身定制的扩展策略。
+ **可配置的参数**-您可以选择最小和最大副本数量以及所需的利用率百分比，从而可以控制扩展的严重程度。
+ **与 Kubernetes 集成** — 为了监控和修改资源，HPA 与 Kubernetes 生态系统的其他元素协同工作，包括指标服务器、Kubernetes API 和自定义指标适配器。
+ **提高资源利用率** — HPA 通过动态修改 pod 的数量，帮助确保资源得到有效利用，降低成本并提高性能。

## 集群比例自动扩缩器
<a name="cpa"></a>

[集群比例自动扩缩器](https://github.com/kubernetes-sigs/cluster-proportional-autoscaler) (CPA) 是一个 Kubernetes 组件，旨在根据可用节点的数量自动调整集群中 Pod 副本的数量。与基于资源利用率指标（如 CPU 和内存）进行扩展的传统自动扩缩器不同，CPA 会根据集群本身的大小按比例扩展工作负载。

这种方法对于需要相对于集群规模保持一定冗余或可用性的应用程序（例如 CoreDNS 和其他基础设施服务）特别有用。CPA 的一些主要用例包括：
+ 过度配置
+ 横向扩展核心平台服务
+ 扩展工作负载，因为 CPA 不需要指标服务器或 Prometheus 适配器

通过自动化扩展过程，CPA可以帮助企业保持平衡的工作负载分配，提高资源效率，并确保应用程序配置得当，以满足用户需求。

聚类比例自动扩缩器提供以下主要功能：
+ **基于节点的扩展** — CPA 根据可以调度的集群节点数量来扩展副本，从而使应用程序能够与集群大小成比例地扩展或收缩。
+ **按比例调整** — 为了确保应用程序可以根据集群大小的变化进行扩展，自动扩缩程序会在节点数量和副本数量之间建立成比例的关系。此关系用于计算工作负载所需的副本数量。
+ **与 Kubernetes 组件集成** — CPA 可与标准 Kubernetes 组件（例如水平容器自动扩缩器 (HPA)）配合使用，但特别关注节点数量而不是资源利用率指标。这种集成允许更全面的扩展策略。
+ **Golang API 客户端** — 为了监控节点的数量及其可用内核，CPA 使用在 pod 中运行并与 Kubernetes API 服务器通信的 Golang API 客户端。
+ **可配置参数** — 使用`ConfigMap`，用户可以设置阈值和缩放参数，CPA 使用这些参数来修改其行为，并确保其遵循预期的扩展计划。

## 基于 Kubernetes 的事件驱动型自动扩缩器
<a name="keda"></a>

基于 Kubernetes 的事件驱动自动扩缩器 ([KEDA](https://keda.sh/)) 是一个开源项目，它使得 Kubernetes 工作负载能够根据需要处理的事件数量进行扩展。KEDA 允许应用程序动态响应不同的工作负载，尤其是事件驱动的工作负载，从而增强了应用程序的可扩展性。

通过根据事件自动执行扩展过程，KEDA 可帮助组织优化资源利用率、提高应用程序性能并降低与过度配置相关的成本。这种方法对于遇到不同流量模式的应用程序（例如微服务、无服务器功能和实时数据处理系统）特别有价值。

KEDA 提供以下主要功能：
+ **事件驱动的扩展** — KEDA 允许您根据外部事件源（例如消息队列、HTTP 请求或自定义指标）定义扩展规则。此功能有助于确保应用程序能够根据实时需求进行扩展。
+ **轻量级组件** — KEDA 是一个单一用途的轻量级组件，无需大量设置或开销即可轻松集成到现有的 Kubernetes 集群中。
+ **与 Kubernetes 集成** — KEDA 扩展了 Kubernetes 原生组件的功能，例如水平容器自动扩缩器 (HPA)。KEDA 为这些组件添加了事件驱动的扩展功能，增强而不是取代了它们。
+ **支持多种事件源** — KEDA 与各种事件源兼容，包括 RabbitMQ、Apache Kafka 等流行消息平台。由于这种适应性，您可以自定义扩展以适应您独特的事件驱动架构。
+ **自定义缩放器** — 使用自定义缩放器，您可以指定特定指标，KEDA 可以使用这些指标来启动扩展操作以响应特定的业务逻辑或要求。
+ **声明式配置 — 根据** Kubernetes 原则，您可以使用 KEDA 声明性地描述扩展行为，方法是使用 Kubernetes 自定义资源来定义应如何进行扩展。