

 **協助改進此頁面** 

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

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

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

# 配方：阻止在特定節點上排程 Pod
<a name="node-taints-managed-node-groups"></a>

## 概觀
<a name="_overview"></a>

相較於標準機器上的節點，搭載專用處理器的節點執行成本可能更高昂，例如 GPU。您可以利用 Kubernetes 污點，來保護這些節點免於處理無須特殊硬體的工作負載。污點可標記節點，以拒絕沒有相符公差的 Pod，從而確保僅排程相容的工作負載。如需詳細資訊，請參閱 Kubernetes 文件中的[污點和容差](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/)。

Kubernetes 節點污點可使用 AWS 管理主控台 或透過 Amazon EKS API 套用至新的和現有的受管理節點群組。此配方顯示了如何藉助 AWS CLI，將污點套用至 Amazon EKS 受管節點群組。若要了解使用 AWS 管理主控台 建立具有污點之節點群組的資訊，請參閱 [建立叢集的受管節點群組](create-managed-node-group.md)。

## 先決條件
<a name="_prerequisites"></a>
+ [現有 Amazon EKS 叢集](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)。
+  [AWS CLI 已安裝及設定](https://docs.aws.amazon.com/eks/latest/userguide/setting-up.html)適當許可。

## 步驟
<a name="_steps"></a>

### 步驟 1：建立具有污點的節點群組
<a name="_step_1_create_a_node_group_with_taints"></a>

使用 `aws eks create-nodegroup` 命令來建立具有污點的全新受管節點群組。此範例可套用具有鍵 `dedicated`、值 `gpuGroup` 及效果 `NO_SCHEDULE` 的污點。

```
aws eks create-nodegroup \
 --cli-input-json '
{
  "clusterName": "my-cluster",
  "nodegroupName": "node-taints-example",
  "subnets": [
     "subnet-1234567890abcdef0",
     "subnet-abcdef01234567890",
     "subnet-021345abcdef67890"
   ],
  "nodeRole": "arn:aws:iam::111122223333:role/AmazonEKSNodeRole",
  "taints": [
     {
         "key": "dedicated",
         "value": "gpuGroup",
         "effect": "NO_SCHEDULE"
     }
   ]
}'
```

若要了解詳細資訊及範例，請參閱 Kubernetes 參考文件中的[污點](https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands#taint)。

### 步驟 2：更新現有節點群組上的污點
<a name="_step_2_update_taints_on_an_existing_node_group"></a>

使用 [aws eks update-nodegroup-config](https://docs.aws.amazon.com/cli/latest/reference/eks/update-nodegroup-config.html) AWS CLI 命令，新增、移除或取代受管節點群組的污點。

```
aws eks update-nodegroup-config
  --cluster-name my-cluster
  --nodegroup-name node-taints-example
  --taints 'removeTaints=[{key=dedicated,value=gpuGroup,effect=NO_SCHEDULE}]'
```

## 備註
<a name="_notes"></a>
+ 污點可以在使用 `UpdateNodegroupConfig` API 建立節點群組後更新。
+ 污點金鑰必須以字母或數字開頭。可包含字母、數字、連字號 (`-`)、句點 (`.`) 及底線 (`_`)。長度上限為 63 個字元。
+ 或者，污點金鑰可以使用 DNS 子網域字首和單一 `/` 開頭。如果其以 DNS 子網域字首開頭，則長度可為 253 個字元。
+ 值是選用的，必須以字母或數字開頭。可包含字母、數字、連字號 (`-`)、句點 (`.`) 及底線 (`_`)。長度上限為 63 個字元。
+ 直接使用 Kubernetes 或 AWS 管理主控台 時，污點效果必須為 `NoSchedule`、`PreferNoSchedule` 或 `NoExecute`。不過，使用 AWS CLI 或 API 時，污點效果必須為 `NO_SCHEDULE`、`PREFER_NO_SCHEDULE` 或 `NO_EXECUTE`。
+ 每個節點群組最多允許 50 個污點。
+ 如果從節點手動移除使用受管節點群組建立的污點，則 Amazon EKS 不會將污點重新加入節點。即使在受管節點群組組態中指定了污點，也是如此。