配置 Amazon VPC CNI 插件以便将 VPC 子网中的 IP 地址与 Amazon EKS 搭配使用的最佳实践是什么?

上次更新日期:2021 年 11 月 22 日

我想要配置 Amazon Virtual Private Cloud (VPC) Container Network Interface (CNI) 插件,以便将 VPC 子网中的 IP 地址与 Amazon Elastic Kubernetes Service (Amazon EKS) 搭配使用。最佳实践是什么?

简短描述

Amazon VPC CNI 的主要组件之一是 L-IPAM 守护进程。您可以配置此守护进程,以便向节点分配 IP 地址。

如果节点上安排了新的 pod,则kubelet 将会调用 CNI 二进制文件。CNI 二进制文件将会调用 L-IPAMD,以获取新 pod 的 IP 地址。然后,该 pod 将会跟踪附加到实例的弹性网络接口和 IP 地址。

您可以使用一些配置变量来控制维护的网络接口和 IP 地址的数量。有关更多信息,请参阅 WARM_ENI_TARGET、WARM_IP_TARGET 和 MINIMUM_IP_TARGETWARM_PREFIX_TARGET、WARM_IP_TARGET 和 MINIMUM_IP_TARGET(来自 GitHub 网站)。

解决方法

以下是使用配置变量控制维护的网络接口和 IP 地址数量的最佳实践。

WARM_ENI_TARGET

使用 WARM_ENI_TARGET 变量确定 L-IPAMD 保留可用的弹性网络接口数量,以便在节点上进行调度时立即为 pod 分配 IP 地址。

  • 为了防止耗尽子网中的可用 IP 地址,请务必检查 Worker 节点实例类型以及每个接口的最大网络接口和专用 IPv4 地址数量。例如,如果为 m5.xlarge 节点设置 WARM_ENI_TARGET=3,则始终会有三个弹性网络接口附加到此节点。节点随后会分配 45 个 IP 地址,每个弹性网络接口 15 个。由于为此节点保留了 45 个 IP 地址,因此,这些地址不能用于其他 Worker 节点上调度的 pod。
  • 如果您希望应用程序大幅扩展,则可以使用 WARM_ENI_TARGET 快速调整新调度的 pod。

WARM_IP_TARGET

使用 WARM_IP_TARGET 变量确保 L-IPAMD 的暖池中始终包含定义数量的 IP 地址。

  • 对于低生产效率的集群,请使用 WARM_IP_TARGET,以便只向网络接口分配所需数量的 IP 地址。这就可以防止弹性网络接口的 IP 地址受阻。

MINIMUM_IP_TARGET

使用 MINIMUM_IP_TARGET 确保在节点最初出现时向其分配最低数量的 IP 地址。此变量通常与 WARM_IP_TARGET 变量搭配使用。

  • 如果您知道每个节点要运行的最低 pod 数量,则使用 MINIMUM_IP_TARGET,以便分配所需数量的 IP 地址。如果 IP 地址准备就绪,则 pod 可以在对其进行调度时接收这些 IP 地址。
  • 设置此变量及 WARM_IP_TARGET,确保节点上有可用 IP 地址供未来 pod 使用。

WARM_PREFIX_TARGET

使用 WARM_PREFIX_TARGET 变量确保您始终将定义数量的前缀(/28 CIDR 块)附加到实例的网络接口。您可以仅在 CNI 版本 1.9.0 或更高版本上使用 WARM_PREFIX_TARGET,并且您必须启用 Amazon VPC CNI IP 地址前缀分配功能

  • 如果您使用 IP 地址前缀分配,则请确保将 WARM_PREFIX_TARGET 变量设置为一个大于或等于 1 的值。如果此值设为 0,则您将会收到以下错误:
Error: Setting WARM_PREFIX_TARGET = 0 is not supported while WARM_IP_TARGET/MINIMUM_IP_TARGET is not set. 
Please configure either one of the WARM_{PREFIX/IP}_TARGET or MINIMUM_IP_TARGET env variables
  • 对于较小的子网,请使用 WARM_IP_TARGETWARM_PREFIX_TARGET,以免分配过多前缀。分配过多前缀可能会耗尽可用 IP 地址。

要了解有关这些配置变量如何影响 IP 地址使用的更多信息,请参阅 CNI 配置变量(来自 GitHub 网站)。


这篇文章对您有帮助吗?


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