节点上的 Pod 限制 - AWS EKS
Pod limit on Node - AWS EKS
在 AWS EKS 上
我正在将具有 17 个副本的部署(请求并限制 64Mi 内存)添加到具有 2 个节点类型 t3.small.
的小型集群
使用 kube-system pods 计数,每个节点的总数 运行 pods 为 11,还有 1 个未决,即:
节点 #1:
aws-node-1
coredns-5-1as3
coredns-5-2das
kube-proxy-1
+7 个应用 pod 副本
节点 #2:
aws-node-1
kube-proxy-1
+9 个应用 pod 副本
我知道 t3.small 是一个非常小的例子。我只是想了解是什么限制了我。不是内存请求,我的可用资源不足。
我发现每个节点都有 IP 地址限制,具体取决于实例类型。
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html?shortFooter=true#AvailableIpPerENI.
我没有找到任何其他文档明确说明这限制了 pod 的创建,但我假设它确实如此。
基于table,t3.small可以有12个IPv4地址。如果是这种情况并且这是限制因素,因为我有 11 pods,1 个丢失的 IPv4 地址去了哪里?
每个 EKS 实例的实际最大数量 pods 实际上已在 this document 中列出。
对于 t3.small 个实例,每个实例 11 pods 个。也就是说,您的集群中最多可以有 22 个 pods。其中 6 个 pods 是系统 pods,因此最多还剩下 16 个工作负载 pods。
您正在尝试 运行 17 个工作量 pods,所以它太多了。我猜其中 16 个 pods 已经安排好了,还有 1 个待定。
定义每个实例最大pods个数的formula如下:
N * (M-1) + 2
其中:
- N 是实例类型的弹性网络接口 (ENI) 数量
- M为单网卡IP地址数
因此,对于 t3.small,此计算结果为 3 * (4-1) + 2 = 11
。
this document 中每个实例类型的 N
和 M
的值。
这就是我们停止使用 EKS
以支持 KOPS 部署的自我管理集群的原因。
采用 aws-cni
的 IMO EKS
会导致太多限制,这实际上违背了使用 Kubernetes 的主要好处之一,即有效利用可用资源。
EKS
将系统约束从 CPU / memory
使用转移到网络 IP 限制领域。
Kubernetes 旨在提供高密度、高效地管理资源。 EKS’s
版本并非如此,因为节点可能处于空闲状态,几乎所有内存都可用,但如果 pods > (N * (M-1) + 2)
,集群将无法在其他利用率低的节点上调度 pods .
人们可能会想使用另一个 CNI
,例如 Calico
,但是由于禁止访问主节点,因此仅限于工作节点。这会导致集群有两个网络,并且在尝试访问 K8s API
或使用 Admissions Controllers 时会出现问题。
这确实取决于工作流要求,对我们来说,高 pod 密度、高效利用资源以及完全控制集群是最重要的。
对于在搜索时遇到此问题的任何人 google。请注意,从 2021 年 8 月开始,现在可以使用最新的 AWS CNI 插件增加节点上的最大值 pods,如 here.
所述
使用那里解释的基本配置,t3.medium 节点从最多 17 个 pods 增加到最多 110 个,这足以满足我想要做的事情。
在 AWS EKS 上 我正在将具有 17 个副本的部署(请求并限制 64Mi 内存)添加到具有 2 个节点类型 t3.small.
的小型集群使用 kube-system pods 计数,每个节点的总数 运行 pods 为 11,还有 1 个未决,即:
节点 #1:
aws-node-1
coredns-5-1as3
coredns-5-2das
kube-proxy-1
+7 个应用 pod 副本
节点 #2:
aws-node-1
kube-proxy-1
+9 个应用 pod 副本
我知道 t3.small 是一个非常小的例子。我只是想了解是什么限制了我。不是内存请求,我的可用资源不足。
我发现每个节点都有 IP 地址限制,具体取决于实例类型。
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html?shortFooter=true#AvailableIpPerENI.
我没有找到任何其他文档明确说明这限制了 pod 的创建,但我假设它确实如此。
基于table,t3.small可以有12个IPv4地址。如果是这种情况并且这是限制因素,因为我有 11 pods,1 个丢失的 IPv4 地址去了哪里?
每个 EKS 实例的实际最大数量 pods 实际上已在 this document 中列出。
对于 t3.small 个实例,每个实例 11 pods 个。也就是说,您的集群中最多可以有 22 个 pods。其中 6 个 pods 是系统 pods,因此最多还剩下 16 个工作负载 pods。
您正在尝试 运行 17 个工作量 pods,所以它太多了。我猜其中 16 个 pods 已经安排好了,还有 1 个待定。
定义每个实例最大pods个数的formula如下:
N * (M-1) + 2
其中:
- N 是实例类型的弹性网络接口 (ENI) 数量
- M为单网卡IP地址数
因此,对于 t3.small,此计算结果为 3 * (4-1) + 2 = 11
。
this document 中每个实例类型的 N
和 M
的值。
这就是我们停止使用 EKS
以支持 KOPS 部署的自我管理集群的原因。
采用 aws-cni
的 IMO EKS
会导致太多限制,这实际上违背了使用 Kubernetes 的主要好处之一,即有效利用可用资源。
EKS
将系统约束从 CPU / memory
使用转移到网络 IP 限制领域。
Kubernetes 旨在提供高密度、高效地管理资源。 EKS’s
版本并非如此,因为节点可能处于空闲状态,几乎所有内存都可用,但如果 pods > (N * (M-1) + 2)
,集群将无法在其他利用率低的节点上调度 pods .
人们可能会想使用另一个 CNI
,例如 Calico
,但是由于禁止访问主节点,因此仅限于工作节点。这会导致集群有两个网络,并且在尝试访问 K8s API
或使用 Admissions Controllers 时会出现问题。
这确实取决于工作流要求,对我们来说,高 pod 密度、高效利用资源以及完全控制集群是最重要的。
对于在搜索时遇到此问题的任何人 google。请注意,从 2021 年 8 月开始,现在可以使用最新的 AWS CNI 插件增加节点上的最大值 pods,如 here.
所述使用那里解释的基本配置,t3.medium 节点从最多 17 个 pods 增加到最多 110 个,这足以满足我想要做的事情。