

 **このページの改善にご協力ください** 

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「**GitHub でこのページを編集する**」リンクを選択してください。

# レシピ: 特定のノードでポッドがスケジュールされないようにする
<a name="node-taints-managed-node-groups"></a>

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

GPU などの専門的なプロセッサを搭載したノードは、標準的なマシンのノードよりも実行コストが高くなる場合があります。特別なハードウェアを必要としないワークロードからこれらのノードを保護するには、Kubernetes テイントを使用できます。テイントはノードをマークして、許容範囲が一致しないポッドを避け、互換性のあるワークロードのみがスケジュールされるようにします。詳細については、Kubernetes ドキュメントの「[テイントと容認](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/)」を参照してください。

AWS マネジメントコンソールまたは Amazon EKS API を使用して、新規または既存のマネージド型ノードグループに Kubernetes ノードのテイントが適用されます。このレシピは、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 文字です
+ オプションで、Taint キーは DNS サブドメインプレフィックスと単一の `/` で始めることができます。このキーを DNS サブドメインプレフィックスで始める場合は、最大 253 文字まで使用できます。
+ 値は省略可能で、文字または数字で始める必要があります。英字、数字、ハイフン (`-`)、ピリオド (`.`)、およびアンダースコア (`_`) を使用できます。最大 63 文字です
+ Kubernetes を直接使用するか、AWS マネジメントコンソールを使用する場合、テイント効果は `NoSchedule`、`PreferNoSchedule`、または `NoExecute` でなければなりません。ただし、AWS CLI または API を使用する場合、テイント効果は `NO_SCHEDULE`、`PREFER_NO_SCHEDULE`、または `NO_EXECUTE` でなければなりません。
+ 1 つのノードグループには、最大 50 個のテイントを使用できます。
+ マネージドノードグループを使用して作成されたテイントをノードから手動で削除した場合、Amazon EKS はテイントをノードに戻しません。これは、管理対象ノードグループ設定でテイントが指定されている場合にも当てはまります。