CoreDNS のインストールまたはアップグレード - Amazon EKS

英語の翻訳が提供されている場合で、内容が矛盾する場合には、英語版がオリジナルとして取り扱われます。翻訳は機械翻訳により提供されています。

CoreDNS のインストールまたはアップグレード

CoreDNS は、Kubernetes バージョン 1.14 以降の Amazon EKS クラスターでサポートされています。Kubernetes バージョン 1.10 で作成されたクラスターは、デフォルトの DNS およびサービス検出プロバイダーとして kube-dns に付属していました。1.10 クラスターから更新し、DNS とサービス検出に CoreDNS を使用する場合は、CoreDNS をインストールして、kube-dns を削除する必要があります。

クラスターですでに CoreDNS が実行されているかどうかを確認するには、次のコマンドを使用します。

kubectl get pod -n kube-system -l k8s-app=kube-dns

出力のポッド名に coredns と示されている場合、CoreDNS はすでにクラスターで実行されています。それ以外の場合は、以下の手順を使用して、DNS およびサービス検出プロバイダーを CoreDNS に更新します。

注記

CoreDNS のサービスは、引き続き下位互換性のため kube-dns と呼ばれます。

kubectl を使用して、更新された Amazon EKS クラスターに CoreDNS をインストールするには

  1. クラスターの kube-dns デプロイに {"eks.amazonaws.com/component": "kube-dns"} セレクタを追加します。これにより、2 つの DNS デプロイメントが同じラベルセットのコントロールをめぐって競合するのを防ぐことができます。

    kubectl patch -n kube-system deployment/kube-dns --patch \ '{"spec":{"selector":{"matchLabels":{"eks.amazonaws.com/component":"kube-dns"}}}}'
  2. CoreDNS をクラスターにデプロイします。

    1. クラスターの DNS IP アドレスを DNS_CLUSTER_IP 環境変数に設定します。

      export DNS_CLUSTER_IP=$(kubectl get svc -n kube-system kube-dns -o jsonpath='{.spec.clusterIP}')
    2. 設定 REGION 環境変数をクラスタの AWS region-code.

      export REGION="region-code"
    3. Amazon EKS リソースバケットから CoreDNS マニフェストをダウンロードします。

      curl -o dns.yaml https://amazon-eks.s3.us-west-2.amazonaws.com/cloudformation/2020-08-12/dns.yaml
    4. dns.yaml ファイルのプレースホルダーを環境変数の値に置き換え、更新後のマニフェストをクラスターに適用します。次のコマンドでは、1 つのステップでこれを完了することができます。

      cat dns.yaml | sed -e "s/REGION/$REGION/g" | sed -e "s/DNS_CLUSTER_IP/$DNS_CLUSTER_IP/g" | kubectl apply -f -
    5. クラスターから coredns ポッド名を取得します。

      COREDNS_POD=$(kubectl get pod -n kube-system -l eks.amazonaws.com/component=coredns \ -o jsonpath='{.items[0].metadata.name}')
    6. coredns ポッドに対してクエリを実行し、リクエストを受信していることを確認します。

      kubectl get --raw /api/v1/namespaces/kube-system/pods/$COREDNS_POD:9153/proxy/metrics \ | grep 'coredns_dns_request_count_total'
      注記

      クラスターの DNS リクエストの回数に応じて、出力が正常に返るまでには数分かかる場合があります。

      次の正常な出力において、23 は DNS リクエストの合計数です。

      # HELP coredns_dns_request_count_total Counter of DNS requests made per zone, protocol and family.
      # TYPE coredns_dns_request_count_total counter
      coredns_dns_request_count_total{family="1",proto="udp",server="dns://:53",zone="."} 23
  3. CoreDNS のアップグレード」のステップを実行して、CoreDNS をクラスター用の推奨バージョンにアップグレードします。

  4. kube-dns デプロイをゼロレプリカにスケールダウンします。

    kubectl scale -n kube-system deployment/kube-dns --replicas=0
  5. 古い kube-dns リソースをクリーンアップします。

    kubectl delete -n kube-system deployment/kube-dns serviceaccount/kube-dns configmap/kube-dns

CoreDNS のアップグレード

  1. クラスターの coredns デプロイの現在のバージョンを確認します。

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

    出力:

    coredns:v1.1.3

    対応する Kubernetes バージョンに対して推奨される coredns のバージョンは以下のとおりです。

    Kubernetes バージョン 1.17 1.16 1.15 1.14
    CoreDNS 1.6.6 1.6.6 1.6.6 1.6.6
  2. coredns の現在のバージョンが 1.5.0 以降かつ推奨バージョンより前の場合、このステップをスキップしてください。現在のバージョンが 1.5.0 より前の場合、proxy プラグインではなく forward プラグインを使用するように coredns の設定マップを変更する必要があります。

    1. 次のコマンドを使用して設定マップを開きます。

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

      proxy . /etc/resolv.conf
  3. 現在の coredns イメージを取得します。

    kubectl get deployment coredns --namespace kube-system -o=jsonpath='{$.spec.template.spec.containers[:1].image}'
  4. coredns を推奨バージョンに更新します。これには、前のステップの出力を取得し、バージョンタグを、クラスターに対して推奨される coredns バージョンに置き換えます。

    kubectl set image --namespace kube-system deployment.apps/coredns \ coredns=602401143452.dkr.ecr.us-west-2.amazonaws.com/eks/coredns:v1.6.6-eksbuild.1
    注記

    最新の1.14 バージョンにアップデートする場合は、上のイメージの末尾から -eksbuild.1 を削除してください。