協助改進此頁面
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 GitHub 上編輯此頁面連結。
為 EKS 自動模式建立節點集區
Amazon EKS 節點集區提供了彈性的方式來管理 Kubernetes 叢集中的運算資源。本主題示範如何使用 Karpenter 建立和設定節點集區,這是一種有助於最佳化叢集擴展與資源使用率的節點佈建工具。透過 Karpenter 的 NodePool 資源,您可以為運算資源定義特定要求,包括執行個體類型、可用區域、架構和容量類型。
您無法修改內建 system 和 general-purpose 節點集區。您僅可以啟用或停用它們。如需詳細資訊,請參閱 啟用或停用內建的 NodePool。
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
請遵循以下步驟為您的 Amazon EKS 叢集建立 NodePool:
-
使用所需的 NodePool 組態建立名為
nodepool.yaml的 YAML 檔案。您可以使用以下範例組態。 -
將 NodePool 套用至您的叢集:
kubectl apply -f nodepool.yaml -
確認已成功建立 NodePool:
kubectl get nodepools -
(選用) 監控 NodePool 狀態:
kubectl describe nodepool default
確保您的 NodePool 參照了叢集中存在的有效 NodeClass。NodeClass 為您的運算資源定義了特定於 AWS 的組態。如需詳細資訊,請參閱 建立 Amazon EKS 的節點類別。
範例 NodePool
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 自動模式支援的標籤
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 值 |
|
karpenter.sh/capacity-type |
spot |
容量類型包括 |
|
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 |
|
CPU 製造商的名稱 |
|
eks.amazonaws.com/instance-memory |
131072 |
執行個體上的記憶體 MiB 數 |
|
eks.amazonaws.com/instance-ebs-bandwidth |
9500 |
執行個體上可用 EBS 的最大 MiB 數 |
|
eks.amazonaws.com/instance-network-bandwidth |
131072 |
執行個體上可用的基準兆位數 |
|
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 自動模式支援的執行個體參考。
EKS 自動模式不支援的標籤
EKS 自動模式不支援以下標籤。
-
EKS 自動模式僅支援 Linux
-
node.kubernetes.io/windows-build -
kubernetes.io/os
-
停用內建節點集區
如果您建立了自訂節點集區,可以停用內建節點集區。如需詳細資訊,請參閱 啟用或停用內建的 NodePool。
沒有內建節點集區的叢集
您可建立沒有內建節點集區的叢集。當您的組織已建立自訂節點集區時,這會很有幫助。
注意
當您建立沒有內建節點集區的叢集時,default NodeClass 不會自動佈建。您需要建立自訂的 NodeClass。如需詳細資訊,請參閱 建立 Amazon EKS 的節點類別。
概觀
-
建立 EKS 叢集,其
nodePools和nodeRoleArn值均為空。-
範例 eksctl
autoModeConfig:autoModeConfig: enabled: true nodePools: [] # Do not set a nodeRoleARN如需詳細資訊,請參閱使用 eksctl CLI 建立 EKS 自動模式叢集
-
-
使用節點角色 ARN 建立自訂節點類別
-
如需詳細資訊,請參閱建立 Amazon EKS 的節點類別
-
-
為自訂節點類別建立存取項目
-
如需詳細資訊,請參閱建立節點類別存取項目
-
-
如上所述,建立自訂節點集區。
中斷
您可透過多種方式設定 EKS 自動模式,以透過您的 NodePool 來中斷節點。您可以使用 spec.disruption.consolidationPolicy、spec.disruption.consolidateAfter 或 spec.template.spec.expireAfter。您還可以透過 NodePool 的 spec.disruption.budgets 來限制 EKS 自動模式的中斷速率。您還可以控制時間範圍和同時中斷的節點數量。有關設定此行為的說明,請參閱 Karpenter 文件中的中斷
您可將節點集區的中斷設定為:
-
識別執行個體未得到充分利用的時間,並合併工作負載。
-
建立節點集區中斷預算,以限制因偏離、空置和合併而導致的節點終止速率。
根據預設,EKS 自動模式:
-
合併未充分利用的執行個體。
-
在 336 小時後終止執行個體。
-
設定單一中斷預算為節點的 10%。
-
當新的自動模式 AMI 發布時,允許因偏離而取代節點,這大約每週發生一次。
終止寬限期
當 terminationGracePeriod 未在 EKS Auto NodePool 上明確定義時,系統會自動將預設的 24 小時終止寬限期套用到關聯的 NodeClaim。雖然 EKS Auto 不會在其自訂 NodePool 組態中看到預設的 terminationGracePeriod,但他們會在 NodeClaim 上觀察到此預設值。無論寬限期是在 NodePool 上明確設定,還是在 NodeClaim 上預設,功能都保持一致,確保了叢集中可預測的節點終止行為。