為 EKS 自動模式建立節點集區 - Amazon EKS

協助改進此頁面

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

為 EKS 自動模式建立節點集區

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

您無法修改內建 systemgeneral-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:

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

  2. 將 NodePool 套用至您的叢集:

    kubectl apply -f nodepool.yaml
  3. 確認已成功建立 NodePool:

    kubectl get nodepools
  4. (選用) 監控 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

容量類型包括 spoton-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

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 的節點類別

概觀

  1. 建立 EKS 叢集,其 nodePoolsnodeRoleArn 值均為空。

  2. 使用節點角色 ARN 建立自訂節點類別

  3. 為自訂節點類別建立存取項目

  4. 如上所述,建立自訂節點集區。

中斷

您可透過多種方式設定 EKS 自動模式,以透過您的 NodePool 來中斷節點。您可以使用 spec.disruption.consolidationPolicyspec.disruption.consolidateAfterspec.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 上預設,功能都保持一致,確保了叢集中可預測的節點終止行為。