

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

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

# Amazon EKS クラスターで DNS の CoreDNS を管理する
<a name="managing-coredns"></a>

**ヒント**  
Amazon EKS 自動モード ではネットワーク形成のアドオンをインストールまたはアップグレードする必要はありません。自動モード にはポッドのネットワーク形成とロードバランシング機能が含まれています。  
詳細については、[EKS Auto Mode を使用してクラスターインフラストラクチャを自動化する](automode.md) を参照してください。

CoreDNS は、Kubernetes クラスター DNS として機能する、フレキシブルで拡張可能な DNS サーバーです。少なくとも 1 つのノードで Amazon EKS クラスターを起動すると、クラスターにデプロイされたノード数に関係なく、デフォルトで CoreDNS イメージの 2 つのレプリカがデプロイされます。これらの CoreDNS ポッドは、クラスター内のすべてのポッドの名前解決を行います。クラスターに名前空間が CoreDNS `deployment` の名前空間と一致する名前空間を持つ [Fargate プロファイル](fargate-profile.md)が含まれいる場合、CoreDNS ポッドを Fargate ノードにデプロイできます。CoreDNS の詳細については、Kubernetes ドキュメント の「[Using CoreDNS for Service Discovery](https://kubernetes.io/docs/tasks/administer-cluster/coredns/)」を参照してください。

## CoreDNS のバージョン
<a name="coredns-versions"></a>

次の表は、Kubernetes バージョンごとに Amazon EKS アドオンタイプの最新バージョンを示しています。


| Kubernetes バージョン | CoreDNS のバージョン | 
| --- | --- | 
|  1.35  |  v1.13.2-eksbuild.4  | 
|  1.34  |  v1.13.2-eksbuild.4  | 
|  1.33  |  v1.13.2-eksbuild.4  | 
|  1.32  |  v1.11.4-eksbuild.33  | 
|  1.31  |  v1.11.4-eksbuild.33  | 
|  1.30  |  v1.11.4-eksbuild.33  | 

**重要**  
このアドオンを自己管理している場合、表のバージョンは利用可能なセルフマネージドバージョンと同じではない可能性があります。このアドオンのセルフマネージドタイプの更新の詳細については、[CoreDNS Amazon EKS セルフマネージドアドオンを更新する](coredns-add-on-self-managed-update.md) を参照してください。

## CoreDNS アップグレードに関する重要な考慮事項
<a name="coredns-upgrade"></a>
+ CoreDNS 更新では PodDisruptionBudget が使用され、更新プロセス中に DNS サービスの可用性を維持します。
+ CoreDNS デプロイの安定性と可用性を高めるには、`PodDisruptionBudget` を使用してバージョン `v1.9.3-eksbuild.6` 以降および `v1.10.1-eksbuild.3` をデプロイします。既存の `PodDisruptionBudget` をデプロイした場合、これらのバージョンへのアップグレードは失敗する可能性があります。アップグレードが失敗した場合は次のいずれかのタスクを実行することで問題が解決します。
  + Amazon EKS アドオンをアップグレードする際は競合解決のオプションとして既存の設定を上書きすることを選択してください。デプロイに他のカスタム設定を行った場合は、アップグレード後に他のカスタム設定を再適用できるように、アップグレード前に必ず設定をバックアップしてください。
  + 既存の `PodDisruptionBudget` を削除して、アップグレードを再試行してください。
+ EKS アドオンバージョン `v1.9.3-eksbuild.3` 以降および `v1.10.1-eksbuild.6` 以降では、CoreDNS デプロイは `/ready` エンドポイントを使用するように `readinessProbe` を設定します。このエンドポイントは、CoreDNS の `Corefile` 設定ファイルで有効になっています。

  カスタム `Corefile` を使用する場合は、`ready` プラグインを設定に追加して、プローブが使用できるように `/ready` エンドポイントを CoreDNS でアクティブにする必要があります。
+ EKS アドオンバージョン `v1.9.3-eksbuild.7` 以降および `v1.10.1-eksbuild.4` 以降では`PodDisruptionBudget` を変更できます。次の例ではフィールドを使用して、アドオンを編集したり、**[任意の設定項目]**でこれらの設定を変更したりできます。この例はデフォルトの `PodDisruptionBudget` を示しています。

  ```
  {
      "podDisruptionBudget": {
          "enabled": true,
          "maxUnavailable": 1
          }
  }
  ```

  `maxUnavailable` または `minAvailable` を設定できますが、両方を単一の `PodDisruptionBudget` で設定することはできません。`PodDisruptionBudgets` の詳細については*Kubernetes ドキュメント*の「[PodDisruptionBudgetの指定](https://kubernetes.io/docs/tasks/run-application/configure-pdb/#specifying-a-poddisruptionbudget)」を参照してください。

  `enabled` を `false` に設定しても、`PodDisruptionBudget` は削除されないことに注意してください。このフィールドを `false` に設定後、`PodDisruptionBudget` オブジェクトを削除する必要があります。同様に、`PodDisruptionBudget` のあるバージョンにアップグレードした後、古いバージョンのアドオンを使用するようにアドオンを編集した場合 (アドオンをダウングレード)、`PodDisruptionBudget` は削除されません。次のコマンドを実行して、`PodDisruptionBudget` を削除します。

  ```
  kubectl delete poddisruptionbudget coredns -n kube-system
  ```
+ EKS アドオンバージョン `v1.10.1-eksbuild.5` 以降ではデフォルトの許容値を KEP 2067 に準拠するように `node-role.kubernetes.io/master:NoSchedule` から `node-role.kubernetes.io/control-plane:NoSchedule` に変更してください。KEP 2067 の詳細については、GitHub で「*Kubernetes Enhancement Proposals (KEPs)*」の「[KEP-2067: Rename the kubeadm "master" label and taint](https://github.com/kubernetes/enhancements/tree/master/keps/sig-cluster-lifecycle/kubeadm/2067-rename-master-label-taint#renaming-the-node-rolekubernetesiomaster-node-taint)」を参照してください。

  EKS アドオンバージョン `v1.8.7-eksbuild.8` 以降、および `v1.9.3-eksbuild.9` 以降では、どちらの許容範囲もすべての Kubernetes バージョンと互換性を維持できるように設定されています。
+ EKS アドオンバージョン `v1.9.3-eksbuild.11` および `v1.10.1-eksbuild.7` 以降では、CoreDNS デプロイは `topologySpreadConstraints` のデフォルト値を設定します。このデフォルト値により、複数のアベイラビリティーゾーンに使用可能なノードがある場合には、CoreDNS Pod がアベイラビリティーゾーン全体に分散します。デフォルト値の代わりに使用するカスタム値を設定できます。デフォルト値は次のとおりです。

  ```
  topologySpreadConstraints:
    - maxSkew: 1
      topologyKey: topology.kubernetes.io/zone
      whenUnsatisfiable: ScheduleAnyway
      labelSelector:
        matchLabels:
          k8s-app: kube-dns
  ```

### CoreDNS `v1.11` アップグレードに関する考慮事項
<a name="coredns-upgrade-1"></a>
+ EKS アドオン バージョン `v1.11.1-eksbuild.4` 以降ではコンテナイメージは Amazon EKS Distro によって維持される[最小ベースイメージ](https://gallery.ecr.aws/eks-distro-build-tooling/eks-distro-minimal-base)に基づいています。これには最小限のパッケージが含まれ、シェルはありません。詳細については「[Amazon EKS Distro](https://distro.eks.amazonaws.com/)」を参照してください。CoreDNS イメージの使用方法とトラブルシューティングは変わりません。