提高 Amazon EC2 节点的可用 IP 地址数量
每个 Amazon EC2 实例支持最大数量的弹性网络接口以及可分配给每个网络接口的最大数量的 IP 地址。每个节点的每个网络接口都需要一个 IP 地址。可以将所有其他可用 IP 地址分配给 Pods
。每个都 Pod
需要自己的 IP 地址。因此,您的节点可能有可用的计算和内存资源,但无法容纳其他 Pods
,因为该节点已用完分配给 Pods
的 IP 地址。
在本主题中,您将学习如何通过分配 IP 前缀而不是为节点分配单个辅助 IP 地址来显著增加节点可以分配给 Pods
的 IP 地址数量。每个前缀都包含多个 IP 地址。如果您没有为集群配置 IP 前缀分配,则您的集群必须进行更多 Amazon EC2 应用程序编程接口(API)调用才能配置 Pod 连接所需的网络接口和 IP 地址。随着集群规模的扩大,这些 API 调用的频率可能会导致 Pod 和实例启动时间延长。这会导致扩展延迟以满足大型和尖峰工作负载的需求,并增加成本和管理开销,因为您需要配置额外的集群和 VPC 来满足扩展需求。有关更多信息,请参阅 GitHub 上的 Kubernetes 可扩展性阈值
注意事项
-
每种 Amazon EC2 实例类型支持最大数量的 Pods。如果您的托管节点组由多种实例类型组成,则集群中某个实例的最大 Pods 数量的最小值将应用于集群中的所有节点。
-
默认情况下,可以在节点上运行的最大
Pods
数量为 110,但您可以更改该数字。如果您更改该数量并且有现有的托管节点组,则节点组的下一次 AMI 或启动模板更新会导致新节点出现时使用更改后的值。 -
从分配 IP 地址过渡到分配 IP 前缀时,建议您创建新的节点组以增加可用 IP 地址的数量,而不是滚动替换现有节点。在同时分配 IP 地址和前缀的节点上运行 Pods 可能会导致通告的 IP 地址容量不一致,从而影响节点上未来的工作负载。有关执行过渡的推荐方式,请参阅 Amazon EKS 最佳实践指南中的在从辅助 IP 模式迁移到前缀委派模式期间替换所有节点(反之亦然)
。 -
仅适用于具有 Linux 节点的集群。
-
将附加组件配置为向网络接口分配前缀后,您将无法在不删除集群所有节点组中的所有节点的情况下将 Amazon VPC CNI plugin for Kubernetes 附加组件版本降级到
1.9.0
(或1.10.1
)以下。 -
如果您的 Pods 在与 VPC 外部的端点通信的同时使用了 Pods 的安全组(
POD_SECURITY_GROUP_ENFORCING_MODE
=standard
和AWS_VPC_K8S_CNI_EXTERNALSNAT
=false
),则使用节点的安全组,而不是您分配给 Pods 的任何安全组。如果您的
Pods
在与 VPC 外部的端点通信的同时使用了 Pods 的安全组 (POD_SECURITY_GROUP_ENFORCING_MODE
=strict
),则使用Pod's
安全组。
-
先决条件
-
现有集群。要部署一个角色,请参阅 创建 Amazon EKS 集群。
-
您的 Amazon EKS 节点所在的子网必须有足够的连续
/28
(适用于IPv4
集群)或/80
(适用于IPv6
集群)无类别域间路由 (CIDR) 块。IPv6
集群中只能有 Linux 节点。如果 IP 地址分散在整个子网 CIDR 中,则使用 IP 前缀可能会失败。建议执行下列操作:-
使用子网 CIDR 预留,这样即使保留范围内的任何 IP 地址仍在使用,在其释放后,这些 IP 地址也不会重新分配。这样可以确保前缀在不分段的情况下进行分配。
-
使用专门用于运行分配 IP 前缀的工作负载的新子网。分配 IP 前缀时,Windows 和 Linux 工作负载可以在同一个子网中运行。
-
-
要为节点分配 IP 前缀,您的节点必须基于 AWS Nitro。不基于 Nitro 的实例会继续分配单个辅助 IP 地址,但分配给 Pods 的 IP 地址数量比 Nitro-based 实例少得多。
-
仅适用于具有 Linux 节点的集群 - 如果您的集群是针对
IPv4
系列配置的,则必须安装 Amazon VPC CNI plugin for Kubernetes 附加组件的1.9.0
版或更高版本。您可以使用以下命令检查当前版本。kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2
如果您的集群是针对
IPv6
系列配置的,则必须安装附加组件的1.10.1
版。如果您的插件版本低于所需版本,则必须进行更新。想要了解更多信息,请参阅 使用 Amazon VPC CNI plugin for Kubernetes Amazon EKS 附加组件 的更新部分。 -
仅适用于具有 Windows 节点的集群
-
您的集群及其平台版本必须等于或高于下表中的版本。要升级集群版本,请参阅 更新 Amazon EKS 集群 Kubernetes 版本。如果您的集群未达到最低平台版本,则在 Amazon EKS 更新您的平台版本之前,您无法为节点分配 IP 前缀。
Kubernetes 版本 平台版本 1.27
eks.3
1.26
eks.4
1.25
eks.5
您可以通过将以下命令中的
替换为集群名称,然后运行修改后的命令来检查当前 Kubernetes 和平台版本:my-cluster
aws eks describe-cluster --name
。my-cluster
--query 'cluster.{"Kubernetes Version": version, "Platform Version": platformVersion}' -
为集群启用 Windows 支持。有关更多信息,请参阅为 Amazon EKS 集群启用 Windows 支持。
-
提高 Amazon EC2 节点的可用 IP 地址数量的步骤
-
配置集群以将 IP 地址前缀分配给节点。在与节点的操作系统相匹配的选项卡上完成步骤。
-
节点部署完成后,请查看集群中的节点。
kubectl get nodes
示例输出如下。
NAME STATUS ROLES AGE VERSION ip-
192-168-22-103
.region-code
.compute.internal Ready <none>19m
v1.XX.X-eks-6b7464
ip-192-168-97-94
.region-code
.compute.internal Ready <none>19m
v1.XX.X-eks-6b7464
-
描述其中一个节点以确定该节点的
max-pods
值和可用 IP 地址数量。将
替换为之前输出中返回的其中一个节点名称中的192.168.30.193
IPv4
地址。kubectl describe node ip-
192-168-30-193
.region-code
.compute.internal | grep 'pods\|PrivateIPv4Address'示例输出如下。
pods:
110
vpc.amazonaws.com/PrivateIPv4Address:144
在先前的输出中,
110
是 Kubernetes 将部署到节点的最大 Pods 数量,尽管有144
个 IP 地址可用。