

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

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

# ハードウェア専有インスタンスで重要なアドオンを実行する
<a name="critical-workload"></a>

このトピックでは、EKS Auto Mode が `system` ノードプールにワークロードをスケジュールできるように、`CriticalAddonsOnly` の容認を持つワークロードをデプロイする方法について説明します。

EKS Auto Mode の組み込みの `system` ノードプールは、専用インスタンス上で重要なアドオンを実行するために設計されています。この分離により、重要なコンポーネントに専用のリソースが備わり、一般的なワークロードから分離されることが保証され、クラスター全体の安定性とパフォーマンスが向上します。

このガイドでは、`CriticalAddonsOnly` の容認と適切なノードセレクターを利用して、`system` ノードプールにアドオンをデプロイする方法を説明します。これらのステップに従うことで、EKS Auto Mode の特殊なノードプール構造が提供する分離とリソース割り当ての利点を活用して、重要なアプリケーションを専用の `system` ノードにスケジュールできるようになります。

EKS Auto Mode には、`general-purpose` と `system` の 2 つのノードプールが組み込まれています。詳細については、「[組み込み NodePool を有効または無効にする](set-builtin-node-pools.md)」を参照してください。

`system` ノードプールの目的は、重要なアドオンを異なるノードに分離することです。`system` ノードプールによってプロビジョニングされたノードには、`CriticalAddonsOnly` という Kubernetes のテイントがあります。Kubernetes は、対応する容認がある場合のみ、これらのノードにポッドをスケジュールします。詳細については、Kubernetes ドキュメントの「[テイントと容認](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/)」を参照してください。

## 前提条件
<a name="_prerequisites"></a>
+ EKS Auto Mode クラスターで組み込みの `system` ノードプールが有効になっていること。詳細については、「[組み込み NodePool を有効または無効にする](set-builtin-node-pools.md)」を参照してください。
+  `kubectl` がインストールされ、設定済みであること。詳細については、「[Amazon EKS を使用するようにセットアップする](setting-up.md)」を参照してください。

## 手順
<a name="_procedure"></a>

以下の yaml の例を確認してください。以下の設定に留意してください。
+  `nodeSelector` — これにより、ワークロードが組み込みの `system` ノードプールに関連付けられます。このノードプールは AWS API で有効にする必要があります。詳細については、「[組み込み NodePool を有効または無効にする](set-builtin-node-pools.md)」を参照してください。
+  `tolerations` — この容認は、`system` ノードプール内のノードの `CriticalAddonsOnly` テイントを克服します。

```
apiVersion: apps/v1
kind: Deployment
metadata:
  name: sample-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: sample-app
  template:
    metadata:
      labels:
        app: sample-app
    spec:
      nodeSelector:
        karpenter.sh/nodepool: system
      tolerations:
      - key: "CriticalAddonsOnly"
        operator: "Exists"
      containers:
      - name: app
        image: nginx:latest
        resources:
          requests:
            cpu: "500m"
            memory: "512Mi"
```

`system` ノードプールで実行するようにワークロードを更新するには、以下の操作を行う必要があります。

1. 既存のワークロードを更新して、上記で説明した以下の設定を追加します。
   +  `nodeSelector` 
   +  `tolerations` 

1. `kubectl apply` を使用して、更新されたワークロードをクラスターにデプロイする 

ワークロードを更新すると、専用ノードで実行されるようになります。