

 **協助改進此頁面** 

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

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

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

# 控制工作負載是否部署在 EKS 自動模式節點上
<a name="associate-workload"></a>

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

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

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

## 需要將工作負載部署到 EKS Auto Mode 節點
<a name="_require_that_a_workload_is_deployed_to_eks_auto_mode_nodes"></a>

**注意**  
此 `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 節點
<a name="_require_that_a_workload_is_not_deployed_to_eks_auto_mode_nodes"></a>

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

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

## 以特定 NodePool 為目標
<a name="_target_a_specific_nodepool"></a>

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 標籤設為目標
<a name="_target_a_custom_nodepool_label"></a>

首先，在 NodePool 上定義標籤。

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

如需 NodePool 組態的詳細資訊，請參閱 [為 EKS 自動模式建立節點集區](create-node-pool.md)。

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

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

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

### 依名稱將 NodePool 設為目標
<a name="_target_a_nodepool_by_name"></a>

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

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

如需 Karpenter 如何將 Pod 與 NodePools 配對的詳細資訊，請參閱 Karpenter 文件中的[排程](https://karpenter.sh/docs/concepts/scheduling/)。