CoreDNS アドオンの管理 - Amazon EKS

CoreDNS アドオンの管理

CoreDNS は、Kubernetes クラスター DNS として機能する、フレキシブルで拡張可能な DNS サーバーです。少なくとも 1 つのノードで Amazon EKS クラスターを起動すると、クラスターにデプロイされたノード数に関係なく、デフォルトで CoreDNS イメージの 2 つのレプリカがデプロイされます。これらの CoreDNS ポッドは、クラスター内のすべてのポッドの名前解決を行います。クラスターに AWS Fargate プロファイル が含まれ、名前空間が Core DNS Deployment の名前空間と一致する場合、 CoreDNS ポッドを Fargate ノードにデプロイできます。CoreDNS の詳細については、Kubernetes ドキュメント の「Using CoreDNS for Service Discovery」を参照してください。

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

Amazon EKS がサポートするクラスターの各バージョンでデプロイされる CoreDNS バージョン
Kubernetes バージョン 1.21 1.20 1.19 1.18 1.17 1.16
CoreDNS 1.8.4 1.8.3 1.8.0 1.7.0 1.6.6 1.6.6

1.18 以降のクラスターで、CoreDNS Amazon EKS アドオンを追加していない場合は、CoreDNS Amazon EKS アドオンの追加 の手順を使用して追加できます。AWS Management Console を使用して 2021 年 5 月 19 日以降に 1.18 以降のクラスターを作成した場合、 CoreDNS Amazon EKS アドオンはクラスターにすでに追加されています。他のツールを使用して 1.18 以降のクラスターを作成し、CoreDNS Amazon EKS アドオンを使用する場合は、自分でクラスターに追加する必要があります。

1.18 以降のクラスターに CoreDNS Amazon EKS アドオンを追加した場合は、CoreDNS Amazon EKS アドオンの更新 および CoreDNS Amazon EKS アドオンの削除 セクションの手順を使用してこれを管理できます。Amazon EKS アドオンの詳細については、「Amazon EKS アドオン」を参照してください。

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

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. https://console.aws.amazon.com/eks/home#/clusters で Amazon EKS コンソールを開きます。

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

  3. [Configuration (設定)] タブ、[Add-ons (アドオン)] タブの順に選択します。

  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. https://console.aws.amazon.com/eks/home#/clusters で Amazon EKS コンソールを開きます。

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

  3. [Configuration (設定)] タブ、[Add-ons (アドオン)] タブの順に選択します。

  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. https://console.aws.amazon.com/eks/home#/clusters で Amazon EKS コンソールを開きます。

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

  3. [Configuration (設定)] タブ、[Add-ons (アドオン)] タブの順に選択します。

  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 のセルフマネージド型アドオンを更新する

1.17 以前のクラスター、または 1.18 以降のクラスターで 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

    ファイル内の既存の権限行の下に次の行を追加します。

    ... - apiGroups: - discovery.k8s.io resources: - endpointslices verbs: - list - watch ...
  6. <602401143452> (<> を含む)、<cn-north-1><com> の値を前のステップの出力で返された値に置き換え、CoreDNS アドオンを更新します。<1.8.4> をクラスターの CoreDNS の推奨バージョン以降に置き換えます:

    kubectl set image --namespace kube-system deployment.apps/coredns \ coredns=<602401143452>.dkr.ecr.<us-west-2>.amazonaws.<com>/eks/coredns:v<1.8.4>-eksbuild.1