協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
增加 Amazon EKS 節點的可用 IP 位址數量
您可以透過指派 IP 字首 (而不是將個別的次要 IP 位址指派給節點),大幅增加節點可指派給 Pod 的 IP 位址數量。
先決條件
-
您需要現有的叢集。若要部署叢集,請參閱 建立 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 位址,但要指派給 Pod 的 IP 位址數量遠低於 Nitro 型執行個體。
-
僅適用於具有節點的叢集:如果您的叢集針對
IPv4系列設定,則必須安裝 Kubernetes 專用 Amazon VPC CNI 外掛程式附加元件的版本1.9.0或更新版本。您可以使用下列命令來檢查目前版本:kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2如果您的叢集針對
IPv6系列設定,則必須安裝附加元件的版本1.10.1。如果您的外掛程式版本早於所需版本,則必須對其進行更新。如需詳細資訊,請參閱使用 Amazon VPC CNI 將 IP 指派給 Pod的更新章節。 -
僅適用於具有 Windows 節點的叢集
-
您必須為您的叢集啟用 Windows 支援。如需詳細資訊,請參閱在 EKS 叢集上部署 Windows 節點。
-
將 IP 位址字首指派給節點
設定叢集以將 IP 地址字首指派給節點。完成與節點作業系統相符的程序。
Linux
-
啟用參數以為 Amazon VPC CNI DaemonSet 的網路介面指派字首。當您部署叢集時,Kubernetes 專用 Amazon VPC CNI 外掛程式附加元件的版本
1.10.1或更高版本將與其一起部署。如果您使用IPv6系列建立叢集,則此設定會預設設為true。如果您使用IPv4系列建立叢集,則此設定會預設設為false。kubectl set env daemonset aws-node -n kube-system ENABLE_PREFIX_DELEGATION=true重要
即使子網路有可用的 IP 位址,如果子網路沒有任何可用的連續
/28區塊,您也會在 Kubernetes 專用 Amazon VPC CNI 外掛程式日誌中看到下列錯誤。InsufficientCidrBlocks: The specified subnet does not have enough free cidr blocks to satisfy the request這可能是由分散在子網路上的現有次要 IP 地址的分段造成。若要解決此錯誤,請建立新的子網路並在該處啟動 Pod,或使用 Amazon EC2 子網路 CIDR 保留來保留子網路內的空間,以便與字首指派搭配使用。如需詳細資訊,請參閱《Amazon VPC 使用者指南》中的子網路 CIDR 保留。
-
如果計劃在沒有啟動範本的情況下或使用未在其中指定 AMI ID 的啟動範本來部署受管節點群組,且您使用的是先決條件中列出的 Kubernetes 專用 Amazon VPC CNI 外掛程式版本或更新版本,則請跳至下一個步驟。受管節點群組會自動為您計算 Pod 的數量上限。
如果您要使用已在其中指定 AMI ID 的啟動範本來部署自我管理節點群組或受管節點群組,則必須設定節點的 Pod 數目上限。如需如何判斷適當值的詳細資訊,請參閱 maxPods的判斷方式。
重要
受管節點群組會強制對
maxPods的值執行數量上限。對於少於 30 個 vCPU 的執行個體,數量上限為 110;對於所有其他執行個體,數量上限為 250。無論是否啟用字首委派,都會套用此數量上限。 -
如果您使用針對
IPv6設定叢集,請跳到下一個步驟。在下列其中一個選項中指定參數。要判斷哪個選項適合您,以及提供哪個值,請參閱 GitHub 上的 WARM_PREFIX_TARGET、WARM_IP_TARGET 和 MINIMUM_IP_TARGET
。 您可以用大於零的值取代 example values。
-
WARM_PREFIX_TARGETkubectl set env ds aws-node -n kube-system WARM_PREFIX_TARGET=1 -
WARM_IP_TARGET或MINIMUM_IP_TARGET:如果此值已設定,則其會覆寫為WARM_PREFIX_TARGET設定的任何值。kubectl set env ds aws-node -n kube-system WARM_IP_TARGET=5kubectl set env ds aws-node -n kube-system MINIMUM_IP_TARGET=2
-
-
使用至少一個 Amazon EC2 Nitro Amazon Linux 2023 執行個體類型,建立下列其中一個節點群組類型。如需 Nitro 執行個體類型的清單,請參閱《Amazon EC2 使用者指南》中的建置在 Nitro 系統上的執行個體。Windows 不支援這項功能。對於包含
110的選項,使用步驟 3 的值 (建議) 或您自己的值將其取代。-
自我管理 – 使用建立自我管理的 Amazon Linux 節點中的指示來部署節點群組。建立 CloudFormation 堆疊之前,請開啟範本檔案,並將
UserData中的 調整NodeLaunchTemplate為如下... apiVersion: node.eks.aws/v1alpha1 kind: NodeConfig spec: cluster: name: ${ClusterName} apiServerEndpoint: ${ApiServerEndpoint} certificateAuthority: ${CertificateAuthorityData} cidr: ${ServiceCidr} kubelet: config: maxPods: 110 ...如果使用
eksctl來建立節點群組,便可使用以下命令。eksctl create nodegroup --cluster my-cluster --managed=false --max-pods-per-node 110 -
受管:使用下列其中一個選項,部署節點群組:
-
沒有啟動範本,或有啟動範本,但沒有指定 AMI ID:完成建立叢集的受管節點群組中的程序。受管節點群組會自動為您計算 Amazon EKS 建議
max-pods值。 -
使用具有指定 AMI ID 的啟動範本:在啟動範本中,指定 Amazon EKS 最佳化 AMI ID 或基於 Amazon EKS 最佳化 AMI 的自訂 AMI,然後使用啟動範本部署節點群組,並在啟動範本中提供下列使用者資料。此使用者資料會傳遞
NodeConfig物件,以供節點上的nodeadm工具讀取。如需 的詳細資訊nodeadm,請參閱 nodeadm 文件。 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="//" --// Content-Type: application/node.eks.aws --- apiVersion: node.eks.aws/v1alpha1 kind: NodeConfig spec: cluster: apiServerEndpoint: [.replaceable]`my-cluster` certificateAuthority: [.replaceable]`LS0t...` cidr: [.replaceable]`10.100.0.0/16` name: [.replaceable]`my-cluster kubelet: config: maxPods: [.replaceable]`110` --//--如果使用
eksctl來建立節點群組,便可使用以下命令。eksctl create nodegroup --cluster my-cluster --max-pods-per-node 110如果您建立的自訂 AMI 並非基於 Amazon EKS 最佳化 AMI,則需要自行自訂建立組態。
-
注意
如果您還想要將 IP 位址指派給來自與執行個體不同子網路的 Pod,則需要在此步驟中啟用該功能。如需詳細資訊,請參閱使用自訂聯網在替代子網路中部署 Pod。
-
Windows
-
啟用 IP 字首指派。
-
開啟
amazon-vpc-cniConfigMap進行編輯。kubectl edit configmap -n kube-system amazon-vpc-cni -o yaml -
將下行新增至
data區段:enable-windows-prefix-delegation: "true" -
儲存檔案並關閉編輯器。
-
確認行已新增至
ConfigMap。kubectl get configmap -n kube-system amazon-vpc-cni -o "jsonpath={.data.enable-windows-prefix-delegation}"如果傳回的輸出不是
true,則可能會出現錯誤。請嘗試再次完成該步驟。重要
即使子網路有可用的 IP 位址,如果子網路沒有任何可用的連續
/28區塊,您也會在 Kubernetes 專用 Amazon VPC CNI 外掛程式日誌中看到下列錯誤。InsufficientCidrBlocks: The specified subnet does not have enough free cidr blocks to satisfy the request這可能是由分散在子網路上的現有次要 IP 地址的分段造成。若要解決此錯誤,請建立新的子網路並在該處啟動 Pod,或使用 Amazon EC2 子網路 CIDR 保留來保留子網路內的空間,以便與字首指派搭配使用。如需詳細資訊,請參閱《Amazon VPC 使用者指南》中的子網路 CIDR 保留。
-
-
(選用) 指定其他組態來控制叢集的預先擴展和動態擴展行為。如需詳細資訊,請參閱 GitHub 上的 Windows 上包含字首委派模式的組態選項
。 -
開啟
amazon-vpc-cniConfigMap進行編輯。kubectl edit configmap -n kube-system amazon-vpc-cni -o yaml -
將範例值取代為大於零的值,並將您需要的項目新增至 的
data區段ConfigMap。如果您為warm-ip-target或minimum-ip-target設定了值,則該值會覆寫任何為warm-prefix-target設定的值。warm-prefix-target: "1" warm-ip-target: "5" minimum-ip-target: "2" -
儲存檔案並關閉編輯器。
-
-
建立 Windows 節點群組,其中至少包含一個 Amazon EC2 Nitro 執行個體類型。如需 Nitro 執行個體類型的清單,請參閱《Amazon EC2 使用者指南》中的建置在 Nitro 系統上的執行個體。依預設,您最多可將 110 個 Pod 部署到節點。如果您要增加或減少該數量,請在引導組態的使用者資料中指定以下內容:將
max-pods-quantity取代為您的 max Pod 值。-KubeletExtraArgs '--max-pods=max-pods-quantity'如果您要部署受管節點群組,則需要在啟動範本中新增此組態。如需詳細資訊,請參閱使用啟動範本自訂受管節點。如需有關 Windows 引導指令碼組態參數的詳細資訊,請參閱 引導指令碼組態參數。
確定最大 Pod 和可用的 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 地址的數量。使用上一個輸出中傳回的其中一個節點名稱中的IPv4位址取代192.168.30.193。kubectl describe node ip-192-168-30-193.region-code.compute.internal | grep 'pods\|PrivateIPv4Address'範例輸出如下。
pods: 110 vpc.amazonaws.com/PrivateIPv4Address: 144在先前的輸出中,
110是 Kubernetes 將部署至節點的 Pod 數量上限,即使有144個可用的 IP 位址。