

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

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

# CoreDNS ポッドを高い DNS トラフィックにスケールする
<a name="coredns-autoscaling"></a>

1 つ以上のノードで Amazon EKS クラスターを起動すると、クラスターにデプロイされたノード数に関係なく、デフォルトで CoreDNS イメージの 2 つのレプリカのデプロイがデプロイされます。これらの CoreDNS ポッドは、クラスター内のすべてのポッドの名前解決を行います。アプリケーションは名前解決を使用して、クラスター内のポッドとサービスに接続し、同様にクラスター外のサービスに接続します。ポッドからの名前解決 (クエリ) のリクエスト数が増えると、CoreDNS ポッドが処理しきれなくなって速度が低下し、ポッドが処理できないリクエストが拒否される可能性があります。

CoreDNS ポッドの負荷の増加を処理するには、CoreDNS の自動スケーリングシステムを検討してください。Amazon EKS は、CoreDNS の EKS アドオンバージョンで CoreDNS デプロイの自動スケーリングを管理できます。この CoreDNS オートスケーラーは、ノード数や CPU コア数など、クラスターの状態を継続的にモニタリングします。この情報に基づいて、コントローラーは EKS クラスター内の CoreDNS デプロイのレプリカ数を動的に調整します。この機能は CoreDNS `v1.9` 以降で動作します。CoreDNS 自動スケーリングと互換性のあるバージョンの詳細については、次のセクションを参照してください。

システムは、クラスター内のノード数と CPU コアの両方に基づく動的な式を使用して CoreDNS レプリカを自動的に管理し、(numberOfNodes を 16 で割った値) と (numberOfCPUCores を 256 で割った値) のうち、大きい方の値として計算されます。10 分間のピーク期間にわたって需要を評価し、DNS クエリ負荷の増加に対応するために必要に応じて即座にスケールアップする一方で、システムの安定性を維持して中断を回避するために、3 分ごとにレプリカを 33% 削減するという段階的なスケールダウンを行います。

この機能はアプリケーションの全体的な可用性とクラスターのスケーラビリティを向上させるために、他の [EKS クラスターの自動スケーリングのベストプラクティス](https://aws.github.io/aws-eks-best-practices/cluster-autoscaling/)と組み合わせて使用することをお勧めします。

## 前提条件
<a name="coredns-autoscaling-prereqs"></a>

Amazon EKS が CoreDNS デプロイをスケーリングするには、次の 3 つの前提条件があります。
+ CoreDNS の *EKS アドオン*バージョンを使用する必要があります。
+ クラスターは少なくとも最小のクラスターバージョンとプラットフォームバージョンを実行している必要があります。
+ クラスターは少なくとも CoreDNS の EKS アドオンの最小バージョンを実行している必要があります。

### 最小クラスターバージョン
<a name="coredns-autoscaling-cluster-version"></a>

CoreDNS の自動スケーリングは Amazon EKS によって管理されるクラスターコントロールプレーンの新しいコンポーネントによって行われます。このため、新しいコンポーネントを持つ最小プラットフォームバージョンをサポートする EKS リリースにクラスターをアップグレードする必要があります。

新しい Amazon EKS クラスター。デプロイするには「[Amazon EKS の使用を開始する](getting-started.md)」を参照してください。クラスターは次の表に示す Kubernetes バージョンとプラットフォームバージョン、またはそれ以降のいずれかを実行している必要があります。一覧にあるバージョンより後の Kubernetes とプラットフォームのバージョンもサポートされることにご注意ください。現在の Kubernetes バージョンを確認するには、次のコマンドの *my-cluster* をクラスターの名前に置き換えて、変更したコマンドを実行します。

```
aws eks describe-cluster --name my-cluster --query cluster.version --output text
```


| Kubernetes バージョン | プラットフォームバージョン | 
| --- | --- | 
|  リストに記載なし  |  すべてのプラットフォームバージョン  | 
|   `1.29.3`   |   `eks.7`   | 
|   `1.28.8`   |   `eks.13`   | 
|   `1.27.12`   |   `eks.17`   | 
|   `1.26.15`   |   `eks.18`   | 

**注記**  
以降の Kubernetes バージョンのすべてのプラットフォームバージョンもサポートされています。例えば、Kubernetes バージョン `1.30` の `eks.1` 以降のバージョンなどです。

### EKS アドオンの最小バージョン
<a name="coredns-autoscaling-coredns-version"></a>


| Kubernetes バージョン | 1.29 | 1.28 | 
| --- | --- | --- | 
|  |   `v1.11.1-eksbuild.9`   |   `v1.10.1-eksbuild.11`   | 

#### AWS マネジメントコンソールで CoreDNS 自動スケーリングを設定する
<a name="coredns-autoscaling-console"></a>

1. クラスターが最小クラスターバージョン以上であることを確認します。

   Amazon EKS は同じ Kubernetes バージョンのプラットフォームバージョン間でクラスターを自動的にアップグレードするため、このプロセスを自分で開始することはできません。代わりに、クラスターを次の Kubernetes バージョンにアップグレードすると、クラスターはその K8s バージョンと最新のプラットフォームバージョンにアップグレードされます。

   新しい Kubernetes バージョンでは、大幅な変更が加えられている場合があります。このため、本稼働用クラスターで更新を行う前に、新しい Kubernetes バージョンのクラスターを別に用意し、アプリケーションの動作をテストしておくことをお勧めします。

   クラスターを新しい Kubernetes バージョンにアップグレードするには、「[Update existing cluster to new Kubernetes version](update-cluster.md)」の手順に従います。

1. セルフマネージド型の CoreDNS デプロイではなく、CoreDNS 用の EKS アドオンがあることを確認します。

   クラスターを作成するために使用したツールによっては現在クラスターに Amazon EKS アドオンタイプがインストールされていない場合があります。クラスターにインストールされているアドオンのタイプを確認するには次のコマンドを実行してください。`my-cluster` を自分のクラスター名に置き換えます。

   ```
   aws eks describe-addon --cluster-name my-cluster --addon-name coredns --query addon.addonVersion --output text
   ```

   バージョン番号が返された場合、クラスターに Amazon EKS タイプのアドオンがインストールされ、次のステップに進むことができます。エラーが返された場合、クラスターに Amazon EKS タイプのアドオンがインストールされていません。ステップ「[CoreDNS Amazon EKS を作成する](coredns-add-on-create.md)」の残りのステップを完了して、セルフマネージドバージョンを Amazon EKS アドオンに置き換えます。

1. CoreDNS の EKS アドオンが、最小 EKS アドオンバージョンと同じかそれ以上のバージョンであることを確認します。

   クラスターにインストールされているアドオンのバージョンを確認します。AWS マネジメントコンソールで確認するか、以下のコマンドを実行できます：

   ```
   kubectl describe deployment coredns --namespace kube-system | grep coredns: | cut -d : -f 3
   ```

   出力例は次のとおりです。

   ```
   v1.10.1-eksbuild.13
   ```

   このバージョンを前のセクションの最小 EKS アドオンバージョンと比較します。必要に応じて、「[CoreDNS Amazon EKS アドオンを更新する](coredns-add-on-update.md)」の手順に従って EKS アドオンを上位のバージョンにアップグレードします。

1. 自動スケーリング設定を EKS アドオンの **[オプションの設定]** に追加します。

   1. [Amazon EKS コンソール](https://console.aws.amazon.com/eks/home#/clusters)を開きます。

   1. 左のナビゲーションペインで、**[クラスター]** を選択し、次にアドオンを設定するクラスター名を選択してください。

   1. **[アドオン]** タブを選択してください。

   1. CoreDNS アドオンボックスの右上にあるボックスを選択し、次に **[編集]** を選択してください。

   1. **[CoreDNS の設定]** ページで、次の操作を行います。

      1. 使用する **[バージョン]** を選択してください。前のステップと同じバージョンを保持し、別のアクションでバージョンと設定を更新することをお勧めします。

      1. **[オプションの構成設定]** を展開します。

      1. **[設定値]** で JSON キー `"autoscaling":` とネストした JSON オブジェクトの値に、キー `"enabled":` と値 `true` を指定します。結果のテキストは有効な JSON オブジェクトでなければなりません。このキーと値だけがテキストボックス内のデータである場合はキーと値を中括弧 `{ }` で囲みます。次の例は自動スケーリングが有効になっていることを示しています：

         ```
         {
           "autoScaling": {
             "enabled": true
           }
         }
         ```

      1. (オプション) 自動スケーリングが CoreDNS ポッド数をスケールできる最小値と最大値を指定できます。

         次の例は自動スケーリングが有効で、すべてのオプションキーに値があることを示しています。クラスター内の DNS サービスに回復力を提供できるように、CoreDNS ポッドの最小数は常に 2 より大きくすることをお勧めします。

         ```
         {
           "autoScaling": {
             "enabled": true,
             "minReplicas": 2,
             "maxReplicas": 10
           }
         }
         ```

   1. CoreDNS ポッドを置き換えて新しい設定を適用するには、**[変更を保存]** を選択します。

      Amazon EKS は CoreDNS の Kubernetes デプロイの*ロールアウト*を使用して EKS アドオンに変更を適用します。ロールアウトのステータスはAWS マネジメントコンソール のアドオン **[更新履歴]** と `kubectl rollout status deployment/coredns --namespace kube-system` で追跡できます。

       `kubectl rollout` は以下のコマンドを実行してください：

      ```
      kubectl rollout
      
      history  -- View rollout history
      pause    -- Mark the provided resource as paused
      restart  -- Restart a resource
      resume   -- Resume a paused resource
      status   -- Show the status of the rollout
      undo     -- Undo a previous rollout
      ```

      ロールアウトに時間がかかりすぎる場合、Amazon EKS はロールアウトを取り消し、**[アドオン更新]** のタイプと **[失敗]** のステータスのメッセージがアドオンの **[更新履歴]** に追加されます。問題を調査するにはロールアウトの履歴から開始し、CoreDNS のポッドで `kubectl logs` を実行して CoreDNS のログを確認します。

1. **[更新履歴]** の新しいエントリのステータスが **[成功]** の場合、ロールアウトが完了し、アドオンはすべての CoreDNS のポッドで新しい設定を使用していることを意味します。クラスター内のノード数とノードの CPU コア数を変更すると、Amazon EKS は CoreDNS デプロイのレプリカ数をスケールします。

#### AWS コマンドラインインターフェイスで CoreDNS 自動スケーリングを設定する
<a name="coredns-autoscaling-cli"></a>

1. クラスターが最小クラスターバージョン以上であることを確認します。

   Amazon EKS は同じ Kubernetes バージョンのプラットフォームバージョン間でクラスターを自動的にアップグレードするため、このプロセスを自分で開始することはできません。代わりに、クラスターを次の Kubernetes バージョンにアップグレードすると、クラスターはその K8s バージョンと最新のプラットフォームバージョンにアップグレードされます。

   新しい Kubernetes バージョンでは、大幅な変更が加えられている場合があります。このため、本稼働用クラスターで更新を行う前に、新しい Kubernetes バージョンのクラスターを別に用意し、アプリケーションの動作をテストしておくことをお勧めします。

   クラスターを新しい Kubernetes バージョンにアップグレードするには、「[Update existing cluster to new Kubernetes version](update-cluster.md)」の手順に従います。

1. セルフマネージド型の CoreDNS デプロイではなく、CoreDNS 用の EKS アドオンがあることを確認します。

   クラスターを作成するために使用したツールによっては現在クラスターに Amazon EKS アドオンタイプがインストールされていない場合があります。クラスターにインストールされているアドオンのタイプを確認するには次のコマンドを実行してください。`my-cluster` を自分のクラスター名に置き換えます。

   ```
   aws eks describe-addon --cluster-name my-cluster --addon-name coredns --query addon.addonVersion --output text
   ```

   バージョン番号が返された場合、クラスターに Amazon EKS タイプのアドオンがインストールされています。エラーが返された場合、クラスターに Amazon EKS タイプのアドオンがインストールされていません。ステップ「[CoreDNS Amazon EKS を作成する](coredns-add-on-create.md)」の残りのステップを完了して、セルフマネージドバージョンを Amazon EKS アドオンに置き換えます。

1. CoreDNS の EKS アドオンが、最小 EKS アドオンバージョンと同じかそれ以上のバージョンであることを確認します。

   クラスターにインストールされているアドオンのバージョンを確認します。AWS マネジメントコンソールで確認するか、以下のコマンドを実行できます：

   ```
   kubectl describe deployment coredns --namespace kube-system | grep coredns: | cut -d : -f 3
   ```

   出力例は次のとおりです。

   ```
   v1.10.1-eksbuild.13
   ```

   このバージョンを前のセクションの最小 EKS アドオンバージョンと比較します。必要に応じて、「[CoreDNS Amazon EKS アドオンを更新する](coredns-add-on-update.md)」の手順に従って EKS アドオンを上位のバージョンにアップグレードします。

1. 自動スケーリング設定を EKS アドオンの **[オプションの設定]** に追加します。

   次の AWS CLI コマンドを実行してください。`my-cluster` をクラスターの名前に置き換え、IAM ロール ARN を使用するロールに置き換えます。

   ```
   aws eks update-addon --cluster-name my-cluster --addon-name coredns \
       --resolve-conflicts PRESERVE --configuration-values '{"autoScaling":{"enabled":true}}'
   ```

   Amazon EKS は CoreDNS の Kubernetes デプロイの*ロールアウト*を使用して EKS アドオンに変更を適用します。ロールアウトのステータスはAWS マネジメントコンソール のアドオン **[更新履歴]** と `kubectl rollout status deployment/coredns --namespace kube-system` で追跡できます。

    `kubectl rollout` は以下のコマンドを実行してください：

   ```
   kubectl rollout
   
   history  -- View rollout history
   pause    -- Mark the provided resource as paused
   restart  -- Restart a resource
   resume   -- Resume a paused resource
   status   -- Show the status of the rollout
   undo     -- Undo a previous rollout
   ```

   ロールアウトに時間がかかりすぎる場合、Amazon EKS はロールアウトを取り消し、**[アドオン更新]** のタイプと **[失敗]** のステータスのメッセージがアドオンの **[更新履歴]** に追加されます。問題を調査するにはロールアウトの履歴から開始し、CoreDNS のポッドで `kubectl logs` を実行して CoreDNS のログを確認します。

1. (オプション) 自動スケーリングが CoreDNS ポッド数をスケールできる最小値と最大値を指定できます。

   次の例は自動スケーリングが有効で、すべてのオプションキーに値があることを示しています。クラスター内の DNS サービスに回復力を提供できるように、CoreDNS ポッドの最小数は常に 2 より大きくすることをお勧めします。

   ```
   aws eks update-addon --cluster-name my-cluster --addon-name coredns \
       --resolve-conflicts PRESERVE --configuration-values '{"autoScaling":{"enabled":true,"minReplicas":2,"maxReplicas":10}}'
   ```

1. 次のコマンドを実行して、アドオンの更新のステータスを確認します：

   ```
   aws eks describe-addon --cluster-name my-cluster --addon-name coredns
   ```

   `"status": "ACTIVE"` という行が表示された場合、ロールアウトが完了し、アドオンはすべての CoreDNS ポッドで新しい設定を使用していることを意味します。クラスター内のノード数とノードの CPU コア数を変更すると、Amazon EKS は CoreDNS デプロイのレプリカ数をスケールします。