我想将亚马逊虚拟私有云(VPC)容器网络接口(CNI)插件配置为在 Amazon Elastic Kubernetes Service (Amazon EKS)的 VPC 子网中使用 IP 地址控制号。
概述
Amazon VPC CNI 的主要组件之一是向节点分配 IP 地址的 L-IPAM 进程守护程序。
如果在节点上调度了新的容器组(pod),则容器运行时会调用 CNI 二进制文件。CNI 二进制文件调用 L-IPAMD 来获取新容器组(pod)的 IP 地址。然后,容器组(pod)会跟踪连接到实例的弹性网络接口和 IP 地址。
您可以使用特定的配置变量来控制保留多少网络接口和 IP 地址。有关更多信息,请参阅 GitHub 网站上的 W WARM_ENI_TARGET, WARM_IP_TARGET and MINIMUM_IP_TARGET 和 WARM_PREFIX_TARGET, WARM_IP_TARGET and MINIMUM_IP_TARGET。
解决方案
以下是控制网络接口和 IP 地址维护的每个配置变量的最佳实践。
WARM_ENI_TARGET
使用 WARM_ENI_TARGET 变量来确定 L-IPAMD 有多少弹性网络接口可用。这样一来,当容器组(pod)在节点上调度时,可以立即为其分配一个 IP 地址。
以下是 WARM_ENI_TARGET 的最佳实践:
- 检查 Worker 节点实例类型以及每个接口的最大网络接口和私有 IPv4 地址数。这样可以防止可用子网 IP 地址耗尽。
- 如果您希望应用程序能够大幅扩展,请使用 WARM_ENI_TARGET 来快速容纳新调度的容器组(pod)。
WARM_IP_TARGET
使用 WARM_IP_TARGET 变量来确保 L-IPAMD 的温水池中始终有确定数量的可用 IP 地址。
以下是 WARM_IP_TARGET 的最佳实践:
- 对于生产率低的集群,使用 WARM_IP_TARGET。这意味着仅为网络接口分配所需数量的 IP 地址。
- 不要将此设置用于大型集群,或者当集群的容器组(pod)流失率较高时。此设置可能会导致对 Amazon Elastic Compute Cloud(Amazon EC2)API 的更多调用,并可能限制请求。最佳做法是在使用 WARM_IP_TARGET 时设置MINIMUM_IP_TARGET。
- 最佳做法是当设置了 MINIMUM_IP_TARGET 时,将 WARM_IP_TARGET 设置为大于 0。
MINIMUM_IP_TARGET
使用 MINIMUM_IP_TARGET,确保在创建节点时为其分配最少数量的 IP 地址。此变量通常与 WARM_IP_TARGET 变量一起使用
以下是 MINIMUM_IP_TARGET 的最佳实践:
- 如果您知道每个节点要运行的容器组(pod)的最小数量,那么使用 MINIMUM_IP_TARGET。这可确保分配所需数量的 IP 地址。
- 将此变量设置为 WARM_IP_TARGET,以确保节点上有可用的 IP 地址供将来的容器组(pod)使用。
WARM_PREFIX_TARGET
使用 WARM_PREFIX_TARGET 变量来确保您始终向实例的网络接口添加一定数量的前缀(/28 个 CIDR 块)。您只能将 WARM_PREFIX_TARGET 用于 CNI 版本 1.9.0 或更高版本,并且必须激活Amazon VPC CNI IP 地址前缀分配功能。
以下是 WARM_PREFIX_TARGET 的最佳实践:
-
如果您使用 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_PREFIX_TARGET 的 WARM_IP_TARGET。这样可以避免分配过多的前缀,从而耗尽可用的 IP 地址。
要详细了解这些配置变量如何影响 IP 地址利用率,请参阅 GitHub 网站上的 CNI configuration variables。