CoreDNS アドオンの管理 - Amazon EKS

CoreDNS アドオンの管理

CoreDNS は、Kubernetes クラスター DNS として機能できる柔軟で拡張可能な DNS サーバーです。1 つ以上のノードで Amazon EKS クラスターを起動すると、クラスターにデプロイされたノード数に関係なく、デフォルトで CoreDNS イメージの 2 つのレプリカがデプロイされます。CoreDNS の pods は、クラスター内のすべての pods の名前解決を行います。クラスターに AWS Fargate プロファイル が含まれ、名前空間が CoreDNS deployment の名前空間と一致している場合、CoreDNS pods を Fargate ノードにデプロイできます。CoreDNS の詳細については、「Kubernetes ドキュメント」の「サービスディスカバリーに CoreDNS を使用する」を参照してください。

次の表に、Amazon EKS クラスターの各バージョンでデプロイされる CoreDNS アドオンのバージョンを示します。

Amazon EKS がサポートするクラスターバージョンごとにデプロイされた CoreDNS バージョン
Kubernetes バージョン 1.23 1.22 1.21 1.20 1.19 1.18
CoreDNS 1.8.7-eksbuild.2 1.8.7 1.8.4 1.8.3 1.8.0 1.7.0

AWS Management Console を使用して 1.18 以降のクラスターを作成した場合、Amazon EKS アドオンとして、アドオンが Amazon EKS によりインストールされます。任意のツールを使用して 1.17 以前のクラスターを作成した場合、または AWS Management Console 以外のツールを使用して 1.18 以降のクラスターを作成した場合、Amazon EKS はセルフマネージドアドオンとしてプラグインをインストールしています。

CoreDNS Amazon EKS アドオンの追加 での手順により、セルフマネージドアドオンを Amazon EKS アドオンに移行できます。CoreDNS アドオンが既に追加してあるクラスターの場合は、「CoreDNS Amazon EKS アドオンの更新」および「CoreDNS Amazon EKS アドオンの削除」セクションの手順で管理できます。Amazon EKS アドオンの詳細については、「Amazon EKS アドオン」を参照してください。

CoreDNS Amazon EKS アドオンを追加していない場合、クラスター上では CoreDNS のセルフマネージド型アドオンが引き続き実行されています。CoreDNS のセルフマネージド型アドオンを更新する の手順を実行して、CoreDNS のセルフマネージド型アドオンを更新できます。

前提条件

  • 既存の Amazon EKS クラスター。デプロイするには、Amazon EKS の使用開始を参照してください。

  • クラスターが 1.21 以降である場合、Amazon VPC CNI plugin for Kubernetes および kube-proxy アドオンが、サービスアカウントトークンに記載されている最小のバージョンであることを確認してください。

CoreDNS Amazon EKS アドオンの追加

CoreDNS Amazon EKS アドオンをクラスターに追加するために使用するツールの名前が付いているタブを選択します。

重要

CoreDNS Amazon EKS アドオンを追加する前に、Amazon EKS により管理される設定内容を自分自身で変更していないことを確認してください。Amazon EKS が管理する設定については、「Amazon EKS アドオンの設定」でご確認ください。

eksctl

eksctl を使用して CoreDNS Amazon EKS アドオンを追加する

my-cluster を自分のクラスター名に置き換えた上で、次のコマンドを実行します。

eksctl create addon --name coredns --cluster my-cluster --force

--force オプションを削除した状態で Amazon EKS アドオンを追加する場合、アドオンの設定のいずれかが現状の設定と競合していると、この追加は失敗します。この場合、競合を解決するためのエラーメッセージが表示されます。このオプションを指定する前に、自分が管理する必要がある設定を Amazon EKS アドオンが管理していないことを確認してください。これらの設定は、このオプションの指定により上書きされます。Amazon EKS アドオン設定管理の詳細については、「Amazon EKS アドオンの設定」を参照してください。

AWS Management Console

AWS Management Console を使用して CoreDNS Amazon EKS アドオンを追加する方法

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

  2. 左のナビゲーションペインで、[Clusters] (クラスター) を選択した後、CoreDNS Amazon EKS アドオンを設定するクラスター名を選択します。

  3. [アドオン] タブを選択します。

  4. [Add new (新規追加)] を選択します。

    1. [Name (名前)] で [CoreDNS] を選択します。

    2. 使用する [Version (バージョン)] を選択します。

    3. [クラスター上のこのアドオンで既存の設定を上書きする] を選択すると、既存のアドオンでの任意の設定が、Amazon EKS アドオンの設定により上書きされます。このオプションを有効にしない状態で Amazon EKS アドオンを追加する際に、そのアドオンの設定のいずれかが現状の設定と競合している場合その移行は失敗します。この場合、競合を解決するためのエラーメッセージが表示されます。このオプションを選択する前に、自分で管理する必要のある設定が、Amazon EKS アドオンにより管理されていないことを確認してください。Amazon EKS アドオン設定管理の詳細については、「Amazon EKS アドオンの設定」を参照してください。

    4. [Add (追加)] を選択します。

AWS CLI

AWS CLI を使用して CoreDNS Amazon EKS アドオンを追加する方法

my-cluster を自分のクラスター名に置き換えた上で、次のコマンドを実行します。

aws eks create-addon \ --cluster-name my-cluster \ --addon-name coredns \ --resolve-conflicts OVERWRITE

--resolve-conflicts OVERWRITE オプションを削除した状態で Amazon EKS アドオンを作成する際に、そのアドオンの設定のいずれかが現状の設定と競合している場合その作成は失敗します。この場合、競合を解決するためのエラーメッセージが表示されます。このオプションを指定する前に、自分が管理する必要がある設定を Amazon EKS アドオンが管理していないことを確認してください。これらの設定は、このオプションの指定により上書きされます。Amazon EKS アドオン設定管理の詳細については、「Amazon EKS アドオンの設定」を参照してください。

CoreDNS Amazon EKS アドオンの更新

CoreDNS Amazon EKS アドオンを更新するための手順です。CoreDNS Amazon EKS アドオンを追加していない場合は、代わりに CoreDNS のセルフマネージド型アドオンを更新する の手順を完了するか、CoreDNS Amazon EKS アドオンを追加してください。Amazon EKS では、新しいバージョンがリリースされても、もしくは新しい Kubernetes マイナーバージョンに クラスターを更新 しても、クラスターで CoreDNS が自動的に更新されることはありません。既存のクラスターで CoreDNS を更新するには、まずは自分で更新を開始する必要があります。その後、Amazon EKS で Amazon EKS アドオンが更新されます。

eksctl

eksctl を使用して CoreDNS Amazon EKS アドオンを更新する方法

  1. coredns Amazon EKS アドオンの現在のバージョンを確認します。my-cluster をクラスター名に置き換えます。

    eksctl get addon --name coredns --cluster my-cluster

    出力例を次に示します。

    NAME VERSION STATUS ISSUES IAMROLE UPDATE AVAILABLE coredns v1.8.0-eksbuild.1 ACTIVE 0 v1.8.3-eksbuild.1
  2. アドオンを、前のステップの出力で UPDATE AVAILABLE の下に表示されたバージョンに更新します。

    eksctl update addon \ --name coredns \ --version v1.8.3-eksbuild.1 \ --cluster my-cluster \ --force

    --force オプションを削除した状態で Amazon EKS アドオンを更新する際に、そのアドオン設定のいずれかが現状の設定と競合している場合、その更新は失敗します。この場合、競合を解決するためのエラーメッセージが表示されます。このオプションを指定する前に、自分が管理する必要がある設定を Amazon EKS アドオンが管理していないことを確認してください。これらの設定は、このオプションの指定により上書きされます。Amazon EKS アドオン設定管理の詳細については、「Amazon EKS アドオンの設定」を参照してください。

AWS Management Console

AWS Management Console を使用して CoreDNS Amazon EKS アドオンを更新する方法

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

  2. 左のナビゲーションペインで [Clusters] (クラスター) を選択した後、CoreDNS Amazon EKS アドオンを更新するクラスター名を選択します。

  3. [アドオン] タブを選択します。

  4. [coredns] ボックスの右上にあるラジオボタンを選択し、[Edit] (編集) を選択します。

    1. [Version (バージョン)] で、使用したい Amazon EKS アドオンのバージョンを選択します。

    2. [クラスター上のこのアドオンで既存の設定を上書きする] を選択すると、既存のアドオンでの任意の設定が、Amazon EKS アドオンの設定により上書きされます。このオプションを有効にしない状態で Amazon EKS アドオンを更新する際に、そのアドオンの設定のいずれかが現在の設定と競合している場合は、その更新は失敗します。この場合、競合を解決するためのエラーメッセージが表示されます。このオプションを選択する前に、自分で管理する必要のある設定が、Amazon EKS アドオンにより管理されていないことを確認してください。Amazon EKS アドオン設定管理の詳細については、「Amazon EKS アドオンの設定」を参照してください。

    3. [Update] (更新) を選択します。

AWS CLI

AWS CLI を使用して CoreDNS Amazon EKS アドオンを更新する方法

  1. 現在使用している CoreDNS アドオンのバージョンを確認します。my-cluster をクラスター名に置き換えます。

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

    出力例を次に示します。

    1.7.0
  2. クラスターのバージョンで使用できる CoreDNS アドオンのバージョンを確認します。

    aws eks describe-addon-versions \ --addon-name coredns \ --kubernetes-version 1.19 \ --query "addons[].addonVersions[].[addonVersion, compatibilities[].defaultVersion]" \ --output text

    出力例を次に示します。

    1.8.0 True 1.7.0 False

    True が下に表示されているバージョンは、新しいクラスターでデプロイされたデフォルトのバージョンです。

  3. アドオンを、前のステップの出力で True として返されたバージョンに更新します。出力に返されたバージョンであれば、さらに新しいにものに更新することもできます。

    aws eks update-addon \ --cluster-name my-cluster \ --addon-name coredns \ --addon-version 1.8.0 \ --resolve-conflicts OVERWRITE

    --resolve-conflicts OVERWRITE オプションを削除した状態で Amazon EKS アドオンを更新する際に、そのアドオンの設定のいずれかが現状の設定と競合している場合その更新は失敗します。この場合、競合を解決するためのエラーメッセージが表示されます。このオプションを指定する前に、自分が管理する必要がある設定を Amazon EKS アドオンが管理していないことを確認してください。これらの設定は、このオプションの指定により上書きされます。Amazon EKS アドオン設定管理の詳細については、「Amazon EKS アドオンの設定」を参照してください。

CoreDNS Amazon EKS アドオンの削除

Amazon EKS アドオンを削除する場合、次の 2 つのオプションがあります。

  • クラスター上のアドオンのソフトウェアを保持する — このオプションでは、Amazon EKS の設定管理が削除され、Amazon EKS が更新を通知し、更新を開始すると Amazon EKS アドオンが自動的に更新されますが、アドオンのソフトウェアはクラスター上に保持されます。このオプションを選択すると、Amazon EKS アドオンではなく、セルフマネージド型アドオンになります。アドオンではダウンタイムはありません。

  • クラスターからアドオンソフトウェアを完全に削除する — クラスターから Amazon EKS アドオンを削除するのは、アドオンが提供する機能に依存するリソースがクラスター上にない場合のみとしてください。Amazon EKS アドオンは、削除した後でも必要に応じて再度追加することができます。

アドオンに IAM アカウントが関連付けられている場合、その IAM アカウントは削除されません。

CoreDNS Amazon EKS アドオンを、1.18 以降のクラスターから削除するために使用するツールの名前が付いたタブを選択します。

eksctl

eksctl を使用して CoreDNS Amazon EKS アドオンを削除する

my-cluster を自分のクラスター名に置き換えた上で、次のコマンドを実行します。--preserve を削除することにより、アドオンがクラスターから削除されます。

eksctl delete addon --cluster my-cluster --name coredns --preserve
AWS Management Console

AWS Management Console を使用して CoreDNS Amazon EKS アドオンを削除する方法

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

  2. 左のナビゲーションペインで、[Clusters] (クラスター) を選択した後、CoreDNS Amazon EKS アドオンを削除するクラスター名を選択します。

  3. [アドオン] タブを選択します。

  4. [coredns] ボックスの右上にあるラジオボタンを選択し、[Remove] (削除) を選択します。coredns と入力し、[Remove (削除)] を選択します。

AWS CLI

AWS CLI を使用して CoreDNS Amazon EKS アドオンを削除する方法

my-cluster を自分のクラスター名に置き換えた上で、次のコマンドを実行します。--preserve を削除することにより、アドオンがクラスターから削除されます。

aws eks delete-addon --cluster-name my-cluster --addon-name coredns --preserve

CoreDNS のセルフマネージド型アドオンを更新する

CoreDNS Amazon EKS アドオンを追加していなクラスターの場合は、次の手順を完了してアドオンを更新します。CoreDNS Amazon EKS アドオンを追加した場合は、代わりに CoreDNS Amazon EKS アドオンの更新 で手順を完了してください。

kubectl を使用してCoreDNS のセルフマネージド型アドオンを更新する

  1. 現在使用している CoreDNS アドオンのバージョンを確認します。

    kubectl describe deployment coredns \ --namespace kube-system \ | grep Image \ | cut -d "/" -f 3

    出力例を次に示します。

    coredns:v1.8.0
  2. 現在の CoreDNS のバージョンが 1.5.0 以降で、CoreDNS バージョン表に記載されるバージョンよりも前の場合、この手順はスキップしてください。現在のバージョンが 1.5.0 より前の場合、プロキシアドオンではなく進んだアドオンを使用するためには、CoreDNS の ConfigMap を修正する必要があります。

    1. 次のコマンドを使用して ConfigMap ファイルを開きます。

      kubectl edit configmap coredns -n kube-system
    2. 次の行の proxyforward に置き換えます。ファイルを保存し、エディタを終了します。

      proxy . /etc/resolv.conf
  3. Kubernetes 1.17 以前にクラスターを最初にデプロイした場合は、CoreDNS マニフェストから廃止された単語を削除する必要があります。

    重要

    CoreDNS バージョン 1.7.0 に更新する前に、この作業を完了する必要があります。以前のバージョンに更新する場合でも、この手順を完了することをお勧めします。

    1. CoreDNS マニフェストにその行があるかどうかを確認します。

      kubectl get configmap coredns -n kube-system -o jsonpath='{$.data.Corefile}' | grep upstream

      出力が返されない場合、マニフェストにその行がないため、次の手順に進み、CoreDNS を更新できます。出力が返された場合は、その行を削除します。

    2. 以下のコマンドを使用して ConfigMapを編集し、ファイル内の upstream という単語がある行を削除します。このファイル内の他の部分は変更しないでください。行を削除したら、変更を保存します。

      kubectl edit configmap coredns -n kube-system -o yaml
  4. 現在の CoreDNS イメージを取得します。

    kubectl get deployment coredns \ --namespace kube-system \ -o=jsonpath='{$.spec.template.spec.containers[:1].image}'
  5. CoreDNS 1.8.3 以降に更新する場合は、endpointslices のアクセス許可を system:coredns Kubernetes clusterrole に追加する必要があります。

    kubectl edit clusterrole system:coredns -n kube-system

    ファイルの rules セクション内の既存の権限行の下に次の行を追加します。

    ... - apiGroups: - discovery.k8s.io resources: - endpointslices verbs: - list - watch ...
  6. して CoreDNS アドオンを更新して、602401143452 および region-code を前の手順で返された出力の値に置き換えます。1.8.7-eksbuild.2 をクラスターの推奨 CoreDNS バージョン以降にに置き換えます。

    kubectl set image --namespace kube-system deployment.apps/coredns \ coredns=602401143452.dkr.ecr.region-code.amazonaws.com/eks/coredns:v1.8.7-eksbuild.2