托管节点组 - Amazon EKS
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

托管节点组

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

使用 Amazon EKS 托管节点组,您无需单独预配置或注册 Amazon EC2 实例以提供计算容量来运行 Kubernetes 应用程序。您可以通过单个操作为集群创建、更新或终止节点。节点使用 Amazon EKS 账户中最新的经 AWS 优化的 AMI 运行。节点更新和终止正常耗尽节点,以确保您的应用程序保持可用。

所有托管节点均作为 Amazon EC2 为您管理的 Auto Scaling 组的一部分进行预配置。Amazon EKS所有资源(包括实例和 Auto Scaling 组在内)在您的 AWS 账户中运行。每个节点组使用 Amazon EKS 优化的 Amazon Linux 2 AMI,并且可以在您定义的多个可用区中运行。

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

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

要开始使用新 Amazon EKS 集群和托管节点组,请参阅 Amazon EKS – AWS 管理控制台 和 AWS CLI 入门.

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

托管节点组概念

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

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

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

  • Amazon EKS 标记托管节点组资源,以便将它们配置为使用 Kubernetes Cluster Autoscaler

    重要

    如果要使用 Kubernetes Cluster Autoscaler 在由 Amazon EBS 卷支持的多个可用区中运行有状态应用程序,则应该配置多个节点组,每个节点组的范围都限定为一个可用区。此外,您应该启用 --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 托管节点组既可以在公有子网也可以在私有子网中启动。如果您在 April 22, 2020 或之后在公有子网中启动托管节点组,则子网必须将 MapPublicIpOnLaunch 设置为 true,实例才能成功加入集群。如果公有子网是在不早于 eksctl 之时使用 或 Amazon EKSAWS CloudFormation 提供的 March 26, 2020 模板创建的,则此设置已设置为 true。如果在 March 26, 2020 之前创建了公有子网,则需要手动更改设置。有关更多信息,请参阅修改子网的公有 IPv4 寻址属性.

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

  • 托管节点组无法部署到 AWS Outposts 上的节点,或者部署到 AWS Wavelength 或 AWS 本地区域中的节点。

  • 您可以在单个集群中创建多个托管节点组。例如,您可以为某些工作负载创建一个具有标准 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 资源付费。

托管节点组容量类型

创建托管节点组时,您可以选择按需或 Spot 容量类型。Amazon EKS 部署一个托管节点组,该组具有仅包含按需实例或仅包含 Amazon EC2 Spot 实例的 Auto Scaling Amazon EC2 组。您可以将 Pod 安排到 Spot 托管节点组的容错应用程序,并将容错应用程序安排到单个 Kubernetes 集群中的按需节点组。默认情况下,托管节点组部署按需 Amazon EC2 实例。

按需

使用按需实例,您可以按秒为计算容量付费,无需长期购买。

工作原理

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

  • 预配置按需容量的分配策略设置为 prioritized。托管节点组使用在 API 中传递的实例类型顺序来确定在满足按需容量时首先使用的实例类型。例如,您可以按以下顺序指定三种实例类型:c5.largec4.largec3.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 Spot 实例是空闲的 Amazon EC2 容量,可提供按需价格的大幅折扣。 Amazon EC2当 EC2 需要容量退回时, Spot 实例可能会中断,并发出两分钟的中断通知。有关更多信息,请参阅 中的 Spot 实例Amazon EC2 用户指南(适用于 Linux 实例)。您可以使用 Amazon EC2 Spot 实例配置托管节点组,以优化在 Amazon EKS 集群中运行的计算节点的成本。

工作原理

要在托管节点组内使用 Spot 实例,您需要通过将容量类型设置为 spot 来创建托管节点组。托管节点组代表您配置一个 Amazon EC2 Auto Scaling 组,并应用以下 Spot 最佳实践:

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

  • Amazon EC2 启用 Spot 容量重新平衡,以便 Amazon EKS 可以正常耗尽和重新平衡 Spot 节点,尽可能减少 Spot 节点发生中断风险时的应用程序中断。有关更多信息,请参阅 中的 Amazon EC2 Auto Scaling 容量重新平衡Amazon EC2 Auto Scaling 用户指南。

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

    • 当引导替换 Spot 节点并在 Kubernetes 上处于 Ready 状态时,Amazon EKS 将封锁并耗尽收到重新平衡建议的 Spot 节点。通过连接 Spot 节点,可确保服务控制器不会向此 Spot 节点发送任何新请求。它还会将其从运行状况良好的活动 Spot 节点列表中删除。耗尽 Spot 节点可确保正常移出正在运行的 Pod。

    • 如果在替换 Spot 节点处于 Ready 状态之前到达 Spot 两分钟中断通知,则 Amazon EKS 会开始耗尽收到重新平衡建议的 Spot 节点。

  • Amazon EKS 将以下 Kubernetes 标签添加到托管节点组中指定容量类型的所有节点:eks.amazonaws.com/capacityType: SPOT。您可以使用此标签来计划 Spot 节点上的容错的应用程序。

有关选择容量类型的注意事项

在决定是否部署具有按需或 Spot 容量的节点组时,您应考虑以下条件:

  • Spot 实例非常适合无状态、容错且灵活的应用程序,例如批处理和机器学习训练工作负载、大数据 ETL(如 Apache Spark)、队列处理应用程序和无状态的 API 终端节点。由于 Spot 是可以随着时间变化而使用的备用 Amazon EC2 容量,因此,我们建议您将 Spot 容量用于可以容忍所需容量不可用的期间容忍中断的工作负载。

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

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

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

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

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