All Products
Search
Document Center

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

Last Updated:Aug 27, 2026

Perbarui CoreDNS secara manual ketika opsi Upgrade tidak tersedia di halaman Add-ons Konsol ACK.

Prasyarat

Anda memerlukan:

Catatan pembaruan

  • Jika kube-proxy menggunakan mode IP Virtual Server (IPVS), semua kueri DNS mungkin gagal atau timeout selama sekitar 5 menit setelah pembaruan CoreDNS. Hindari hal ini dengan salah satu metode berikut:

  • Pembaruan membutuhkan waktu sekitar 2 menit, tergantung pada jumlah replika CoreDNS. Replika yang ada tidak dihentikan, sehingga resolusi layanan tidak terpengaruh.

Periksa versi CoreDNS

Konsol

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

  2. Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Deployments.

  3. Di halaman Deployments, atur Namespace ke kube-system dan periksa versi CoreDNS di kolom Image. dns

kubectl

Periksa versi CoreDNS:

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

Output yang diharapkan:

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

Konfirmasi versi pembaruan

Tabel berikut mencantumkan versi CoreDNS yang kompatibel dengan setiap rentang versi Kubernetes. Gunakan versi kompatibel terbaru.

Rentang versi Kubernetes

Versi CoreDNS

1.11 hingga 1.16

1.6.2 (tidak didukung lagi)

1.14.8 hingga 1.22

1.6.7 (tidak didukung lagi) dan 1.7.0

1.20.4 dan yang lebih baru

1.8.4 dan 1.9.3

Penting

v1.8.4 dan v1.9.3 memiliki beberapa versi minor, seperti v1.8.4.3-644f4735-aliyun dan v1.9.3.1-5e7ba42d-aliyun. Lihat CoreDNS.

1.21 dan yang lebih baru

1.11.3

Perbarui secara manual

Konsol

  1. (Opsional) Ganti bidang proxy dengan bidang forward.

    Plugin Proxy telah ditinggalkan di CoreDNS v1.6.2. Jika melakukan peningkatan dari versi sebelumnya, ubah konfigurasi CoreDNS sebagai berikut.

    Ubah konfigurasi CoreDNS

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

    2. Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Configurations > ConfigMaps.

    3. Di halaman ConfigMap, atur Namespace ke kube-system. Temukan ConfigMap coredns dan klik Edit YAML di kolom Actions.

    4. Di panel View in YAML, ganti proxy dengan forward dan klik OK. forward

      Di editor YAML ConfigMap coredns, temukan baris plugin forward dan ubah sesuai kebutuhan. ConfigMap lengkap ditampilkan di bawah ini:

      apiVersion: v1
      data:
        Corefile: |-
          .:53 {
            autopath @kubernetes
            cache 30
            errors
            forward . /etc/resolv.conf
            health
            kubernetes cluster.local in-addr.arpa ip6.arpa {
                pods verified
                fallthrough in-addr.arpa ip6.arpa
            }
            loadbalance
            loop
            prometheus :9153
            ready
            reload
          }
      kind: ConfigMap
  2. Ubah versi image CoreDNS.

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

    2. Di halaman Clusters, klik nama kluster Anda. Di panel navigasi kiri, klik Workloads > Deployments.

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

    4. Di kotak dialog Edit YAML, ubah nomor versi di bidang image dan klik Update. image

      Di dialog edit YAML, temukan konfigurasi Deployment CoreDNS dan pastikan versi image di bidang image (misalnya, 1.6.2). Cuplikan YAML penting:

      labelSelector:
                matchExpressions:
                  - key: k8s-app
                    operator: In
                    values:
                      - kube-dns
              topologyKey: kubernetes.io/hostname
            weight: 100
        containers:
        - args:
          - '-conf'
          - /etc/coredns/Corefile
          image: 'registry-vpc.cn-hangzhou.aliyuncs.com/acs/coredns:1.6.2'
          imagePullPolicy: IfNotPresent
          livenessProbe:
            failureThreshold: 5
            httpGet:
              ...
  3. Verifikasi pembaruan.

    1. Periksa versi CoreDNS:

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

      Output yang diharapkan:

      registry-cn-shanghai-vpc.ack.aliyuncs.com/acs/coredns:v1.9.3.10-5e7ba42d-aliyun
    2. Periksa apakah semua Pod CoreDNS berada dalam status Running:

      kubectl get pods -n kube-system | grep coredns

      Output yang diharapkan:

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

kubectl

  1. (Opsional) Ganti bidang proxy dengan bidang forward.

    Plugin Proxy telah ditinggalkan di CoreDNS v1.6.2. Jika melakukan peningkatan dari versi sebelumnya, ubah konfigurasi CoreDNS sebagai berikut.

    Ubah konfigurasi CoreDNS

    1. Ganti proxy dengan forward di ConfigMap CoreDNS, lalu simpan dan keluar:

      kubectl edit configmap/coredns -n kube-system
    2. Periksa log Pod CoreDNS untuk memverifikasi bahwa konfigurasi baru telah dimuat:

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

      Jika output mencakup plugin/reload, konfigurasi CoreDNS telah dimuat. Output yang diharapkan:

      .: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. Ubah nomor versi di bidang image pada Deployment CoreDNS, lalu simpan dan keluar:

    kubectl edit deployment/coredns -n kube-system
  3. Verifikasi pembaruan.

    1. Periksa versi CoreDNS:

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

      Output yang diharapkan:

      registry-cn-shanghai-vpc.ack.aliyuncs.com/acs/coredns:v1.9.3.10-5e7ba42d-aliyun
    2. Periksa apakah semua Pod CoreDNS berada dalam status Running:

      kubectl get pods -n kube-system | grep coredns

      Output 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 kube-proxy dalam mode IPVS, kurangi timeout persistensi sesi UDP IPVS menjadi 10 detik untuk membatasi kegagalan DNS setelah peningkatan.

Jika kluster Anda memiliki layanan berbasis UDP, evaluasi dampak pengurangan timeout UDP sebelum melanjutkan.

Kubernetes 1.18 atau yang lebih baru

Menggunakan konsol

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

  2. Di halaman Clusters, klik nama kluster. Pilih Configurations > ConfigMaps di panel navigasi kiri.

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

  4. Di panel Edit 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 kube-proxy-worker.

    1. Di halaman detail kluster, pilih Workloads > DaemonSets di panel navigasi kiri.

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

    3. Di halaman kube-proxy-worker, klik tab Pods. Untuk setiap Pod, pilih More > Delete dan klik OK. Sistem akan membuat ulang Pod tersebut secara otomatis.

  6. Verifikasi konfigurasi timeout UDP.

    1. Instal ipvsadm:

      sudo yum install -y ipvsadm
    2. Di salah satu node ECS dalam kluster, jalankan:

      sudo ipvsadm -L --timeout

      Jika angka ketiga dalam output adalah 10, timeout UDP telah dikonfigurasi dengan benar.

      Important: Setelah mengonfigurasi timeout, tunggu minimal lima menit sebelum meningkatkan CoreDNS.

Menggunakan command line

  1. Edit ConfigMap kube-proxy-worker:

    kubectl -n kube-system edit configmap kube-proxy-worker
  2. Tambahkan udpTimeout: 10s di bawah bidang ipvs, lalu simpan 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. Buat ulang semua Pod kube-proxy-worker.

    1. Daftar Pod kube-proxy-worker:

      kubectl -n kube-system get pod -o wide | grep kube-proxy-worker
    2. Hapus setiap Pod. Sistem akan membuat ulang Pod tersebut secara otomatis.

      kubectl -n kube-system delete pod <kube-proxy-worker-****>

      Ganti <kube-proxy-worker-****> dengan nama Pod dari langkah sebelumnya.

  4. Verifikasi konfigurasi timeout UDP.

    1. Instal ipvsadm:

      sudo yum install -y ipvsadm
    2. Di salah satu node ECS dalam kluster, jalankan:

      sudo ipvsadm -L --timeout

      Jika angka ketiga dalam output adalah 10, timeout UDP telah dikonfigurasi dengan benar.

      Important: Setelah mengonfigurasi timeout, tunggu minimal lima menit sebelum meningkatkan CoreDNS.

Kubernetes 1.16 atau yang lebih lama

kube-proxy di kluster yang menjalankan Kubernetes 1.16 atau yang lebih lama tidak mendukung parameter udpTimeout. Gunakan Operation Orchestration Service (OOS) untuk menjalankan perintah ipvsadm ini secara batch di semua node kluster:

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

Lihat Operasi batch instans untuk menjalankan operasi batch di OOS.

Langkah selanjutnya

Setelah pembaruan, optimalkan konfigurasi CoreDNS untuk workload Anda.