

 **協助改進此頁面** 

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

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

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

# 透過受管節點群組來簡化節點生命週期
<a name="managed-node-groups"></a>

Amazon EKS 受管節點群組會自動化 Amazon EKS Kubernetes 叢集節點 (Amazon EC2 執行個體) 的佈建和生命週期管理。

使用 Amazon EKS 受管節點群組時，不需要個別佈建或註冊提供運算容量的 Amazon EC2 執行個體，來執行 Kubernetes 應用程式。您可以透過單一操作來建立、自動更新或終止叢集的節點。節點更新和終止會自動耗盡節點，以確保您的應用程式保持可用。

每個受管節點均會佈建為 Amazon EKS 為您管理的 Amazon EC2 Auto Scaling 群組的一部分。包括執行個體和 Auto Scaling 群組在內的每個資源都會在您的 AWS 帳戶中執行。每個節點群組都可以跨您定義的多個可用區域執行。

受管節點群組還可以選擇性地利用節點自動修復，進而持續監控節點的運作狀態。它會自動對偵測到的問題進行回應，並盡可能取代節點。此功能有助於提高叢集的整體可用性，並且盡可能減少手動介入。如需詳細資訊，請參閱[偵測節點運作狀態問題並啟用自動節點修復](node-health.md)。

您可以使用 Amazon EKS 主控台、`eksctl`、 AWS CLI、 AWS API 或基礎設施做為程式碼工具，包括 AWS CloudFormation，將受管節點群組新增至新的或現有的叢集。以受管節點群組身分啟動的節點，會自動標記以供 Kubernetes [Cluster Autoscaler](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/README.md) 自動探索。您可以使用節點群組將 Kubernetes 標籤套用至節點，並隨時加以更新。

使用 Amazon EKS 受管節點群組無需額外費用，您只需為佈建 AWS 的資源付費。其中包括 Amazon EC2 執行個體、Amazon EBS 磁碟區、Amazon EKS 叢集時數，以及任何其他 AWS 基礎設施。沒有最低費用，也沒有前期承諾。

若要開始使用新的 Amazon EKS 叢集和受管節點群組，請參閱 [開始使用 Amazon EKS – AWS 管理主控台 和 AWS CLI](getting-started-console.md)。

若要將受管理的節點群組新增至現有叢集，請參閱 [建立叢集的受管節點群組](create-managed-node-group.md)。

## 受管節點群組概念
<a name="managed-node-group-concepts"></a>
+ Amazon EKS 受管節點群組會為您建立和管理 Amazon EC2 執行個體。
+ 每個受管節點均會佈建為 Amazon EKS 為您管理的 Amazon EC2 Auto Scaling 群組的一部分。此外，包括 Amazon EC2 執行個體和 Auto Scaling 群組在內的每個資源都會在您的 AWS 帳戶中執行。
+ Amazon EKS 會定期同步受管節點群組的擴展組態，以符合實際的 Auto Scaling 群組值。如果 Cluster Autoscaler 等外部演員修改 Auto Scaling 群組的大小， 最終`DescribeNodegroup`會反映這些變更。當您啟動節點群組更新或升級而不明確修改擴展組態時，工作流程會使用目前的 Auto Scaling 群組值，而不是節點群組的預存擴展組態。儲存的擴展組態只有在您明確地將其包含在`UpdateNodegroupConfig`請求中時才會優先。
+ 受管節點群組的 Auto Scaling 群組會跨越您在建立群組時指定的每個子網路。
+ Amazon EKS 會標記受管節點群組資源，以便將其設定為使用 Kubernetes [Cluster Autoscaler](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/README.md)。
**重要**  
如果您跨越多個由 Amazon EBS 磁碟區提供的可用區域執行狀態應用程式，並且使用 Kubernetes [Cluster Autoscaler](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/README.md)，您應該設定多個節點群組，每個群組的範圍皆為單一可用區域。另外，您應該啟用 `--balance-similar-node-groups` 功能。
+ 部署受管節點時，您可以使用自訂啟動範本來獲得更高層級的靈活性和自訂能力。例如，可指定額外的 `kubelet` 引數並使用自訂 AMI。如需詳細資訊，請參閱[使用啟動範本自訂受管節點](launch-templates.md)。如果在第一次建立受管節點群組時未使用自訂啟動範本，會有一個自動產生的啟動範本。請勿手動修改此自動產生的範本，否則會發生錯誤。
+ Amazon EKS 會遵循受管節點群組上 CVE 和安全修補程式的共同責任模型。受管節點執行 Amazon EKS 最佳化 AMI 時，Amazon EKS 負責在報告錯誤或問題時建置 AMI 的修補版本。我們可以發佈修正程式。不過，您必須負責將這些修補的 AMI 版本部署至受管節點群組。當受管節點執行自訂 AMI 時，您必須負責在報告錯誤或問題時建置 AMI 的修補版本，然後部署 AMI。如需詳細資訊，請參閱[更新叢集的受管節點群組](update-managed-node-group.md)。
+ Amazon EKS 受管節點群組可以在公有和私有子網路中啟動。如果在 2020 年 4 月 22 日或之後啟動公有子網路中的受管節點群組，則子網路必須將 `MapPublicIpOnLaunch` 設定為「true」，執行個體才能成功加入叢集。如果公有子網路是在 2020 年 3 月 26 日或之後使用 `eksctl`或 [Amazon EKS vended AWS CloudFormation 範本](creating-a-vpc.md)建立，則此設定已設為 true。如果公有子網路是在 2020 年 3 月 26 日之前所建立，則必須手動變更設定。如需詳細資訊，請參閱[修改子網的公有 IPv4 定址屬性](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html#subnet-public-ip)。
+ 在私有子網路中部署受管節點群組時，您必須確保該群組可存取 Amazon ECR 以提取容器映像。您可以透過將 NAT 閘道連接至子網路的路由表，或新增以下 [AWS PrivateLink VPC 端點](https://docs.aws.amazon.com/AmazonECR/latest/userguide/vpc-endpoints.html#ecr-setting-up-vpc-create)來執行此操作：
  + Amazon ECR API 端點界面 – `com.amazonaws.{{region-code}}.ecr.api` 
  + Amazon ECR Docker 登錄檔 API 端點界面 – `com.amazonaws.{{region-code}}.ecr.dkr` 
  + Amazon S3 閘道端點 – `com.amazonaws.{{region-code}}.s3` 

  如需了解其他常用的服務和端點，請參閱 [部署網際網路存取受到限制的私有叢集](private-clusters.md)。
+ 受管節點群組無法部署在 [AWS Outposts](eks-outposts.md) 上或 [AWS Wavelength](https://docs.aws.amazon.com/wavelength/) 中。受管節點群組可建立在 [AWS Local Zones](https://aws.amazon.com/about-aws/global-infrastructure/localzones/) 上。如需詳細資訊，請參閱[使用 AWS Local Zones 啟動低延遲 EKS 叢集](local-zones.md)。
+ 您可以在單一叢集內建立多個受管節點群組。例如，您可以針對某些工作負載建立具有標準 Amazon EKS 最佳化 Amazon Linux AMI 的節點群組，而針對需要 GPU 支援的工作負載使用 GPU 變體建立另一個節點群組。
+ 如果受管節點群組遇到 [Amazon EC2 執行個體狀態檢查](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/monitoring-system-instance-status-check.html)故障問題，Amazon EKS 會傳回錯誤代碼，以協助您診斷問題。如需詳細資訊，請參閱[受管節點群組錯誤代碼](troubleshooting.md#troubleshoot-managed-node-groups)。
+ Amazon EKS 會將 Kubernetes 標籤新增至受管節點群組執行個體。這些 Amazon EKS 提供的標籤前面會加上 `eks.amazonaws.com`。
+ 在終止或更新期間，Amazon EKS 會使用 Kubernetes API 自動耗盡節點。
+ 使用 `AZRebalance` 終止節點或減少所需的節點計數時，不會遵守 Pod 中斷預算。這些動作會嘗試在該節點上移出 Pod。但如果需要超過 15 分鐘，則無論節點上的所有 Pod 是否終止，都會終止節點。若要延長期間直到節點終止，請將 lifecycle hook 新增至 Auto Scaling 群組。如需詳細資訊，請參閱 *Amazon EC2 Auto Scaling 使用者指南*中的[新增 lifecycle hook](https://docs.aws.amazon.com/autoscaling/ec2/userguide/adding-lifecycle-hooks.html)。
+ 若要在收到 Spot 中斷通知或容量重新平衡通知後正確執行耗盡程序，必須將 `CapacityRebalance` 設定為 `true`。
+ 更新受管節點群組會遵守您為 Pod 設定的 Pod 中斷預算。如需詳細資訊，請參閱 [了解節點更新的每個階段](managed-node-update-behavior.md)。
+ 使用 Amazon EKS 受管節點群組不會產生額外成本。您只需為佈建 AWS 的資源付費。
+ 如果要為節點加密 Amazon EBS 磁碟區，則可以使用啟動範本部署節點。若要在不使用啟動範本的情況下部署具有加密 Amazon EBS 磁碟區的受管節點，請加密帳戶中建立的所有新 Amazon EBS 磁碟區。如需詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的[預設加密](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/EBSEncryption.html#encryption-by-default)。

## 受管節點群組容量類型
<a name="managed-node-group-capacity-types"></a>

建立受管節點群組時，您可以選擇隨需或 Spot 容量類型。Amazon EKS 部署具有 Amazon EC2 Auto Scaling 群組的受管節點群組，該群組僅包含隨需執行個體或僅包含 Amazon EC2 Spot 執行個體。您可以將具有容錯能力之應用程式的 Pod 排程到 Spot 受管節點群組，以及將具有容錯能力之應用程式的 Pod 排程到單一 Kubernetes 叢集中的隨需節點群組。依預設，受管節點群組會部署隨需 Amazon EC2 執行個體。

### On-Demand
<a name="managed-node-group-capacity-types-on-demand"></a>

透過隨需執行個體，您只需要按秒數支付運算容量開銷，無需簽訂長期合約。

預設情況下，如果未指定**容量類型**，則會使用隨需執行個體佈建受管節點群組。受管節點群組會代表您設定 Amazon EC2 Auto Scaling 群組，並套用下列設定：
+ 佈建隨需容量的配置策略設定為 `prioritized`。在滿足隨需容量時，受管節點群組會 API 中傳遞執行個體類型的順序，決定先使用哪一種執行個體類型。例如，您可以按照下列順序指定三種執行個體類型：`c5.large`、`c4.large`，以及 `c3.large`。當您的隨需執行個體啟動時，受管節點群組會從 `c5.large` 開始，然後是 `c4.large`，再來是 `c3.large`，以滿足隨需容量。如需詳細資訊，請參閱《Amazon EC2 Auto Scaling 使用者指南》**中的 [Amazon EC2 Auto Scaling 群組](https://docs.aws.amazon.com/autoscaling/ec2/userguide/asg-purchase-options.html#asg-allocation-strategies)。
+ Amazon EKS 會將下列 Kubernetes 標籤新增至指定容量類型之受管節點群組中的所有節點：`eks.amazonaws.com/capacityType: ON_DEMAND`。您可以使用此標籤，在隨需節點上排程可設定狀態或可容錯的應用程式。

### Spot
<a name="managed-node-group-capacity-types-spot"></a>

Amazon EC2 Spot 執行個體是備用的 Amazon EC2 容量，可提供隨需價格的極低折扣。EC2 需要取回容量時，就可能會以兩分鐘中斷通知的方式中斷 Amazon EC2 Spot 執行個體。如需詳細資訊，請參閱《*Amazon EC2 使用者指南*》中的[Spot 執行個體](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-spot-instances.html)。您可以使用 Amazon EC2 Spot 執行個體設定受管節點群組，以最佳化 Amazon EKS 叢集中執行之運算節點的成本。

若要在受管節點群組內使用 Spot 執行個體，請將容量類型設定為`spot`，以建立受管節點群組。受管節點群組代表您設定 Amazon EC2 Auto Scaling 群組，並套用下列 Spot 最佳實務：
+ 為確保您的 Spot 節點已在最佳 Spot 容量集區中佈建，配置策略會設定為下列之一：
  +  `price-capacity-optimized` (PCO)：在具有 Kubernetes 版本 `1.28` 或更新版本的叢集中建立新節點群組時，配置策略會設定為 `price-capacity-optimized`。但是，在 Amazon EKS 受管節點群組開始支援 PCO 之前，系統不會變更已使用 `capacity-optimized` 建立的節點群組的配置策略。
  +  `capacity-optimized` (CO)：在具有 Kubernetes 版本 `1.27` 或更低版本的叢集中建立新節點群組時，配置策略會設定為 `capacity-optimized`。

  若要增加可用於配置容量的 Spot 容量集區數量，請將受管節點群組設定為使用多個執行個體類型。
+ 已啟用 Amazon EC2 Spot 容量重新平衡功能，以便 Amazon EKS 可以正常地消耗和重新平衡 Spot 節點，在 Spot 節點中斷風險提高時，將應用程式中斷情況降至最低。如需詳細資訊，請參閱《Amazon EC2 Auto Scaling 使用者指南》中的 [Amazon EC2 Auto Scaling 容量重新平衡](https://docs.aws.amazon.com/autoscaling/ec2/userguide/capacity-rebalance.html)。
  + Spot 節點收到重新平衡建議時，Amazon EKS 會自動嘗試啟動新的替代 Spot 節點。
  + 如果 Spot 兩分鐘中斷通知在取代 Spot 節點處於 `Ready` 狀態前到達，則 Amazon EKS 會開始消耗收到重新平衡建議的 Spot 節點。Amazon EKS 將竭盡全力耗盡節點。因此，無法保證 Amazon EKS 會在耗盡現有節點之前等待替代節點加入叢集。
  + 啟動取代 Spot 節點，並且在 Kubernetes 處於 `Ready` 狀態時，Amazon EKS 會包圍隔離並消耗收到重新平衡建議的 Spot 節點。包圍隔離 Spot 節點可確保服務控制器不會將任何新的請求傳送到此 Spot 節點。它也會從狀況良好、作用中的 Spot 節點清單中移除。耗盡 Spot 節點可確保正在執行的 Pod 可以正常地移出。
+ Amazon EKS 會將下列 Kubernetes 標籤新增至指定容量類型之受管節點群組中的所有節點：`eks.amazonaws.com/capacityType: SPOT`。您可以使用此標籤在 Spot 節點上排程可容錯的應用程式。
**重要**  
EC2 會在終止 [Spot 執行個體的兩分鐘前發出 Spot 中斷通知](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/spot-instance-termination-notices.html)。不過，Spot 節點上的 Pod 可能不會收到正常關閉的完整 2 分鐘時段。當 EC2 發出通知時，Amazon EKS 開始移出 Pod 之前會有延遲。移除會依序發生以保護 Kubernetes API 伺服器，因此在多個同時 Spot 回收期間，某些 Pod 可能會收到延遲的移出通知。Pod 可能會在不接收終止訊號的情況下強制終止，特別是在具有高 Pod 密度的節點上、在並行回收期間或使用長終止寬限期時。對於 Spot 工作負載，我們建議您使用 30 秒或更短的終止寬限期來設計應用程式，避免長時間執行preStop 掛鉤，並監控 Pod 移出指標，以了解叢集中的實際寬限期。對於需要保證正常終止的工作負載，我們建議您改用隨需容量。

決定是否要部署具有隨需或 Spot 容量的節點群組時，應考慮下列條件：
+ Spot 執行個體適用於無狀態、容錯、靈活的應用程式。其中包括批次和機器學習訓練工作負載、大數據 ETL (例如 Apache Spark)、佇列處理應用程式，以及無狀態 API 端點。由於 Spot 是可能隨時間變更的備用 Amazon EC2 容量，因此建議您將 Spot 容量用於可接受中斷的工作負載。更具體地說，Spot 容量適用於容錯期間無法使用所需容量的工作負載。
+ 我們建議您將隨需模式用於不容錯的應用程式。這包括叢集管理工具 (例如監控和操作工具)、需要 `StatefulSets` 的部署，以及狀態應用程式 (例如資料庫)。
+ 為了在使用 Spot 執行個體時最大化應用程式的可用性，建議您將 Spot 受管節點群組設定為使用多個執行個體類型。建議您在使用多個執行個體類型時，套用下列規則：
  + 在受管節點群組中，如果您使用 [Cluster Autoscaler](https://github.com/kubernetes/autoscaler/blob/master/cluster-autoscaler/cloudprovider/aws/README.md)，則建議使用具有相同數量 vCPU 和記憶體資源的彈性執行個體類型集。這是為了確保叢集中的節點如預期般擴展。例如，如果您需要四個 vCPU 和八個 GiB 記憶體，請使用 `c3.xlarge`、`c4.xlarge`、`c5.xlarge`、`c5d.xlarge`、`c5a.xlarge`、`c5n.xlarge` 或其他類似的執行個體類型。
  + 若要增強應用程式可用性，建議部署多個 Spot 受管節點群組。為此，每個群組應該使用具有相同 vCPU 和記憶體資源的彈性執行個體類型集。例如，如果您需要 4 個 vCPU 和 8 個 GiB 記憶體，建議您使用 `c3.xlarge`、`c4.xlarge`、`c5.xlarge`、`c5d.xlarge`、`c5a.xlarge`、`c5n.xlarge` 或其他類似的執行個體類型建立一個受管節點群組，以及使用 `m3.xlarge`、`m4.xlarge`、`m5.xlarge`、`m5d.xlarge`、`m5a.xlarge`、`m5n.xlarge` 或其他類似的執行個體類型建立另一個受管節點。
  + 透過使用自訂啟動範本的 Spot 容量類型部署節點群組時，請使用 API 傳遞多個執行個體類型。請勿透過啟動範本傳遞單一執行個體類型。如需使用啟動範本部署節點群組的詳細資訊，請參閱 [使用啟動範本自訂受管節點](launch-templates.md)。