

 **協助改進此頁面** 

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

若要為本使用者指南貢獻內容，請點選每個頁面右側面板中的**在 GitHub 上編輯此頁面**連結。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 選擇最佳的 Amazon EC2 節點執行個體類型
<a name="choosing-instance-type"></a>

Amazon EC2 為工作節點提供多種執行個體類型選擇。每個執行個體類型皆提供不同的運算、記憶體、儲存與網路功能。每個執行個體也會依照這些功能分組為執行個體系列。有關清單，請參閱《*Amazon EC2 使用者指南*》中的[可用的執行個體類型](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#AvailableInstanceTypes)。Amazon EKS 發佈了多種 Amazon EC2 AMI 變體以啟用支援。若要確保您選取的執行個體類型與 Amazon EKS 相容，請考慮以下條件。
+ 所有 Amazon EKS AMI 目前不支援 `mac` 系列。
+ Arm 和非加速的 Amazon EKS AMI 不支援 `g3`、`g4`、`inf` 及 `p` 系列。
+ 加速的 Amazon EKS AMI 不支援 `a`、`c`、`hpc`、`m` 及 `t` 系列。
+ 對於 ARM 型執行個體，Amazon Linux 2023 (AL2023) 僅支援使用 Graviton2 或更新版本處理器的執行個體類型。AL2023 不支援 `A1` 執行個體。

在 Amazon EKS 支援的執行個體類型之間進行選擇時，請考慮每種類型的以下功能。

 **節點群組中的執行個體數量**   
一般來說，較少、較大的執行個體更好，特別是在有很多 Daemonsets. 的情況下。每個執行個體都需要對 API 伺服器進行 API 呼叫，因此擁有的執行個體越多，API 伺服器上的負載就越大。

 **作業系統**   
檢閱 [Linux](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html)、[Windows](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/instance-types.html) 以及 [Bottlerocket](https://aws.amazon.com/bottlerocket/faqs/) 支援的執行個體類型。建立 Windows 執行個體前，請檢閱在 [EKS 叢集上部署 Windows 節點](windows-support.md)。

 **硬體架構**   
您需要 x86 還是 Arm？ 部署 Arm 執行個體前，請檢閱 [Amazon EKS 最佳化 Arm Amazon Linux AMI](eks-optimized-ami.md#arm-ami)。您是否需要建置在 Nitro 系統 ([Linux](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html#ec2-nitro-instances) 或 [Windows](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/instance-types.html#ec2-nitro-instances)) 上的執行個體，或具有[加速](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/accelerated-computing-instances.html)功能的執行個體？ 如果您需要加速功能，則只能將 Linux 與 Amazon EKS 搭配使用。

 **Pod 數目上限**   
由於每個 Pod 都指派了自己的 IP 位址，因此執行個體類型支援的 IP 位址數量是決定可在執行個體上執行之 Pod 數量的因素。若要手動確定執行個體類型所能支援的 Pod 數量，請參閱 。  
 [AWS Nitro 系統](https://aws.amazon.com/ec2/nitro/)執行個體類型可選擇性地支援比非 Nitro 系統執行個體類型更多的 IP 地址。然而，並非為執行個體指派的所有 IP 位址都可用於 Pod。要為您的執行個體指派大量的 IP 地址，您必須在叢集中安裝並適當設定 Amazon VPC CNI 附加元件 `1.9.0` 或更新版本。如需詳細資訊，請參閱[將更多 IP 位址指派給具有字首的 Amazon EKS 節點](cni-increase-ip-addresses.md)。要將最大數量的 IP 地址指派給執行個體，您必須在叢集中安裝版本 `1.10.1` 或更新版本的 Amazon VPC CNI 附加元件，並使用 `IPv6` 系列部署叢集。

 **IP 系列**   
在將 `IPv4` 系列用於叢集時，您可以使用任何受支援的執行個體類型，這允許您的叢集將私有 `IPv4` 位址指派給您的 Pod 和服務。但是，如果您想在叢集中使用 `IPv6` 系列，則必須使用 [AWS Nitro 系統](https://aws.amazon.com/ec2/nitro/)執行個體類型或裸機類型。Windows 執行個體僅支援 `IPv4`。您的叢集必須是執行版本 `1.10.1` 或更新版本 Amazon VPC CNI 附加元件的叢集。如需有關使用 `IPv6` 的詳細資訊，請參閱 [了解叢集、Pod 與服務的 IPv6 位址](cni-ipv6.md)。

 **您正在執行的 Amazon VPC CNI 附加元件版本**   
最新版的 [Kubernetes 專用 Amazon VPC CNI 外掛程式](https://github.com/aws/amazon-vpc-cni-k8s)支援[這些執行個體類型](https://github.com/aws/amazon-vpc-cni-k8s/blob/master/pkg/vpc/vpc_ip_resource_limit.go)。您可能需要更新 Amazon VPC CNI 附加元件版本，才能利用最新支援的執行個體類型。如需詳細資訊，請參閱[使用 Amazon VPC CNI 將 IP 指派給 Pod](managing-vpc-cni.md)。最新版本支援與 Amazon EKS 搭配使用的最新功能。舊版不支援所有功能。您可以在 GitHub 上的[變更日誌](https://github.com/aws/amazon-vpc-cni-k8s/blob/master/CHANGELOG.md)檢視不同版本支援的功能。

 **您正在其中建立節點的 AWS 區域**   
並非所有 AWS 區域都提供所有執行個體類型。

 **您是否使用 Pod 的安全群組**   
如果您正在使用 Pod 的安全群組，則僅支援特定的執行個體類型。如需詳細資訊，請參閱[將安全群組指派至個別 Pod](security-groups-for-pods.md)。

## maxPods的判斷方式
<a name="max-pods-precedence"></a>

套用至節點的最終`maxPods`值取決於以特定優先順序互動的數個元件。了解此順序有助於您在自訂 時避免意外行為`maxPods`。

 **優先順序 （從高到低）：**

1.  **受管節點群組強制執行** – 當您使用沒有[自訂 AMI](launch-templates.md#launch-template-custom-ami) 的受管節點群組時，Amazon EKS 會在節點的使用者資料`maxPods`中強制執行 上的上限。對於少於 30 個 vCPUs執行個體，上限為 `110`。對於 vCPUs執行個體，上限為 `250`。此值優先於任何其他`maxPods`組態，包括 `maxPodsExpression`。

1.  **kubelet `maxPods`組態** – 如果您`maxPods`直接在 kubelet 組態中設定 （例如，透過具有自訂 AMI 的啟動範本），則此值優先於 `maxPodsExpression`。

1.  **nodeadm `maxPodsExpression` ** – 如果您在 [https://awslabs.github.io/amazon-eks-ami/nodeadm/doc/examples/#defining-a-max-pods-expression](https://awslabs.github.io/amazon-eks-ami/nodeadm/doc/examples/#defining-a-max-pods-expression)中使用 `NodeConfig`， nodeadm 會評估表達式來計算 `maxPods`。這只有在較高優先順序的來源尚未設定值時才會有效。

1.  **預設 ENI 型計算** – 如果未設定其他值，AMI `maxPods`會根據執行個體類型支援的彈性網路介面和 IP 地址數目來計算。這相當於公式 `(number of ENIs × (IPs per ENI − 1)) + 2`。每個節點`kube-proxy`上執行的 Amazon VPC CNI `+ 2`帳戶，不會使用 Pod IP 地址。

**重要**  
如果您使用受管節點群組並在 `maxPodsExpression`中設定 `NodeConfig`，受管節點群組的強制執行會覆寫您的表達式。若要搭配受管節點群組使用自訂`maxPods`值，您必須在啟動範本中指定自訂 AMI 並`maxPods`直接設定。如需詳細資訊，請參閱[使用啟動範本自訂受管節點](launch-templates.md)。

 **受管節點群組與自我管理節點** 

使用受管節點群組 （沒有自訂 AMI)，Amazon EKS 會將`maxPods`值注入節點的引導使用者資料。這表示：
+ `maxPods` 值一律為上限`110`或`250`取決於執行個體大小。
+ `maxPodsExpression` 您設定的任何 都會被此注入值覆寫。
+ 若要使用不同的`maxPods`值，請在啟動範本中指定自訂 AMI，然後與 `--use-max-pods false`一起傳遞`--kubelet-extra-args '--max-pods=my-value'`至`bootstrap.sh`指令碼。如需範例，請參閱 [使用啟動範本自訂受管節點](launch-templates.md)。

透過自我管理節點，您可以完全控制引導程序。您可以在 `maxPodsExpression`中使用 `NodeConfig`或`--max-pods`直接傳遞至 `bootstrap.sh`。

## EKS 自動模式的考量事項
<a name="_considerations_for_eks_auto_mode"></a>

EKS 自動模式會將節點上的 Pod 數量限制為以下兩者中較低的值：
+ 110 個 Pod 的硬性上限
+ 上述 Pod 最大數量計算的結果。