控制工作負載是否部署在 EKS 自動模式節點上 - Amazon EKS

View a markdown version of this page

控制工作負載是否部署在 EKS 自動模式節點上 - Amazon EKS

協助改進此頁面

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

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

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

控制工作負載是否部署在 EKS 自動模式節點上

在包含 EKS 自動模式的 EKS 叢集中執行工作負載時,您可能需要控制特定工作負載是否應在 EKS 自動模式節點,還是其他運算類型上執行。本主題描述如何使用節點選擇器與親和性,以確保您的工作負載被排程到預期的運算基礎結構上。

本主題中的範例示範如何使用 eks.amazonaws.com/compute-type 標籤,以要求或阻止工作負載部署到 EKS 自動模式節點上。這在混合模式叢集中特別有用,例如您同時執行了 EKS 自動模式和其他運算類型 (例如自我管理的 Karpenter 佈建程式或 EKS 受管節點群組) 的環境。

EKS 自動模式節點已將標籤 eks.amazonaws.com/compute-type 的值設定為 auto。您可使用此標籤來控制工作負載是否要部署到由 EKS 自動模式管理的節點。

需要將工作負載部署到 EKS Auto Mode 節點

注意

nodeSelector 值對於 EKS 自動模式並非必要。此 nodeSelector 僅在您於混合模式中執行叢集時 (即叢集中包含非 EKS 自動模式管理的節點類型時) 才相關。例如,您可能已透過 EKS 受管節點群組將靜態運算容量部署到叢集中,同時也擁有由 EKS 自動模式管理的動態運算容量。

您可將此 nodeSelector 新增至部署或其他工作負載中,以要求 Kubernetes 將其排程到 EKS 自動模式節點上。

apiVersion: apps/v1 kind: Deployment spec: template: spec: nodeSelector: eks.amazonaws.com/compute-type: auto

需要工作負載未部署到 EKS Auto Mode 節點

您可將此 nodeAffinity 新增至部署或其他工作負載中,以要求 Kubernetes 不要將其排程到 EKS 自動模式節點上。

affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - auto

以特定 NodePool 為目標

Amazon EKS Auto Mode 叢集可以有多個 NodePool。您可能希望工作負載只在來自特定 NodePool 的節點上執行。為了達成此目的,工作負載可以比對下列任一標籤:

  • 您在 NodePool 上定義的自訂標籤。當您在 NodePool spec.template.metadata.labels中於 下新增標籤時,Amazon EKS Auto Mode 會將這些標籤套用至 NodePool 佈建的每個節點。建議採用自訂標籤。自訂標籤會將工作負載連結至功能,例如 workload-class: gpu-inference,而不是特定 NodePool 名稱。

  • 眾所周知的karpenter.sh/nodepool標籤。Amazon EKS Auto Mode 會使用 NodePool 的名稱做為值,將此標籤套用至其佈建的每個節點。當您尚未定義自訂標籤,並想要依名稱以 NodePool 為目標時,請使用此標籤。

將自訂 NodePool 標籤設為目標

首先,在 NodePool 上定義標籤。

apiVersion: karpenter.sh/v1 kind: NodePool metadata: name: gpu spec: template: metadata: labels: workload-class: gpu-inference

如需 NodePool 組態的詳細資訊,請參閱 為 EKS 自動模式建立節點集區

接著,比對工作負載中的標籤。

apiVersion: apps/v1 kind: Deployment metadata: name: inference spec: template: spec: nodeSelector: workload-class: gpu-inference

此部署排程中的 Pod 只會傳送至 gpu NodePool 佈建的節點。沒有此項目的工作負載會nodeSelector繼續在預設 NodePool 上執行。

依名稱將 NodePool 設為目標

NodePool 名稱變更會影響排程

如果您重新命名或刪除目標 NodePool,依名稱固定工作負載可能會讓 Pod 處於 Pending 狀態。針對您希望超過單一 NodePool 定義的任何工作負載,使用自訂功能標籤。

apiVersion: apps/v1 kind: Deployment spec: template: spec: nodeSelector: karpenter.sh/nodepool: <your-nodepool-name>

如需 Karpenter 如何將 Pod 與 NodePools 配對的詳細資訊,請參閱 Karpenter 文件中的排程