簡體   English   中英

節點上的 Pod 限制 - AWS EKS

[英]Pod limit on Node - AWS EKS

在 AWS EKS 上,我將具有 17 個副本(請求和限制 64Mi 內存)的部署添加到具有 2 個節點類型 t3.small 的小型集群。

使用 kube-system pod 計算,每個節點運行的 pod 總數為 11,其中 1 個處於待處理狀態,即:

節點#1:
aws-node-1
coredns-5-1as3
coredns-5-2das
kube-proxy-1
+7 app pod 副本

節點#2:
aws-node-1
kube-proxy-1
+9 app pod 副本

我知道 t3.small 是一個非常小的實例。 我只是想了解是什么限制了我。 Memory 請求不是嗎,我的可用資源太少了。

我發現每個節點有 IP 個地址限制,具體取決於實例類型。 https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html?shortFooter=true#AvailableIpPerENI
我沒有找到任何其他文檔明確說明這限制了 pod 的創建,但我假設它確實如此。 根據該表,t3.small 可以有 12 個 IPv4 地址。 如果是這種情況並且這是限制因素,因為我有 11 個 pod,那么 1 個缺少 IPv4 地址 go 在哪里?

本文檔中實際列出了每個 EKS 實例的實際最大 Pod 數。

對於 t3.small 實例,每個實例是 11 個 Pod。 也就是說,您的集群中最多可以有 22 個 Pod。 其中 6 個 Pod 是系統 Pod,因此最多保留 16 個工作負載 Pod。

您正在嘗試運行 17 個工作負載 Pod,所以它太多了。 我猜這些 Pod 中有 16 個已安排好,還有 1 個待處理。


定義每個實例的最大 Pod 數的公式如下:

N * (M-1) + 2

在哪里:

  • N 是實例類型的彈性網絡接口 (ENI) 的數量
  • M為單個網卡的IP地址數

所以,對於 t3.small,這個計算是3 * (4-1) + 2 = 11

本文檔中每種實例類型的NM值。

這就是我們停止使用EKS以支持 KOPS 部署的自我管理集群的原因。 使用aws-cni IMO EKS造成了太多限制,它實際上違背了使用 Kubernetes 的主要好處之一,即有效利用可用資源。 EKS將系統約束從CPU / memory使用轉移到網絡 IP 限制領域。

Kubernetes 旨在提供高密度、高效管理資源。 EKS's版本並非如此,因為節點可能處於空閑狀態,幾乎其整個內存都可用,但如果pods > (N * (M-1) + 2) ,集群將無法在其他低利用率節點上調度 pods .

人們可能會嘗試使用另一種CNI例如Calico ,但是由於禁止訪問主節點,因此將僅限於工作節點。 這會導致集群有兩個網絡,並且在嘗試訪問K8s API或使用招生控制器時會出現問題。

這確實取決於工作流程要求,對我們來說,高 Pod 密度、有效利用資源以及完全控制集群是最重要的。

對於在搜索谷歌時遇到這個問題的任何人。 注意,作為2021八月它現在可以采用最新的AWS CNI插件描述增加一個節點上的最大莢這里

使用那里解釋的基本配置,t3.medium 節點從最多 17 個 pod 增加到最多 110 個,這對於我嘗試做的事情來說已經足夠了。

連接到您的 EKS 節點

運行這個

/etc/eks/bootstrap.sh clusterName --use-max-pods false  --kubelet-extra-args '--max-pods=50'

忽略 nvidia-smi 未找到 output

整個腳本位置https://github.com/awslabs/amazon-eks-ami/blob/master/files/bootstrap.sh

EKS 允許增加每個節點的最大 pod 數量,但這只能通過 Nitro 實例來完成。 這里查看列表

  • 確保你有 VPC CNI 1.9+

  • 為 VPC_CNI 插件啟用前綴委托

    kubectl set env daemonset aws-node -n kube-system ENABLE_PREFIX_DELEGATION=true

  • 如果您使用的是self managed的節點組,請確保在BootstrapArguments中傳遞以下內容--use-max-pods false --kubelet-extra-args '--max-pods=110'

    • 或者您可以使用 eksctl 創建節點組,使用eksctl eksctl create nodegroup --cluster my-cluster --managed=false --max-pods-per-node 110
  • 如果您使用具有指定 AMI 的managed節點組,它有bootstrap.sh ,因此您可以修改user_data來執行類似這樣/etc/eks/bootstrap.sh my-cluster \ --use-max-pods false \ --kubelet-extra-args '--max-pods=110'

    • 或者通過運行簡單地使用eksctl

    eksctl create nodegroup --cluster my-cluster --max-pods-per-node 110

有關詳細信息,請查看 AWS 文檔https://docs.aws.amazon.com/eks/latest/userguide/cni-increase-ip-addresses.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM