

 **協助改進此頁面** 

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

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

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

# 為 EKS 自動模式建立節點集區
<a name="create-node-pool"></a>

Amazon EKS 節點集區提供了彈性的方式來管理 Kubernetes 叢集中的運算資源。本主題示範如何使用 Karpenter 建立和設定節點集區，這是一種有助於最佳化叢集擴展與資源使用率的節點佈建工具。透過 Karpenter 的 NodePool 資源，您可以為運算資源定義特定要求，包括執行個體類型、可用區域、架構和容量類型。

您無法修改內建 `system` 和 `general-purpose` 節點集區。您僅可以啟用或停用它們。如需詳細資訊，請參閱 [啟用或停用內建的 NodePool](set-builtin-node-pools.md)。

NodePool 規格透過各種支援的標籤和要求，允許對 EKS 叢集的運算資源進行精細控制。這些選項包括指定 EC2 執行個體類別、CPU 組態、可用區域、架構 (ARM64/AMD64) 及容量類型 (Spot 或隨需)。您還可以為 CPU 和記憶體用量設定資源限制，確保您的叢集保持在所需的操作範圍內。

EKS 自動模式利用眾所周知的 Kubernetes 標籤，提供一致且標準化的方式來識別節點特性。這些標籤遵循既定的 Kubernetes 慣例，例如用於可用區域的 `topology.kubernetes.io/zone` 和用於 CPU 架構的 `kubernetes.io/arch`。此外，EKS 特定標籤 (字首為 `eks.amazonaws.com/`) 使用 AWS 特定屬性延伸此功能，例如執行個體類型、CPU 製造商、GPU 功能和聯網規格。這種標準化的標籤系統可讓您與現有的 Kubernetes 工具無縫整合，同時提供深度 AWS 基礎結構整合。

## 建立 NodePool
<a name="_create_a_nodepool"></a>

請遵循以下步驟為您的 Amazon EKS 叢集建立 NodePool：

1. 使用所需的 NodePool 組態建立名為 `nodepool.yaml` 的 YAML 檔案。您可以使用以下範例組態。

1. 將 NodePool 套用至您的叢集：

   ```
   kubectl apply -f nodepool.yaml
   ```

1. 確認已成功建立 NodePool：

   ```
   kubectl get nodepools
   ```

1. (選用) 監控 NodePool 狀態：

   ```
   kubectl describe nodepool default
   ```

確保您的 NodePool 參照了叢集中存在的有效 NodeClass。NodeClass 為您的運算資源定義了特定於 AWS 的組態。如需詳細資訊，請參閱 [建立 Amazon EKS 的節點類別](create-node-class.md)。

## 範例 NodePool
<a name="_sample_nodepool"></a>

```
apiVersion: karpenter.sh/v1
kind: NodePool
metadata:
  name: my-node-pool
spec:
  template:
    metadata:
      labels:
        billing-team: my-team
    spec:
      nodeClassRef:
        group: eks.amazonaws.com
        kind: NodeClass
        name: default

      requirements:
        - key: "eks.amazonaws.com/instance-category"
          operator: In
          values: ["c", "m", "r"]
        - key: "eks.amazonaws.com/instance-cpu"
          operator: In
          values: ["4", "8", "16", "32"]
        - key: "topology.kubernetes.io/zone"
          operator: In
          values: ["us-west-2a", "us-west-2b"]
        - key: "kubernetes.io/arch"
          operator: In
          values: ["arm64", "amd64"]

  limits:
    cpu: "1000"
    memory: 1000Gi
```

## EKS 自動模式支援的標籤
<a name="auto-supported-labels"></a>

EKS 自動模式支援下列眾所周知的標籤。

**注意**  
EKS 自動模式使用與 Karpenter 不同的標籤。與 EC2 受管執行個體相關的標籤以 `eks.amazonaws.com` 開頭。


| 標籤 | 範例 | 描述 | 
| --- | --- | --- | 
|  topology.kubernetes.io/zone  |  us-east-2a  |   AWS 區域  | 
|  node.kubernetes.io/instance-type  |  g4dn.8xlarge  |   AWS 執行個體類型  | 
|  kubernetes.io/arch  |  amd64  |  架構由執行個體上的 [GOARCH 值](https://github.com/golang/go/blob/master/src/internal/syslist/syslist.go#L58)定義  | 
|  karpenter.sh/capacity-type  |  spot  |  容量類型包括 `spot`、`on-demand`  | 
|  eks.amazonaws.com/instance-hypervisor  |  nitro  |  使用特定 Hypervisor 的執行個體類型  | 
|  eks.amazonaws.com/compute-type  |  auto  |  識別 EKS 自動模式受管節點  | 
|  eks.amazonaws.com/instance-encryption-in-transit-supported  |  true  |  支援 (或不支援) 傳輸中加密的執行個體類型  | 
|  eks.amazonaws.com/instance-category  |  g  |  相同類別的執行個體類型，通常為產生編號之前的字串  | 
|  eks.amazonaws.com/instance-generation  |  4  |  執行個體類別內的執行個體類型產生編號  | 
|  eks.amazonaws.com/instance-family  |  g4dn  |  屬性類似，但資源數量不同的執行個體類型  | 
|  eks.amazonaws.com/instance-size  |  8xlarge  |  資源數量類似，但屬性不同的執行個體類型  | 
|  eks.amazonaws.com/instance-cpu  |  32  |  執行個體上的 CPU 數量  | 
|  eks.amazonaws.com/instance-cpu-manufacturer  |   `aws`   |  CPU 製造商的名稱  | 
|  eks.amazonaws.com/instance-memory  |  131072  |  執行個體上的記憶體 MiB 數  | 
|  eks.amazonaws.com/instance-ebs-bandwidth  |  9500  |  執行個體上可用 EBS 的[最大 MiB ](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-optimized.html#ebs-optimization-performance)數  | 
|  eks.amazonaws.com/instance-network-bandwidth  |  131072  |  執行個體上可用的[基準兆位](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-network-bandwidth.html)數  | 
|  eks.amazonaws.com/instance-gpu-name  |  t4  |  執行個體上的 GPU 名稱 (如有)  | 
|  eks.amazonaws.com/instance-gpu-manufacturer  |  nvidia  |  GPU 製造商的名稱  | 
|  eks.amazonaws.com/instance-gpu-count  |  1  |  執行個體上的 GPU 數  | 
|  eks.amazonaws.com/instance-gpu-memory  |  16384  |  GPU 上的記憶體 MiB 數  | 
|  eks.amazonaws.com/instance-local-nvme  |  900  |  執行個體上本機 nvme 儲存體的 GiB 數  | 

**注意**  
EKS 自動模式僅支援特定執行個體，且具有最小大小需求。如需詳細資訊，請參閱 [EKS 自動模式支援的執行個體參考](automode-learn-instances.md#auto-supported-instances)。

## EKS 自動模式不支援的標籤
<a name="_eks_auto_mode_not_supported_labels"></a>

EKS 自動模式不支援以下標籤。
+ EKS 自動模式僅支援 Linux
  +  `node.kubernetes.io/windows-build` 
  +  `kubernetes.io/os` 

## 停用內建節點集區
<a name="_disable_built_in_node_pools"></a>

如果您建立了自訂節點集區，可以停用內建節點集區。如需詳細資訊，請參閱 [啟用或停用內建的 NodePool](set-builtin-node-pools.md)。

## 沒有內建節點集區的叢集
<a name="_cluster_without_built_in_node_pools"></a>

您可建立沒有內建節點集區的叢集。當您的組織已建立自訂節點集區時，這會很有幫助。

**注意**  
當您建立沒有內建節點集區的叢集時，`default` NodeClass 不會自動佈建。您需要建立自訂的 NodeClass。如需詳細資訊，請參閱 [建立 Amazon EKS 的節點類別](create-node-class.md)。

 **概觀** 

1. 建立 EKS 叢集，其 `nodePools` 和 `nodeRoleArn` 值均為空。
   + 範例 eksctl `autoModeConfig`：

     ```
     autoModeConfig:
       enabled: true
       nodePools: []
       # Do not set a nodeRoleARN
     ```

     如需詳細資訊，請參閱[使用 eksctl CLI 建立 EKS 自動模式叢集](automode-get-started-eksctl.md) 

1. 使用節點角色 ARN 建立自訂節點類別
   + 如需詳細資訊，請參閱[建立 Amazon EKS 的節點類別](create-node-class.md) 

1. 為自訂節點類別建立存取項目
   + 如需詳細資訊，請參閱[建立節點類別存取項目](create-node-class.md#auto-node-access-entry) 

1. 如上所述，建立自訂節點集區。

## 中斷
<a name="_disruption"></a>

您可透過多種方式設定 EKS 自動模式，以透過您的 NodePool 來中斷節點。您可以使用 `spec.disruption.consolidationPolicy`、`spec.disruption.consolidateAfter` 或 `spec.template.spec.expireAfter`。您還可以透過 NodePool 的 `spec.disruption.budgets` 來限制 EKS 自動模式的中斷速率。您還可以控制時間範圍和同時中斷的節點數量。有關設定此行為的說明，請參閱 Karpenter 文件中的[中斷](https://karpenter.sh/docs/concepts/disruption/)。

您可將節點集區的中斷設定為：
+ 識別執行個體未得到充分利用的時間，並合併工作負載。
+ 建立節點集區中斷預算，以限制因偏離、空置和合併而導致的節點終止速率。

根據預設，EKS 自動模式：
+ 合併未充分利用的執行個體。
+ 在 336 小時後終止執行個體。
+ 設定單一中斷預算為節點的 10%。
+ 當新的自動模式 AMI 發布時，允許因偏離而取代節點，這大約每週發生一次。

## 終止寬限期
<a name="_termination_grace_period"></a>

當 `terminationGracePeriod` 未在 EKS Auto NodePool 上明確定義時，系統會自動將預設的 24 小時終止寬限期套用到關聯的 NodeClaim。雖然 EKS Auto 不會在其自訂 NodePool 組態中看到預設的 `terminationGracePeriod`，但他們會在 NodeClaim 上觀察到此預設值。無論寬限期是在 NodePool 上明確設定，還是在 NodeClaim 上預設，功能都保持一致，確保了叢集中可預測的節點終止行為。