结合使用 EC2 竞价型实例与 Amazon EKS 的最佳实践有哪些?

上次更新日期:2022 年 12 月 16 日

我想要结合使用 Amazon Elastic Compute Cloud(Amazon EC2)竞价型实例与我的 Amazon Elastic Kubernetes Service(Amazon EKS)。最佳实践有哪些?

简短描述

以下是结合使用 Amazon EC2 竞价型实例与 Amazon EKS 的一些最佳实践:

  • 请勿将竞价型实例用于长时间运行的任务或有状态的应用程序。
  • 结合使用托管式节点组与竞价型实例。
  • 向节点组添加多个实例类型。
  • 对自托管式节点组使用 AWS 节点终止处理程序(NTH)。

解决方法

请勿将竞价型实例用于长时间运行的任务或有状态的应用程序

竞价型实例的使用寿命较短,可能会导致长时间运行的任务意外终止。还可能影响有状态的应用程序,因为有状态的应用程序无法容忍关闭。相反,对于长时间运行的任务,请使用按需型实例。

结合使用托管式节点组与竞价型实例

您可以将托管式节点组的容量类型设置为竞价型。然后,托管式节点组会将 Auto Scaling 组配置为使用 EC2 Auto Scaling 容量再平衡。当 EC2 Auto Scaling 容量再平衡激活且竞价型节点收到再平衡建议时,Amazon EKS 会尝试更换竞价型节点。

在新的竞价型节点准备就绪后,Amazon EKS 将分离并排空前一个竞价型节点。这有助于降低 Amazon Elastic Block Store (Amazon EBS) 卷损坏或数据库连接中断的风险。

向节点组添加多个实例类型

每个竞价型实例池都由特定可用区中特定实例类型的未使用 EC2 实例容量组成。当节点组尝试预置新节点时,节点组将使用其配置中定义的实例类型之一。如果实例类型在任何可用区中都没有竞价型容量,则节点组无法扩展,将降级。

要避免此问题,请增加节点组中类似实例类型的数量。

例如,您有一个 m5.large(2 个 vCPU/8 GiB RAM)实例类型。添加具有相同 vCPU 和 RAM 值的实例,例如 m5a.large、m5n.large 和 m4.large。

将 AWS NTH 用于自托管式节点组

AWS 节点终止处理程序(NTH)(来自 GitHub 网站)可作为部署或 DaemonSet 部署到 Amazon EKS 集群中。NTH 为缺乏的自托管式节点组添加了功能。该处理程序可检测并正确响应 Amazon EC2 维护事件、竞价中断通知、Auto Scaling 组缩减事件以及可用区再平衡。使用 Queue Processor(队列处理器)选项将每个 NTH 功能添加到自托管式节点组。

使用 Karpenter 管理竞价型实例

Karpenter 是一款开源集群自动扩缩器,可自动预置新节点以响应不可调度的 pod。Karpenter 还具有横向缩减和整合节点以减少浪费和成本的功能。它使用容量-优化-优先分配策略来预置 EC2 实例。

Karpenter 使用 Amazon EKS 集群的 AWS 区域和可用区域中可用的所有 EC2 实例类型来优化竞价型实例。您可以将 Karpenter 与 EC2 实例选择器工具一起使用,以生成符合特定计算要求的实例类型列表。通过使用一组不同的实例类型,可以降低容量不足错误的风险。将实例分布在不同的可用区以使用不同的 Spot 池也是一种最佳实践。

有关 Karpenter 最佳实践和限制的更多信息,请参阅 GitHub 上的 Karpenter 最佳实践

重要:Karpenter 目前无法处理 Spot 中断终止通知(ITN)的两分钟警告。为了解决这个问题,您可以安装 NTH,以便在竞价型节点中断时优雅地封锁并耗尽它们。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?