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:
Ubah periode timeout persistensi sesi UDP untuk IPVS di kube-proxy. Untuk informasi selengkapnya, lihat Konfigurasikan periode timeout UDP untuk kluster berbasis IPVS.
Gunakan NodeLocal DNSCache. Untuk informasi selengkapnya, lihat Gunakan NodeLocal DNSCache.
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
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi kiri, pilih .
Di bagian atas halaman Stateless, atur Namespace ke kube-system dan lihat versi CoreDNS.

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 |
1.21 dan yang lebih baru | v1.11.3 |
Peningkatan manual
Gunakan konsol
(Opsional) Anda dapat mengganti bidang
proxydengan bidangforward.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.
Perbarui versi citra CoreDNS.
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi kiri, pilih .
Di halaman Stateless, atur Namespace ke kube-system. Temukan coredns. Di kolom Actions, pilih .
Di halaman Edit YAML, perbarui versi di bidang
imagedan klik Update.
Verifikasi bahwa peningkatan berhasil.
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-aliyunJalankan perintah berikut untuk memeriksa apakah semua Pod CoreDNS di kluster berada dalam status Running.
kubectl get pods -n kube-system | grep corednsKeluaran yang diharapkan:
coredns-78d4b8****-6g62w 1/1 Running 0 9d coredns-78d4b8****-n6wjm 1/1 Running 0 9d
Gunakan kubectl
(Opsional) Anda dapat mengganti bidang
proxydengan bidangforward.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.
Jalankan perintah berikut untuk mengedit konfigurasi CoreDNS. Perbarui versi di bidang
image, lalu simpan perubahan dan keluar.kubectl edit deployment/coredns -n kube-systemVerifikasi bahwa peningkatan berhasil.
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-aliyunJalankan perintah berikut untuk memeriksa apakah semua Pod CoreDNS di kluster berada dalam status Running.
kubectl get pods -n kube-system | grep corednsKeluaran 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
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster yang ingin Anda ubah. Di panel navigasi kiri, pilih .
Di halaman ConfigMaps, pilih namespace kube-system. Temukan ConfigMap kube-proxy-worker dan klik Edit YAML di kolom Actions.
Di panel View YAML, tambahkan
udpTimeout: 10sdi 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: 10sBuat ulang semua Pod bernama kube-proxy-worker.
Di halaman Cluster Information, di panel navigasi kiri, pilih .
Di daftar DaemonSet, temukan dan klik kube-proxy-worker.
Di halaman kube-proxy-worker, klik tab Pods. Di baris sebuah Pod, pilih , lalu klik OK.
Ulangi langkah ini untuk menghapus semua Pod. Setelah Pod dihapus, sistem secara otomatis membuat ulang Pod tersebut.
Verifikasi bahwa timeout UDP telah dikonfigurasi.
Jalankan perintah berikut untuk menginstal ipvsadm.
ipvsadm adalah alat manajemen untuk modul IPVS. Untuk informasi selengkapnya, lihat ipvsadm.
sudo yum install -y ipvsadmJalankan perintah berikut pada node ECS apa pun di kluster dan periksa angka ketiga dalam keluarannya.
sudo ipvsadm -L --timeoutJika 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
Jalankan perintah berikut untuk mengedit berkas konfigurasi kube-proxy-worker.
kubectl -n kube-system edit configmap kube-proxy-workerDi berkas konfigurasi kube-proxy, tambahkan
udpTimeout: 10sdi 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: 10sJalankan perintah berikut untuk membuat ulang semua Pod bernama kube-proxy-worker.
Jalankan perintah berikut untuk melihat informasi Pod yang ada.
kubectl -n kube-system get pod -o wide | grep kube-proxy-workerJalankan 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.
Verifikasi bahwa timeout UDP telah dikonfigurasi.
Jalankan perintah berikut untuk menginstal ipvsadm.
ipvsadm adalah alat manajemen untuk modul IPVS. Untuk informasi selengkapnya, lihat ipvsadm.
sudo yum install -y ipvsadmJalankan perintah berikut pada node ECS apa pun di kluster dan periksa angka ketiga dalam keluarannya.
sudo ipvsadm -L --timeoutJika 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_newUntuk 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.
