选择最优的 Amazon EC2 节点实例类型 - Amazon EKS

帮助改进此页面

想为本用户指南做出贡献? 滚动到页面底部,然后选择在 GitHub 上编辑此页面。您的贡献有助于我们的用户指南为每个人提供更充分的参考。

选择最优的 Amazon EC2 节点实例类型

Amazon EC2 提供 Worker 节点的各种不同的实例类型。每种实例类型提供不同的计算、内存、存储和网络功能。每个实例也按照这些功能分组到实例系列。有关列表,请参阅 Amazon EC2 用户指南中的可用实例类型Amazon EC2 用户指南中的可用实例类型。Amazon EKS 发布了多种 Amazon EC2 AMI 的变体以启用支持。要确保您选择的实例类型与 Amazon EKS 兼容,请考虑以下标准。

  • 所有 Amazon EKS AMI 当前不支持 g5gmac 系列。

  • Arm 和非加速 Amazon EKS AMI 不支持 g3g4infp 系列。

  • 加速 Amazon EKS AMI 不支持 achpcmt 系列。

  • 对于基于 ARM 的实例,Amazon Linux 2023(AL2023)仅支持使用 Graviton2 或更高版本处理器的实例类型。AL2023 不支持 A1 实例。

在选择 Amazon EKS 支持的实例类型时,请考虑每种类型的以下功能。

节点组中的实例数

一般来说,数量较少、规模较大的实例更好,当您有很多 Daemonsets 时更是如此。每个实例都需要对 API 服务器进行 API 调用,因此您拥有的实例越多,API 服务器上的负载就越多。

操作系统

查看 LinuxWindowsBottlerocket 支持的实例类型。在创建 Windows 实例之前,请查看 在 EKS 集群上部署 Windows 节点

硬件架构

您需要 x86 还是 Arm? 在部署 Arm 实例之前,请查看 Amazon EKS 优化版 Arm Amazon Linux AMI。您需要基于 Nitro System(LinuxWindows)构建或是拥有加速功能的实例吗? 如果您需要加速功能,则只能将 Linux 与 Amazon EKS 结合使用。

Pods的最大数量

由于每个 Pod 都分配了自己的 IP 地址,因此实例类型支持的 IP 地址数量是决定实例上可以运行的 Pods 数量的因素之一。要手动确定实例类型支持多少个 Pods,请参阅 Amazon EKS 建议每种 Amazon EC2 实例类型的最大 Pods 数量

注意

如果您使用 v20220406 版本或更新版本的经 Amazon EKS 优化的 Amazon Linux 2 AMI,您可以在不升级到最新 AMI 的情况下使用新的实例类型。对于这些 AMI,如果需要的 max-pods 值未在 eni-max-pods.txt 文件中列出,AMI 会自动计算该值。默认情况下,Amazon EKS 可能不支持当前处于预览状态的实例类型。这些类型的 max-pods 的值仍然需要添加到我们的 AMI 中的 eni-max-pods.txt

AWS Nitro System 实例类型可选择性地支持比非 Nitro System 实例类型多得多的 IP 地址。但是,并非为实例分配的所有 IP 地址都可用于 Pods。要为您的实例分配大量的 IP 地址,您必须在集群中安装 1.9.0 版或更高版本的 Amazon VPC CNI 附加组件并进行适当配置。有关更多信息,请参阅 为带前缀的 Amazon EKS 节点分配更多 IP 地址。要为实例分配最大数量的 IP 地址,您必须在集群中安装 1.10.1 版或更高版本的 Amazon VPC CNI 附加组件,然后使用 IPv6 系列部署集群。

IP 系列

您可以在将 IPv4 系列用于集群时使用任何受支持的实例类型,从而使您的集群可以将私有 IPv4 地址分配到您的 Pods 和服务。但是,如果您想将 IPv6 系列用于集群,则您必须使用 AWS Nitro System 实例类型或裸机实例类型。Windows 实例仅支持 IPv4。您的集群必须运行 1.10.1 版或更高版本的 Amazon VPC CNI 附加组件。有关使用 IPv6 的更多信息,请参阅将 IPv6 地址分配给您的集群、pods 和服务

您正在运行的 Amazon VPC CNI 附加组件的版本

适用于 Kubernetes 的最新版本的 Amazon VPC CNI 插件支持这些实例类型。您可能需要更新 Amazon VPC CNI 附加组件版本来利用最新的受支持的实例类型。有关更多信息,请参阅 使用 Amazon VPC CNI 将 IP 分配给 Pods。最新版本支持与 Amazon EKS 一起使用的最新功能。以前版本并不支持所有功能。您可以在 GitHub 上的 Changelog 中查看不同版本支持的功能。

您在其中创建节点的 AWS 区域

并非所有实例类型在所有 AWS 区域 中都可用。

您是否将安全组用于 Pods

如果您将安全组用于 Pods,则仅支持特定的实例类型。有关更多信息,请参阅 将安全组分配到单个 pods

Amazon EKS 建议每种 Amazon EC2 实例类型的最大 Pods 数量

由于每个 Pod 都分配了自己的 IP 地址,因此实例类型支持的 IP 地址数量是决定实例上可以运行的 Pods 数量的因素之一。Amazon EKS 提供了一个脚本,您可以下载并运行该脚本,以确定 Amazon EKS 建议在每种实例类型上运行的最大 Pods 数量。该脚本使用每个实例的硬件属性和配置选项来确定最大 Pods 数量。您可以使用这些步骤中返回的数字来启用诸如将 IP 地址分配给不同于实例子网的 Pods显著增加实例的 IP 地址数量等功能。如果您使用的是具有多种实例类型的托管节点组,请使用适用于所有实例类型的值。

  1. 下载一个您可以用来计算每种实例类型的最大 Pods 数量的脚本。

    curl -O https://raw.githubusercontent.com/awslabs/amazon-eks-ami/master/templates/al2/runtime/max-pods-calculator.sh
  2. 将脚本标记为您计算机上的可执行文件。

    chmod +x max-pods-calculator.sh
  3. 运行脚本,请将 m5.large 替换为您计划部署的实例类型,并将 1.9.0-eksbuild.1 替换为您的 Amazon VPC CNI 附加组件版本。要确定附加组件版本,请参阅 使用 Amazon VPC CNI 将 IP 分配给 Pods 中的更新过程。

    ./max-pods-calculator.sh --instance-type m5.large --cni-version 1.9.0-eksbuild.1

    示例输出如下。

    29

    您可以向脚本添加以下选项,以查看使用可选功能时支持的最大 Pods 数量。

    • --cni-custom-networking-enabled:如果要从不同于实例的子网分配 IP 地址,请使用此选项。有关更多信息,请参阅 使用自定义网络在备用子网中部署 pods。将此选项添加到具有相同示例值的上一个脚本中会生成 20

    • --cni-prefix-delegation-enabled:如果要为每个弹性网络接口分配数量显著增加的 IP 地址,请使用此选项。此功能需要在 Nitro System 上运行的 Amazon Linux 实例和 1.9.0 或更高版本的 Amazon VPC CNI 附加组件。有关更多信息,请参阅 为带前缀的 Amazon EKS 节点分配更多 IP 地址。将此选项添加到具有相同示例值的上一个脚本中会生成 110

您也可以使用运行带有 --help 选项的脚本以查看所有可用的选项。

注意

最大 Pods 计算器脚本根据 Kubernetes 可扩展性阈值和推荐设置将返回值限制为 110。如果您的实例类型超过 30 个 vCPU,则此限制将跳至 250,这是基于内部 Amazon EKS 可扩展性团队测试得出的数字。有关更多信息,请参阅博客文章 Amazon VPC CNI 插件提高每个节点的容器组限制