帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。
选择最优的 Amazon EC2 节点实例类型
Amazon EC2 提供 Worker 节点的各种不同的实例类型。每种实例类型提供不同的计算、内存、存储和网络功能。每个实例也按照这些功能分组到实例系列。有关列表,请参阅《Amazon EC2 用户指南》中的可用实例类型。Amazon EKS 发布了多种 Amazon EC2 AMI 的变体以启用支持。要确保您选择的实例类型与 Amazon EKS 兼容,请考虑以下标准。
-
所有 Amazon EKS AMI 当前均不支持
mac系列。 -
Arm 和非加速 Amazon EKS AMI 不支持
g3、g4、inf和p系列。 -
加速 Amazon EKS AMI 不支持
a、c、hpc、m和t系列。 -
对于基于 Arm 的实例,Amazon Linux 2023(AL2023)仅支持使用 Graviton2 或更高版本处理器的实例类型。AL2023 不支持
A1实例。
在选择 Amazon EKS 支持的实例类型时,请考虑每种类型的以下功能。
- 节点组中的实例数
-
一般来说,数量较少、规模较大的实例更好,当您有很多 Daemonset 时更是如此。每个实例都需要对 API 服务器进行 API 调用,因此您拥有的实例越多,API 服务器上的负载就越多。
- 操作系统
-
查看 Linux、Windows 和 Bottlerocket
支持的实例类型。创建 Windows 实例之前,请查看在 EKS 集群上部署 Windows 节点。 - 硬件架构
-
您需要 x86 还是 Arm? 部署 Arm 实例之前,请查看 Amazon EKS 优化版 Arm Amazon Linux AMI。您需要基于 Nitro System(Linux 或 Windows)构建的实例或是拥有加速功能的实例吗? 如果您需要加速功能,则只能将 Linux 与 Amazon EKS 结合使用。
- 最大容器组(pod)数量
-
由于每个容器组(pod)都分配到了自己的 IP 地址,因此实例类型支持的 IP 地址数量是决定可以在实例上运行的容器组(pod)数量的因素之一。要手动确定实例类型支持多少个容器组(pod),请参阅Amazon EKS 建议每种 Amazon EC2 实例类型的最大容器组数量。
注意
如果您使用的是
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。Amazon Nitro System
实例类型可选择性地支持比非 Nitro System 实例类型多得多的 IP 地址。但是,并非为实例分配的所有 IP 地址都可用于容器组(pod)。要为您的实例分配大量的 IP 地址,您必须在集群中安装 1.9.0版或更高版本的 Amazon VPC CNI 附加组件并进行适当配置。有关更多信息,请参阅 为带前缀的 Amazon EKS 节点分配更多 IP 地址。要为实例分配最大数量的 IP 地址,您必须在集群中安装1.10.1版或更高版本的 Amazon VPC CNI 附加组件,然后使用IPv6系列部署集群。 - IP 系列
-
您可以在将
IPv4系列用于集群时使用任何受支持的实例类型,以便集群将私有IPv4地址分配到容器组(pod)和服务。但是,如果您想将IPv6系列用于集群,则您必须使用 Amazon Nitro System实例类型或裸机实例类型。Windows 实例仅支持 IPv4。您的集群必须运行1.10.1版或更高版本的 Amazon VPC CNI 附加组件。有关使用IPv6的更多信息,请参阅了解如何将 IPv6 地址分配给集群、容器组(pod)和服务。 - 您正在运行的 Amazon VPC CNI 附加组件的版本
-
适用于 Kubernetes 的最新版本的 Amazon VPC CNI 插件
支持这些实例类型 。您可能需要更新 Amazon VPC CNI 附加组件版本来利用最新的受支持的实例类型。有关更多信息,请参阅 使用 Amazon VPC CNI 将 IP 分配给容器组(pod)。最新版本支持与 Amazon EKS 一起使用的最新功能。以前版本并不支持所有功能。您可以在 GitHub 上的 Changelog 中查看不同版本支持的功能。 - 您在其中创建节点的 Amazon 区域
-
并非所有实例类型在所有 Amazon 区域中都可用。
- 是否将安全组用于容器组(pod)
-
如果将安全组用于容器组(pod),则仅支持特定的实例类型。有关更多信息,请参阅 将安全组分配给各个容器组(pod)。
Amazon EKS 建议每种 Amazon EC2 实例类型的最大容器组数量
由于每个容器组(pod)都分配到了自己的 IP 地址,因此实例类型支持的 IP 地址数量是决定可以在实例上运行的容器组(pod)数量的因素之一。Amazon EKS 提供了一个脚本,您可以下载并运行该脚本,以确定 Amazon EKS 建议在每种实例类型上运行的最大容器组数量。该脚本使用每个实例的硬件属性和配置选项来确定最大容器组数量。您可以使用这些步骤中返回的数字来启用诸如将 IP 地址分配给不同于实例子网的容器组(pod)和显著增加实例的 IP 地址数量等功能。如果您使用的是具有多种实例类型的托管节点组,请使用适用于所有实例类型的值。
-
下载一个您可以用来计算每种实例类型的最大容器组数量的脚本。
curl -O https://raw.githubusercontent.com/awslabs/amazon-eks-ami/master/templates/al2/runtime/max-pods-calculator.sh -
将脚本标记为您计算机上的可执行文件。
chmod +x max-pods-calculator.sh -
运行脚本,请将
m5.large替换为您计划部署的实例类型,并将1.9.0-eksbuild.1替换为您的 Amazon VPC CNI 附加组件版本。要确定附加组件版本,请参阅使用 Amazon VPC CNI 将 IP 分配给容器组(pod)中的更新过程。./max-pods-calculator.sh --instance-type m5.large --cni-version 1.9.0-eksbuild.1示例输出如下。
29您可以向脚本添加以下选项,以查看使用可选功能时支持的最大容器组数量。
-
--cni-custom-networking-enabled– 如果要从不同于实例的子网分配 IP 地址,请使用此选项。有关更多信息,请参阅 使用自定义网络在备用子网中部署容器组(pod)。将此选项添加到具有相同示例值的上一个脚本中会生成20。 -
--cni-prefix-delegation-enabled:如果要为每个弹性网络接口分配数量显著增加的 IP 地址,请使用此选项。此功能需要在 Nitro System 上运行的 Amazon Linux 实例和1.9.0或更高版本的 Amazon VPC CNI 附加组件。有关更多信息,请参阅 为带前缀的 Amazon EKS 节点分配更多 IP 地址。将此选项添加到具有相同示例值的上一个脚本中会生成110。
-
您也可以使用运行带有 --help 选项的脚本以查看所有可用的选项。
注意
最大容器组(pod)计算器脚本根据 Kubernetes 可扩展性阈值110。如果您的实例类型超过 30 个 vCPU,则此限制将跳至 250,这是基于内部 Amazon EKS 可扩展性团队测试得出的数字。有关更多信息,请参阅博客文章 Amazon VPC CNI 插件提高每个节点的容器组限制
EKS 自动模式注意事项
EKS 自动模式会将节点上的容器组(pod)数量限制为以下两项中较小的一个:
-
110 个容器组硬上限
-
上述最大容器组数量的计算结果。