協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 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 文件中的排程