View a markdown version of this page

為 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/) 使用執行個體類型、CPU 製造商、GPU 功能和聯網規格等 AWS特定屬性來擴展此功能。此標準化標籤系統可無縫整合現有的 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 開頭。

標籤 範例 Description

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