All Products
Search
Document Center

Container Service for Kubernetes:Peningkatan otomatis untuk CoreDNS yang tidak dikelola

Last Updated:Mar 26, 2026

Gunakan panduan ini untuk memeriksa prasyarat peningkatan, mengurangi risiko yang diketahui, dan menjalankan peningkatan CoreDNS otomatis pada Container Service for Kubernetes (ACK).

Prasyarat

Sebelum memulai, pastikan Anda telah:

Sebelum melakukan peningkatan

Tinjau item berikut sebelum memulai peningkatan. Setiap item menjelaskan suatu kondisi atau risiko yang memerlukan tindakan.

Cara kerja peningkatan

ACK meningkatkan CoreDNS menggunakan pembaruan bergulir (rolling update). Pod baru harus berjalan sebelum Pod lama dihapus, sehingga jumlah replika tetap sama sepanjang proses. Peningkatan ini menggunakan terminasi graceful—replika lama tidak langsung dihentikan. Proses ini memakan waktu sekitar 2 menit, meskipun waktu aktual bervariasi tergantung pada jumlah replika CoreDNS. Jika peningkatan gagal, ACK secara otomatis melakukan rollback dalam waktu 10 menit.

Selama pembaruan bergulir, Pod lama mungkin masih menangani permintaan resolusi DNS saat Pod baru mulai berjalan. Untuk melindungi ketersediaan DNS selama peningkatan, gunakan komponen NodeLocal DNSCache. Untuk informasi selengkapnya, lihat Menggunakan komponen NodeLocal DNSCache.

Backup konfigurasi kustom

Peningkatan otomatis akan menimpa kustomisasi templat YAML, termasuk toleransi (tolerations), permintaan sumber daya memori dan CPU, serta batasannya. Sebelum meningkatkan, backup konfigurasi Deployment CoreDNS Anda saat ini:

kubectl get deployment coredns -n kube-system -o yaml > coredns-backup.yaml

Setelah peningkatan, terapkan kembali kustomisasi Anda secara manual. Untuk informasi selengkapnya, lihat Memperbarui CoreDNS yang tidak dikelola secara manual.

Aktifkan plugin ready

Jika sebelumnya Anda pernah memperbarui CoreDNS secara manual ke versi yang lebih baru dari 1.5.0, pastikan plugin ready diaktifkan dalam Corefile. Tanpa plugin tersebut, CoreDNS gagal memulai selama peningkatan otomatis.

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

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

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

  4. Di panel Edit YAML, periksa keberadaan bidang ready. Jika tidak ada, tambahkan ready dan klik OK. Pastikan indentasi konsisten dengan blok kubernetes.

    apiVersion: v1
    data:
     Corefile: |
      .:53 {
        errors
        health {
          lameduck 15s
        }
        ready # Jika baris ini tidak ada, tambahkan. Pastikan indentasi konsisten dengan kubernetes.
        kubernetes cluster.local in-addr.arpa ip6.arpa {
          pods verified
          fallthrough in-addr.arpa ip6.arpa
        }
        prometheus :9153
        forward . /etc/resolv.conf {
          max_concurrent 1000
        }
        cache 30
        loop
        log
        reload
        loadbalance
      }
  5. Verifikasi bahwa konfigurasi baru telah dimuat. Jalankan perintah berikut dan periksa output untuk plugin/reload, yang menunjukkan bahwa konfigurasi telah di-hot-reload (membutuhkan waktu sekitar 30 detik):

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

Mitigasi kegagalan DNS terkait IPVS

Jika kluster Anda menggunakan kube-proxy dalam mode IPVS, kebijakan persistensi sesi IPVS dapat menyebabkan timeout atau kegagalan resolusi DNS di seluruh kluster hingga lima menit setelah peningkatan. Gunakan salah satu opsi berikut untuk mengurangi dampaknya:

Untuk memeriksa apakah kluster Anda menggunakan mode IPVS, lihat Melihat informasi kluster.

Peningkatan CoreDNS

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

  2. Di halaman Clusters, temukan dan klik nama kluster. Di panel navigasi kiri, klik Add-ons.

  3. Di halaman Add-ons, cari CoreDNS dan klik Upgrade.

Mengonfigurasi 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 resolusi 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. Di panel navigasi kiri, klik Clusters.

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

  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, di panel navigasi kiri, pilih Workloads > DaemonSets.

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

    3. Di halaman kube-proxy-worker, klik tab Pods. Di baris Pod, pilih More > Delete, lalu klik OK. Ulangi langkah ini untuk semua Pod. Sistem akan membuat ulang Pod tersebut secara otomatis.

  6. Verifikasi bahwa timeout UDP telah dikonfigurasi.

    1. Instal ipvsadm:

      sudo yum install -y ipvsadm
    2. Jalankan perintah berikut di node ECS mana pun dalam kluster:

      sudo ipvsadm -L --timeout

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

      Important: Setelah timeout dikonfigurasi, tunggu minimal lima menit sebelum melanjutkan peningkatan CoreDNS.

Menggunakan baris perintah

  1. Edit ConfigMap kube-proxy-worker:

    kubectl -n kube-system edit configmap kube-proxy-worker
  2. Tambahkan udpTimeout: 10s di bawah bidang ipvs. 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 saat ini:

      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 aktual dari langkah sebelumnya.

  4. Verifikasi bahwa timeout UDP telah dikonfigurasi.

    1. Instal ipvsadm:

      sudo yum install -y ipvsadm
    2. Jalankan perintah berikut di node ECS mana pun dalam kluster:

      sudo ipvsadm -L --timeout

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

      Important: Setelah timeout dikonfigurasi, tunggu minimal lima menit sebelum melanjutkan peningkatan CoreDNS.

Kubernetes 1.16 atau yang lebih lama

kube-proxy pada kluster yang menjalankan Kubernetes 1.16 atau yang lebih lama tidak mendukung parameter udpTimeout. Gunakan Operation Orchestration Service (OOS) untuk menjalankan perintah ipvsadm berikut 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

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

Langkah selanjutnya

Setelah peningkatan selesai, optimalkan konfigurasi CoreDNS Anda. Untuk informasi selengkapnya, lihat Mengoptimalkan konfigurasi CoreDNS.