将 KEDA 与 Kubernetes 集群集成以实现事件驱动型可扩展性
本指南演示了如何使用 Kubernetes Event-Driven Autoscaler(KEDA)为 Amazon Elastic Kubernetes Service(Amazon EKS)应用程序实施事件驱动型自动扩展。本指南展示了如何根据自定义指标,而不仅仅是 CPU 和内存利用率来扩展部署。KEDA 与 Kubernetes 集成,为事件驱动型工作负载扩展了自动扩展功能。通过本指南,您可以使用 KEDA 基于自定义指标的自动扩展功能,在 Amazon EKS 上优化资源预置,提高成本效率,并增强事件驱动型应用程序的客户体验。
请注意:[免责声明]
架构图
-
EKS 集群
-
KEDA 概览
-
使用 KEDA 进行扩展
-
EKS 集群
-
此架构图显示了如何在 Amazon EKS 集群上部署 KEDA。如需查看 KEDA 概览,请打开下一个选项卡。
第 1 步
使用 AWS Identity and Access Management(IAM)权限搭建 AWS Cloud9 环境。第 2 步
在 AWS Cloud9 中安装 helm、eksctl、kubectl 和 AWS 命令行界面(CLI)。第 3 步
Amazon Elastic Kubernetes Service(Amazon EKS)集群和 EKS 托管的节点组通过 AWS Cloud9 启动。第 4 步
使用服务账户(IRSA)所需的 IAM 角色部署 KEDA。第 5 步
部署 Amazon Simple Queue Service(Amazon SQS)以解耦应用程序之间的通信,并在 KEDA IRSA 上附加策略以访问 Amazon SQS。第 6 步
创建 Amazon Managed Service for Prometheus,而且可选择性创建 Amazon Managed Grafana。第 7 步
配置适用于 OpenTelemetry 的 AWS Distro,以将应用程序指标发送到 Amazon Managed Service for Prometheus(已部署所需的 IAM IRSA)。第 8 步
配置 Sigv4 代理容器组(pod),以使用 Amazon Managed Service for Prometheus 对 KEDA 进行身份验证(已部署所需的 IAM IRSA)。 -
KEDA 概览
-
此架构图展示了 KEDA、Kubernetes Horizontal Pod Autoscaler(HPA)和外部事件源如何协同工作的概览。如需了解 KEDA 缩放容器组(pod),请打开下一个选项卡。
第 1 步
已扩展的对象是 CustomResourceDefinition(CRD),用于配置事件源、要扩展的部署和扩展行为。第 2 步
KEDA 可激活和停用 Kubernetes 部署,以便在无事件发生时不扩展。这是安装 KEDA 时运行的 keda-operator 容器的主要作用之一。第 3 步
KEDA 为 Kubernetes Horizontal Pod Autoscaling(HPA)给出自定义指标,将容器组(pod)从一个扩展到所需数量。第 4 步
HPA 根据 KEDA 指令扩展容器组(pod)。第 5 步
KEDA 支持 60 多个事件源,可在以下位置获取:KEDA 目前可用的扩展器。 -
使用 KEDA 进行扩展
-
此架构图展示了 KEDA 根据自定义指标来源扩展部署容器组(pod)。如需了解 EKS 集群,打开第一个选项卡。
第 1 步
该应用程序使用 Amazon SQS 解耦微服务之间的通信。第 2 步
适用于 OpenTelemetry 的 AWS Distro 获取由应用程序提供的指标,并将其发送到 Amazon Managed Service for Prometheus。第 3 步
KEDA 可使用 Amazon SQS 和 Amazon Managed Service for Prometheus 扩展器来获取 Amazon SQS 队列长度和 Prometheus 自定义指标。第 4 步
KEDA(keda-operator-metrics-apiserver)提供用于 HPA 进行扩展的事件数据。第 5 步
HPA 可以扩展到适当数量的容器组(pod)。第 6 步
集群自动扩展(CA)使用自动扩缩组预置所需的节点。 除了 CA,您也可以使用 Karpenter。第 7 步
根据需要预置新容量。第 8 步
您可以有选择性地配置 Amazon Managed Grafana,用于在控制面板中显示 Amazon Managed Service for Prometheus 的指标。
开始使用
Well-Architected 支柱
当您在云中构建系统时,AWS Well-Architected Framework 可以帮助您了解所做决策的利弊。框架的六大支柱使您能够学习设计和操作可靠、安全、高效、经济高效且可持续的系统的架构最佳实践。使用 AWS 管理控制台中免费提供的 AWS Well-Architected Tool,您可以通过回答每个支柱的一组问题,根据这些最佳实践来检查您的工作负载。
上面的架构图是按照 Well-Architected 最佳实践创建的解决方案示例。要做到完全的良好架构,您应该遵循尽可能多的 Well-Architected 最佳实践。
-
卓越运营
这种事件驱动型架构可用于定义精确的扩展规则,对应用程序如何响应特定事件或指标进行精细控制。通过使用 KEDA,可提高 Kubernetes 环境的效率、资源利用率和响应能力,从而推动卓越运营。
-
安全性
使用 IAM 角色获取临时凭证,以便访问各种 AWS 服务。为基于 Kubernetes 的应用程序集成原生身份验证和授权机制,以安全地与 Kubernetes API 服务器交互。通过精确定义 IAM 策略,授予最低的必要权限,可以有效减少未经授权的访问,加强环境的安全性。
-
可靠性
在 Kubernetes 中使用容器组(pod)拓扑分布限制可以帮助您提高应用程序的可用性和弹性。此功能可控制容器组(pod)在不同故障域(例如主机或可用区)之间的分布。通过确保均衡、最佳的分布,可以最大限度地减少单个域内潜在故障的影响,从而增强应用程序的整体完整性。
-
性能效率
Amazon EKS 集群的多可用区设置可实现低延迟性能。虽然可能会出现跨可用区的子网间流量,但预计由此产生的延迟对应用程序性能的影响极小。在需要更低延迟的情况下,您可以在单个可用区内引导流量,进一步优化网络性能。
-
成本优化
KEDA 的自动容器组(pod)扩展功能有助于节省成本。通过根据自定义指标来启动扩展,您可以实现容器组(pod)最佳可用性,以满足应用程序的需求,避免过度配置和不必要的成本。
-
可持续性
您可以通过 Kubernetes HPA 实现可持续的资源管理。KEDA 可利用此功能,根据自定义指标有效扩展工作负载,从而只运行所需的容器组(pod)。通过访问 60 多种不同的扩展器,您可以根据自己的特定需求定制扩展行为,最大限度地利用已部署的资源,防止过度分配。
相关内容
免责声明
示例代码;软件库;命令行工具;概念验证;模板;或其他相关技术(包括由我方人员提供的任何前述项)作为 AWS 内容按照《AWS 客户协议》或您与 AWS 之间的相关书面协议(以适用者为准)向您提供。您不应将这些 AWS 内容用在您的生产账户中,或用于生产或其他关键数据。您负责根据特定质量控制规程和标准测试、保护和优化 AWS 内容,例如示例代码,以使其适合生产级应用。部署 AWS 内容可能会因创建或使用 AWS 可收费资源(例如,运行 Amazon EC2 实例或使用 Amazon S3 存储)而产生 AWS 费用。
本指南中提及第三方服务或组织并不意味着 Amazon 或 AWS 与第三方之间存在认可、赞助或从属关系。AWS 的指导是一个技术起点,您可以在部署架构时自定义与第三方服务的集成。