すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:管理外の CoreDNS を手動でアップグレードする

最終更新日:Nov 09, 2025

CoreDNS コンポーネントが古いバージョンであるにもかかわらず、Container Service for Kubernetes (ACK) コンソールの [コンポーネント管理] ページでアップグレードボタンが利用できない場合、お使いのクラスターは CoreDNS の自動アップグレードをサポートしていません。このトピックでは、CoreDNS を手動でアップグレードする方法について説明します。

前提条件

kubectl ツールを使用してクラスターに接続します。詳細については、「kubectl を使用してクラスターに接続する」をご参照ください。

開始する前に

  • kube-proxy のロードバランシングモードとして IPVS を使用している場合、CoreDNS のアップグレード完了後、最大 5 分間、クラスター全体の DNS 解像度のタイムアウトまたは失敗が発生する可能性があります。この IPVS のバグの影響は、次のいずれかの方法で軽減できます。

  • アップグレードプロセスには約 2 分かかります。実際に必要な時間は、クラスター内の CoreDNS レプリカの数によって異なる場合があります。古いレプリカは停止されません。これにより、アプリケーションの DNS 解像度が影響を受けないことが保証されます。

現在の CoreDNS バージョンの確認

コンソールの使用

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. クラスター ページで、管理するクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、ワークロード > 展開 を選択します。

  3. [ステートレス] ページの上部で、[名前空間] を kube-system に設定し、CoreDNS のバージョンを表示します。dns

kubectl の使用

次のコマンドを実行して、現在の CoreDNS バージョンを確認します。

kubectl get deployment coredns -n kube-system -o jsonpath="{.spec.template.spec.containers[0].image}"

期待される出力:

registry-vpc.cn-hangzhou.aliyuncs.com/acs/coredns:1.6.2 # 1.6.2 はこの例で使用されているバージョンです。

ターゲットアップグレードバージョンの確認

アップグレードする前に、ターゲットの CoreDNS バージョンを決定します。次の表に、CoreDNS バージョンとクラスターバージョンの互換性を示します。クラスターと互換性のある最新の CoreDNS バージョンを使用する必要があります。

Kubernetes バージョン

CoreDNS バージョン

1.11 から 1.16

v1.6.2 (メンテナンス終了)

1.14.8 から 1.22

v1.6.7 (メンテナンス終了)、v1.7.0

1.20.4 以降

v1.8.4、v1.9.3

重要

v1.8.4 と v1.9.3 には、v1.8.4.3-644f4735-aliyunv1.9.3.1-5e7ba42d-aliyun などの複数のサブバージョンがあります。詳細については、「CoreDNS」をご参照ください。

1.21 以降

v1.11.3

手動アップグレード

コンソールの使用

  1. (オプション) proxy フィールドを forward フィールドに置き換えることができます。

    Proxy プラグインは CoreDNS v1.6.2 で非推奨になりました。v1.6.2 より前のバージョンから v1.6.2 以降のバージョンにアップグレードする場合は、次のように CoreDNS 構成を手動で変更する必要があります。

    CoreDNS 構成の変更

    1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

    2. クラスター ページで、変更するクラスターの名前をクリックします。左側のナビゲーションウィンドウで、[設定] > [ConfigMap] を選択します。

    3. [設定項目] ページの上部で、[名前空間] を kube-system に設定します。次に、coredns を見つけ、[アクション] 列の [YAML の編集] をクリックします。

    4. [YAML の表示] パネルで、[proxy][forward] に変更し、[OK] をクリックします。forward

  2. CoreDNS イメージのバージョンを更新します。

    1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

    2. クラスター ページで、管理するクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、ワークロード > 展開 を選択します。

    3. [ステートレス] ページで、[名前空間] を kube-system に設定します。[coredns] を見つけます。[アクション] 列で、image.png > [YAML の編集] を選択します。

    4. [YAML の編集] ページで、image フィールドのバージョンを更新し、[更新] をクリックします。image

  3. アップグレードが成功したことを確認します。

    1. 次のコマンドを実行して、現在の CoreDNS バージョンを確認します。

      kubectl get deployment coredns -n kube-system -o jsonpath="{.spec.template.spec.containers[0].image}"

      期待される出力:

      registry-cn-shanghai-vpc.ack.aliyuncs.com/acs/coredns:v1.9.3.10-5e7ba42d-aliyun
    2. 次のコマンドを実行して、クラスター内のすべての CoreDNS Pod が実行中状態であることを確認します。

      kubectl get pods -n kube-system | grep coredns

      期待される出力:

      coredns-78d4b8****-6g62w                           1/1     Running   0          9d
      coredns-78d4b8****-n6wjm                           1/1     Running   0          9d

kubectl の使用

  1. (オプション) proxy フィールドを forward フィールドに置き換えることができます。

    Proxy プラグインは CoreDNS v1.6.2 で非推奨になりました。v1.6.2 より前のバージョンから v1.6.2 以降のバージョンにアップグレードする場合は、次のように CoreDNS 構成を手動で変更する必要があります。

    CoreDNS 構成の変更

    1. 次のコマンドを実行して CoreDNS 構成ファイルを編集します。proxyforward に変更し、変更を保存して終了します。

      kubectl edit configmap/coredns -n kube-system
    2. 次のコマンドを実行して CoreDNS Pod のログを表示し、CoreDNS が構成を再読み込みしたことを確認します。

      kubectl logs coredns-78d4b8bd88-n6wjm -n kube-system

      期待される出力は次のとおりです。出力に plugin/reload が含まれている場合、CoreDNS 構成が再読み込みされたことを示します。

      .:53
      [INFO] plugin/reload: Running configuration MD5 = 71c5f1ff539d304c630521f315dc2ac2
      CoreDNS-1.6.7
      linux/amd64, go1.13.6, da7f65b
      [INFO] 127.0.0.1:48329 - 42313 "HINFO IN 1108347002237365533.4506541768939609094. udp 57 false 512" NXDOMAIN qr,rd,ra 132 0.008874794s
  2. 次のコマンドを実行して CoreDNS 構成を編集します。image フィールドのバージョンを更新し、変更を保存して終了します。

    kubectl edit deployment/coredns -n kube-system
  3. アップグレードが成功したことを確認します。

    1. 次のコマンドを実行して、現在の CoreDNS バージョンを確認します。

      kubectl get deployment coredns -n kube-system -o jsonpath="{.spec.template.spec.containers[0].image}"

      期待される出力:

      registry-cn-shanghai-vpc.ack.aliyuncs.com/acs/coredns:v1.9.3.10-5e7ba42d-aliyun
    2. 次のコマンドを実行して、クラスター内のすべての CoreDNS Pod が実行中状態であることを確認します。

      kubectl get pods -n kube-system | grep coredns

      期待される出力:coredns-78d4b8****-6g62w 1/1 Running 0 9d coredns-78d4b8****-n6wjm 1/1 Running 0 9d

      coredns-78d4b8****-6g62w                           1/1     Running   0          9d
      coredns-78d4b8****-n6wjm                           1/1     Running   0          9d

IPVS クラスターの UDP タイムアウトの設定

クラスターが kube-proxy IPVS モードを使用している場合、IPVS セッション維持ポリシーにより、アップグレード後 5 分間、クラスター全体で断続的な DNS 解像度の失敗が発生する可能性があります。解像度の失敗回数を減らすには、IPVS UDP セッション維持のタイムアウトを 10 秒に短縮できます。クラスターに UDP ベースのサービスがある場合は、続行する前にこの操作の潜在的な影響を評価してください。

クラスターが IPVS クラスターでない場合は、このセクションを無視できます。kube-proxy プロキシモードの確認方法の詳細については、「クラスター情報の表示」をご参照ください。

Kubernetes 1.18 以降のクラスターの場合

コンソールの使用

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. クラスター ページで、変更するクラスターの名前をクリックします。左側のナビゲーションウィンドウで、[設定] > [ConfigMap] を選択します。

  3. [ConfigMap] ページで、[kube-system] 名前空間を選択します。kube-proxy-worker ConfigMap を見つけ、[アクション] 列の [YAML の編集] をクリックします。

  4. [YAML の表示] パネルで、ipvs フィールドの下に udpTimeout: 10s を追加し、[OK] をクリックします。

    apiVersion: v1
    data:
      config.conf: |
        apiVersion: kubeproxy.config.k8s.io/v1alpha1
        kind: KubeProxyConfiguration
        # 他の無関係なフィールドは省略されます。
        mode: ipvs
        # ipvs キーが存在しない場合は、追加します。
        ipvs:
          udpTimeout: 10s
  5. kube-proxy-worker という名前のすべての Pod を再作成します。

    1. [クラスター情報] ページの左側のナビゲーションウィンドウで、[ワークロード] > [DaemonSet] を選択します。

    2. DaemonSet リストで、[kube-proxy-worker] を見つけてクリックします。

    3. [kube-proxy-worker] ページで、[Pod] タブをクリックします。Pod の行で、[その他] > [削除] を選択し、[OK] をクリックします。

      このステップを繰り返して、すべての Pod を削除します。Pod が削除されると、システムは自動的にそれらを再作成します。

  6. UDP タイムアウトが設定されていることを確認します。

    1. 次のコマンドを実行して [ipvsadm] をインストールします。

      [ipvsadm] は IPVS モジュールの管理ツールです。詳細については、「ipvsadm」をご参照ください。

      sudo yum install -y ipvsadm
    2. クラスター内の任意の ECS ノードで次のコマンドを実行し、出力の 3 番目の数値を確認します。

      sudo ipvsadm -L --timeout

      出力の 3 番目の数値が 10 の場合、IPVS クラスターの UDP タイムアウトは正常に変更されています。

      変更が成功したら、次のステップに進む前に少なくとも 5 分間待ちます。

コマンドラインの使用

  1. 次のコマンドを実行して、kube-proxy-worker 構成ファイルを編集します。

    kubectl -n kube-system edit configmap kube-proxy-worker
  2. kube-proxy 構成ファイルで、ipvs フィールドの下に udpTimeout: 10s を追加します。次に、ファイルを保存して終了します。

    apiVersion: v1
    data:
      config.conf: |
        apiVersion: kubeproxy.config.k8s.io/v1alpha1
        kind: KubeProxyConfiguration
        # 他の無関係なフィールドは省略されます。
        mode: ipvs
        # ipvs キーが存在しない場合は、追加します。
        ipvs:
          udpTimeout: 10s
  3. 次のコマンドを実行して、kube-proxy-worker という名前のすべての Pod を再作成します。

    1. 次のコマンドを実行して、既存の Pod に関する情報を表示します。

      kubectl -n kube-system get pod -o wide | grep kube-proxy-worker
    2. 次のコマンドを実行して、前のステップで見つけた Pod を削除します。システムは、kube-proxy-worker という名前の Pod を自動的に再作成します。

      kubectl -n kube-system delete pod <kube-proxy-worker-****>
      <kube-proxy-worker-****> を前のステップで見つけた Pod の名前に置き換えます。
  4. UDP タイムアウトが設定されていることを確認します。

    1. 次のコマンドを実行して [ipvsadm] をインストールします。

      [ipvsadm] は IPVS モジュールの管理ツールです。詳細については、「ipvsadm」をご参照ください。

      sudo yum install -y ipvsadm
    2. クラスター内の任意の ECS ノードで次のコマンドを実行し、出力の 3 番目の数値を確認します。

      sudo ipvsadm -L --timeout

      出力の 3 番目の数値が 10 の場合、IPVS クラスターの UDP タイムアウトは正常に変更されています。

      変更が成功したら、次のステップに進む前に少なくとも 5 分間待ちます。

Kubernetes 1.16 以前のクラスターの場合

これらのバージョンを実行するクラスターの kube-proxy コンポーネントは、udpTimeout パラメーターをサポートしていません。Operation Orchestration Service (OOS) を使用して、すべてのクラスターノードで ipvsadm コマンドをバッチで実行し、UDP タイムアウト構成を調整できます。コマンドは次のとおりです。

sudo yum install -y ipvsadm
sudo ipvsadm -L --timeout > /tmp/ipvsadm_timeout_old
sudo ipvsadm --set 900 120 10
sudo ipvsadm -L --timeout > /tmp/ipvsadm_timeout_new
diff /tmp/ipvsadm_timeout_old /tmp/ipvsadm_timeout_new

OOS でのバッチ操作の詳細については、「インスタンスの一括操作」をご参照ください。

次のステップ

アップグレードが完了したら、CoreDNS を最適化および設定できます。詳細については、「CoreDNS 構成の最適化」をご参照ください。