全部产品
Search
文档中心

Container Service for Kubernetes:Tingkatkan CoreDNS yang tidak dikelola secara manual

更新时间:Nov 11, 2025

Jika komponen CoreDNS menggunakan versi lama tetapi tombol peningkatan tidak tersedia di halaman Manajemen Komponen pada konsol Container Service for Kubernetes (ACK), kluster Anda tidak mendukung peningkatan CoreDNS otomatis. Topik ini menjelaskan cara meningkatkan CoreDNS secara manual.

Prasyarat

Sambungkan ke kluster Anda menggunakan alat kubectl. Untuk informasi selengkapnya, lihat Sambungkan ke kluster menggunakan kubectl.

Sebelum memulai

  • Jika Anda menggunakan IPVS sebagai mode load balancing kube-proxy, Anda mungkin mengalami timeout atau kegagalan resolusi DNS di seluruh kluster hingga lima menit setelah peningkatan CoreDNS selesai. Anda dapat mengurangi dampak bug IPVS ini dengan salah satu cara berikut:

  • Proses peningkatan memerlukan waktu sekitar 2 menit. Waktu aktual yang dibutuhkan dapat bervariasi tergantung pada jumlah replika CoreDNS di kluster. Replika lama tidak dihentikan, sehingga resolusi DNS untuk aplikasi Anda tetap tidak terpengaruh.

Periksa versi CoreDNS saat ini

Gunakan konsol

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Pada halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi kiri, pilih Workloads > Deployments.

  3. Di bagian atas halaman Stateless, atur Namespace ke kube-system dan lihat versi CoreDNS.dns

Gunakan kubectl

Jalankan perintah berikut untuk memeriksa versi CoreDNS saat ini:

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

Keluaran yang diharapkan:

registry-vpc.cn-hangzhou.aliyuncs.com/acs/coredns:1.6.2 # 1.6.2 adalah versi yang digunakan dalam contoh ini.

Konfirmasi versi target untuk peningkatan

Sebelum melakukan peningkatan, tentukan versi target CoreDNS. Tabel berikut menjelaskan kompatibilitas antara versi CoreDNS dan versi kluster. Anda harus menggunakan versi CoreDNS terbaru yang kompatibel dengan kluster Anda.

Versi Kubernetes

Versi CoreDNS

1.11 hingga 1.16

v1.6.2 (Tidak lagi dipelihara)

1.14.8 hingga 1.22

v1.6.7 (Tidak lagi dipelihara), v1.7.0

1.20.4 dan yang lebih baru

v1.8.4, v1.9.3

Penting

v1.8.4 dan v1.9.3 memiliki beberapa sub-versi, seperti v1.8.4.3-644f4735-aliyun dan v1.9.3.1-5e7ba42d-aliyun. Untuk informasi selengkapnya, lihat CoreDNS.

1.21 dan yang lebih baru

v1.11.3

Peningkatan manual

Gunakan konsol

  1. (Opsional) Anda dapat mengganti bidang proxy dengan bidang forward.

    Plugin Proxy telah ditinggalkan di CoreDNS v1.6.2. Jika Anda meningkatkan dari versi sebelum v1.6.2 ke v1.6.2 atau versi yang lebih baru, Anda harus mengubah konfigurasi CoreDNS secara manual sebagai berikut.

    Ubah konfigurasi CoreDNS

    1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

    2. Pada halaman Clusters, klik nama kluster yang ingin Anda ubah. Di panel navigasi kiri, pilih Configurations > ConfigMaps.

    3. Di bagian atas halaman Configuration Items, atur Namespace ke kube-system. Kemudian, temukan coredns dan klik Edit YAML di kolom Actions.

    4. Di panel View YAML, ubah proxy menjadi forward dan klik OK.forward

  2. Perbarui versi citra CoreDNS.

    1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

    2. Pada halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi kiri, pilih Workloads > Deployments.

    3. Di halaman Stateless, atur Namespace ke kube-system. Temukan coredns. Di kolom Actions, pilih image.png > Edit YAML.

    4. Di halaman Edit YAML, perbarui versi di bidang image dan klik Update.image

  3. Verifikasi bahwa peningkatan berhasil.

    1. Jalankan perintah berikut untuk memeriksa versi CoreDNS saat ini.

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

      Keluaran yang diharapkan:

      registry-cn-shanghai-vpc.ack.aliyuncs.com/acs/coredns:v1.9.3.10-5e7ba42d-aliyun
    2. Jalankan perintah berikut untuk memeriksa apakah semua Pod CoreDNS di kluster berada dalam status Running.

      kubectl get pods -n kube-system | grep coredns

      Keluaran yang diharapkan:

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

Gunakan kubectl

  1. (Opsional) Anda dapat mengganti bidang proxy dengan bidang forward.

    Plugin Proxy telah ditinggalkan di CoreDNS v1.6.2. Jika Anda meningkatkan dari versi sebelum v1.6.2 ke v1.6.2 atau versi yang lebih baru, Anda harus mengubah konfigurasi CoreDNS secara manual sebagai berikut.

    Ubah konfigurasi CoreDNS

    1. Jalankan perintah berikut untuk mengedit berkas konfigurasi CoreDNS. Ubah proxy menjadi forward, lalu simpan perubahan dan keluar.

      kubectl edit configmap/coredns -n kube-system
    2. Jalankan perintah berikut untuk melihat log Pod CoreDNS dan pastikan CoreDNS telah memuat ulang konfigurasi.

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

      Keluaran yang diharapkan sebagai berikut. Jika keluaran berisi plugin/reload, berarti konfigurasi CoreDNS telah dimuat ulang.

      .: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. Jalankan perintah berikut untuk mengedit konfigurasi CoreDNS. Perbarui versi di bidang image, lalu simpan perubahan dan keluar.

    kubectl edit deployment/coredns -n kube-system
  3. Verifikasi bahwa peningkatan berhasil.

    1. Jalankan perintah berikut untuk memeriksa versi CoreDNS saat ini.

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

      Keluaran yang diharapkan:

      registry-cn-shanghai-vpc.ack.aliyuncs.com/acs/coredns:v1.9.3.10-5e7ba42d-aliyun
    2. Jalankan perintah berikut untuk memeriksa apakah semua Pod CoreDNS di kluster berada dalam status Running.

      kubectl get pods -n kube-system | grep coredns

      Keluaran yang diharapkan:

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

Konfigurasikan timeout UDP untuk kluster IPVS

Jika kluster Anda menggunakan mode IPVS kube-proxy, kebijakan persistensi sesi IPVS dapat menyebabkan kegagalan resolusi DNS intermiten di seluruh kluster selama lima menit setelah peningkatan. Untuk mengurangi jumlah kegagalan resolusi, Anda dapat mengurangi timeout persistensi sesi UDP IPVS menjadi 10 detik. Jika kluster Anda memiliki layanan berbasis UDP, evaluasi dampak potensial dari operasi ini sebelum melanjutkan.

Jika kluster Anda bukan kluster IPVS, Anda dapat mengabaikan bagian ini. Untuk informasi selengkapnya tentang cara memeriksa modus proxy kube-proxy, lihat Lihat informasi kluster.

For Kubernetes 1.18 or later clusters

Using the console

  1. Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.

  2. Pada halaman Clusters, klik nama kluster yang ingin Anda ubah. Di panel navigasi kiri, pilih Configurations > ConfigMaps.

  3. Di halaman ConfigMaps, pilih namespace kube-system. Temukan ConfigMap kube-proxy-worker dan klik Edit YAML di kolom Actions.

  4. Di panel View YAML, tambahkan udpTimeout: 10s di bawah bidang ipvs dan klik OK.

    apiVersion: v1
    data:
      config.conf: |
        apiVersion: kubeproxy.config.k8s.io/v1alpha1
        kind: KubeProxyConfiguration
        # Bidang lain yang tidak relevan dihilangkan.
        mode: ipvs
        # Jika kunci ipvs tidak ada, tambahkan.
        ipvs:
          udpTimeout: 10s
  5. Buat ulang semua Pod bernama kube-proxy-worker.

    1. Di halaman Cluster Information, di panel navigasi kiri, pilih Workloads > DaemonSets.

    2. Di daftar DaemonSet, temukan dan klik kube-proxy-worker.

    3. Di halaman kube-proxy-worker, klik tab Pods. Di baris sebuah Pod, pilih More > Delete, lalu klik OK.

      Ulangi langkah ini untuk menghapus semua Pod. Setelah Pod dihapus, sistem secara otomatis membuat ulang Pod tersebut.

  6. Verifikasi bahwa timeout UDP telah dikonfigurasi.

    1. Jalankan perintah berikut untuk menginstal ipvsadm.

      ipvsadm adalah alat manajemen untuk modul IPVS. Untuk informasi selengkapnya, lihat ipvsadm.

      sudo yum install -y ipvsadm
    2. Jalankan perintah berikut pada node ECS apa pun di kluster dan periksa angka ketiga dalam keluarannya.

      sudo ipvsadm -L --timeout

      Jika angka ketiga dalam keluaran adalah 10, timeout UDP untuk kluster IPVS berhasil diubah.

      Setelah perubahan berhasil, tunggu minimal lima menit sebelum melanjutkan ke langkah berikutnya.

Using the command line

  1. Jalankan perintah berikut untuk mengedit berkas konfigurasi kube-proxy-worker.

    kubectl -n kube-system edit configmap kube-proxy-worker
  2. Di berkas konfigurasi kube-proxy, tambahkan udpTimeout: 10s di bawah bidang ipvs. Lalu, simpan berkas dan keluar.

    apiVersion: v1
    data:
      config.conf: |
        apiVersion: kubeproxy.config.k8s.io/v1alpha1
        kind: KubeProxyConfiguration
        # Bidang lain yang tidak relevan dihilangkan.
        mode: ipvs
        # Jika kunci ipvs tidak ada, tambahkan.
        ipvs:
          udpTimeout: 10s
  3. Jalankan perintah berikut untuk membuat ulang semua Pod bernama kube-proxy-worker.

    1. Jalankan perintah berikut untuk melihat informasi Pod yang ada.

      kubectl -n kube-system get pod -o wide | grep kube-proxy-worker
    2. Jalankan perintah berikut untuk menghapus Pod yang Anda temukan pada langkah sebelumnya. Sistem secara otomatis membuat ulang Pod bernama kube-proxy-worker.

      kubectl -n kube-system delete pod <kube-proxy-worker-****>
      Ganti <kube-proxy-worker-****> dengan nama Pod yang Anda temukan pada langkah sebelumnya.
  4. Verifikasi bahwa timeout UDP telah dikonfigurasi.

    1. Jalankan perintah berikut untuk menginstal ipvsadm.

      ipvsadm adalah alat manajemen untuk modul IPVS. Untuk informasi selengkapnya, lihat ipvsadm.

      sudo yum install -y ipvsadm
    2. Jalankan perintah berikut pada node ECS apa pun di kluster dan periksa angka ketiga dalam keluarannya.

      sudo ipvsadm -L --timeout

      Jika angka ketiga dalam keluaran adalah 10, timeout UDP untuk kluster IPVS berhasil diubah.

      Setelah perubahan berhasil, tunggu minimal lima menit sebelum melanjutkan ke langkah berikutnya.

For Kubernetes 1.16 or earlier clusters

Komponen kube-proxy di kluster yang menjalankan versi ini tidak mendukung parameter udpTimeout. Anda dapat menggunakan Operation Orchestration Service (OOS) untuk menjalankan perintah ipvsadm secara batch di semua node kluster guna menyesuaikan konfigurasi timeout UDP. Perintahnya sebagai berikut:

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

Untuk informasi selengkapnya tentang operasi batch di OOS, lihat Operasi batch instans.

Langkah selanjutnya

Setelah peningkatan selesai, Anda dapat mengoptimalkan dan mengonfigurasi CoreDNS. Untuk informasi selengkapnya, lihat Optimalkan konfigurasi CoreDNS.