托管节点组 - Amazon EKS

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

托管节点组

Amazon EKS 托管节点组为 Amazon EKS Kubernetes 集群自动进行节点(Amazon EC2 实例)的预配置和生命周期管理。

使用 Amazon EKS 托管节点组,您无需单独预配置或注册 Amazon EC2 实例以提供计算容量来运行 Kubernetes 应用程序。您可以通过单个操作为集群创建、自动更新或终止节点。节点使用最新的亚马逊 EKS 优化 AMI 运行AWSaccount. 节点更新和终止自动优雅耗尽节点,以确保应用程序保持可用状态。

所有托管节点均预配置为 Amazon EC2 Auto Scaling 组的一部分,由 Amazon EKS 为您进行管理。所有资源(包括实例和 Auto Scaling 组在内)在AWSaccount. 每个节点组跨您定义的多个可用区运行。

您可以使用 Amazon EKS 控制台将托管节点组添加到新的或现有集群中。eksctl、AWS CLI;AWSAPI 或基础设施作为代码工具,包括AWS CloudFormation。作为托管节点组一部分启动的节点会自动进行标记,以便由 Kubernetes Cluster Autoscaler 自动发现。您可以使用节点组将 Kubernetes 标签应用到节点并随时更新它们。

使用 Amazon EKS 托管节点组没有额外的费用,您只需为AWS您预配置的资源。这包括 Amazon EC2 实例、Amazon EBS 卷、Amazon EKS 集群小时数和任何其他AWS基础设施。无最低费用,无预先承诺。

要开始使用新 Amazon EKS 集群和托管节点组,请参阅。Amazon EKS 入门AWS Management Console和AWS CLI

要将托管节点组添加到现有集群,请参阅创建托管节点组

托管节点组概念

  • Amazon EKS 托管节点组为您创建和管理 Amazon EC2 实例。

  • 所有托管节点均预配置为 Amazon EC2 Auto Scaling 组的一部分,由 Amazon EKS 为您进行管理。此外,包括 Amazon EC2 实例和 Auto Scaling 组在内的所有资源都在AWSaccount.

  • 托管节点组的 Auto Scaling 组跨您在创建组时指定的所有子网。

  • Amazon EKS 对托管节点组资源进行标记,以便将其配置为使用 KubernetesCluster Autoscaler

    重要

    如果要使用 Kubernetes 在由 Amazon EBS 卷支持的多个可用区中运行有状态应用程序,并且使用 KubernetesCluster Autoscaler,您应该配置多个节点组,每个节点组的范围都限定为一个可用区。此外,您应该启用 --balance-similar-node-groups 功能。

  • 默认情况下,托管节点组中的实例使用最新版本优化的 Amazon EKS 优化的 Amazon Linux 2 AMI 作为其集群的 Kubernetes 版本。您可以在 Amazon EKS 优化的 Amazon Linux 2 AMI 的标准和 GPU 变体之间进行选择。如果您使用启动模板进行部署,您还可以使用自定义 AMI。有关更多信息,请参阅 启动模板支持

  • Amazon EKS 遵循托管节点组上 CVE 和安全补丁的责任共担模式。当托管节点运行 Amazon EKS 优化的 AMI 时,当报告错误或问题时,Amazon EKS 负责构建 AMI 的修补版本。我们可以发布一个修复程序。但是,您负责将这些修补的 AMI 版本部署到托管节点组。当托管节点运行自定义 AMI 时,您应该负责在报告错误或问题时构建 AMI 的修补版本,然后部署 AMI。有关更多信息,请参阅 更新托管节点组

  • Amazon EKS 托管节点组既可以在公有子网也可以在私有子网中启动。如果您在 2020 年 4 月 22 日或之后在公有子网中启动托管节点组,则子网必须具有MapPublicIpOnLaunch设置为 true,以使实例成功加入集群。如果公有子网是使用eksctlAmazon EKS 投资AWS CloudFormation模板,则此设置已设置为 true。如果在 2020 年 3 月 26 日之前创建了公有子网,则需要手动更改设置。有关更多信息,请参阅修改子网的公有 IPv4 寻址属性

  • 在私有子网中使用 VPC 终端节点时,您必须为创建终端节点,com.amazonaws.region.ecr.apicom.amazonaws.region.ecr.dkr,以及适用于 Amazon S3 的网关终端节点。有关更多信息,请参阅 。Amazon ECR 接口 VPC 终端节点 ( AWS PrivateLink )

  • 托管节点组无法部署在AWS Outposts或AWS Wavelength或者AWSLocal Zones。

  • 您可以在单个集群中创建多个托管节点组。例如,您可以为某些工作负载使用标准的 Amazon EKS 优化 Amazon Linux 2 AMI 创建一个节点组,为需要 GPU 支持的工作负载使用 GPU 变体创建另一个节点组。

  • 如果您的托管节点组遇到运行状况问题,Amazon EKS 将返回错误消息以帮助诊断问题。有关更多信息,请参阅 托管节点组错误

  • Amazon EKS 将 Kubernetes 标签添加到托管节点组实例。这些 Amazon EKS 提供的标签带有前缀eks.amazonaws.com

  • Amazon EKS 在终止或更新期间使用 Kubernetes API 自动耗尽节点。更新操作遵循您为 Pod 设置的 Pod 中断预算。

  • 使用 Amazon EKS 托管节点组不会产生额外的费用。您仅需为AWS您预配置的资源。

  • 如果要为节点加密 Amazon EBS 卷,可以使用启动模板部署节点。要在不使用启动模板的情况下部署带有加密 Amazon EBS 卷的托管节点,您必须对默认情况下在您的账户中创建的所有新 Amazon EBS 卷进行加密。有关更多信息,请参阅 。默认加密适用于 Linux 实例的 Amazon EC2 用户指南中的。

托管节点组容量类型

创建托管节点组时,您可以选择按需容量或竞价容量类型。Amazon EKS 使用 Amazon EC2 Auto Scaling 组部署托管节点组,该组只包含按需或仅包含 Amazon EC2 竞价型实例。您可以将容错应用程序的容错窗格调度到竞价型托管节点组,将容错应用程序调度到单个 Kubernetes 群集中的按需节点组。默认情况下,托管节点组部署按需 Amazon EC2 实例。

按需

使用按需实例,您只需要按秒支付计算容量费用,无需长期购买。

工作原理

默认情况下,如果您没有指定容量类型,则会使用按需实例预配置托管节点组。托管节点组代表您配置 Amazon EC2 Auto Scaling 组,并应用以下设置:

  • 按需调配容量的分配策略设置为prioritized。托管节点组使用 API 中传递的实例类型顺序,确定在满足按需容量时应首先使用哪一实例类型。例如,您可以按以下顺序指定三种实例类型:c5.largec4.large, 和c3.large。在启动您的按需实例时,托管节点组满足按需容量的顺序是从c5.large,然后c4.large,然后c3.large。有关更多信息,请参阅 。Amazon EC2 Auto Scaling 组Amazon EC2 Auto Scaling 用户指南中的。

  • Amazon EKS 会向您的托管节点组中指定容量类型的所有节点添加以下 Kubernetes 标签:eks.amazonaws.com/capacityType: ON_DEMAND。 您可以使用此标签在按需节点上调度有状态或不容错的应用程序。

Spot

Amazon EC2 竞价型实例是备用的 Amazon EC2 容量,可提供比按需价格高的折扣。当 EC2 需要容量退回时,Amazon EC2 竞价型实例可能中断并发出持续两分钟的中断通知。有关更多信息,请参阅 。Spot 实例适用于 Linux 实例的 Amazon EC2 用户指南中的。您可以使用 Amazon EC2 竞价型实例配置托管节点组,以优化 Amazon EKS 集群中运行的计算节点的成本。

工作原理

要在托管节点组中使用竞价型实例,您需要通过将容量类型设置为spot。托管节点组使用以下竞价最佳实践代表您配置 Amazon EC2 Auto Scaling 组:

  • 配置竞价容量的分配策略设置为capacity-optimized,以确保在最佳竞价型容量池中配置竞价型节点。要增加可用于分配容量的竞价型容量池的数量,我们建议您将托管节点组配置为使用多个实例类型。

  • 启用了 Amazon EC2 竞价容量重新平衡,以便 Amazon EKS 能够优雅地耗尽和重新平衡您的竞价型节点,从而在竞价型节点中断风险增加时最大限度地减少应用程序中断。有关更多信息,请参阅 。Amazon EC2 Auto Scaling 容量再平衡Amazon EC2 Auto Scaling 用户指南中的。

    • 当 Spot 节点收到再平衡建议时,Amazon EKS 会自动尝试启动新的替换 Spot 节点并等待它成功加入集群。

    • 当引导替换竞价节点并在Ready状态,亚马逊 EKS 警戒线并排出收到重新平衡建议的竞价节点。封锁竞价节点可确保服务控制器不会向此竞价节点发送任何新请求。它还将其从其运行状况良好的活动竞价节点列表中删除。排出竞价节点可确保正在运行的窗格被优雅地逐出。

    • 如果在替换竞价节点位于Ready状态时,Amazon EKS 将开始耗尽收到重新平衡建议的竞价节点。

  • Amazon EKS 会向您的托管节点组中指定容量类型的所有节点添加以下 Kubernetes 标签:eks.amazonaws.com/capacityType: SPOT。 您可以使用此标签在竞价型节点上安排容错应用程序。

选择容量类型的注意事项

在决定是部署具有按需容量还是竞价容量的节点组时,应考虑以下条件:

  • 竞价型实例非常适合无状态、容错、灵活的应用程序,例如批量和机器学习培训工作负载、Apache Spark 等大数据 ETL、队列处理应用程序和无状态 API 终端节点。由于竞价是备用的 Amazon EC2 容量,这些容量可能会随时间变化,因此我们建议您对容忍中断的工作负载使用竞价容量,这些工作负载可以容忍所需容量不可用的时段。

  • 我们建议您对不容错的应用程序使用按需功能,包括群集管理工具(如监视和操作工具)、需要StatefulSets和有状态的应用程序(如数据库)。

  • 为了在使用竞价型实例时最大限度地提高应用程序的可用性,我们建议您将竞价型管理节点组配置为使用多个实例类型。我们建议在使用多个实例类型时应用以下规则:

    • 在托管节点组中,如果您使用Cluster Autoscaler,我们建议使用具有相同数量 vCPU 和内存资源的灵活实例类型集,以确保集群中的节点按预期扩展。例如,如果您需要四个 vCPUs 和八个 GiB 内存,我们建议您使用c3.xlargec4.xlargec5.xlargec5d.xlargec5a.xlarge、c5n.xlarge 或其他类似的实例类型。

    • 为了提高应用程序可用性,我们建议部署多个竞价型托管节点组,每个节点组都使用一组具有相同 vCPU 和内存资源的灵活实例类型。例如,如果您需要 4 个 vCPUs 和 8 GiB 内存,我们建议您使用c3.xlargec4.xlargec5.xlargec5d.xlargec5a.xlargec5n.xlarge或其他类似的实例类型,以及第二个托管节点组m3.xlargem4.xlargem5.xlargem5d.xlargem5a.xlargem5n.xlarge或其他类似的实例类型。

    • 使用使用自定义启动模板的竞价容量类型部署节点组时,请使用 API 传递多个实例类型,而不是通过启动模板传递单个实例类型。有关使用启动模板部署节点组的更多信息,请参阅启动模板支持