Topik ini menjelaskan pemeriksaan dan pengoptimalan pra-peningkatan untuk CoreDNS, serta langkah-langkah untuk melakukan peningkatan otomatis.
Prasyarat
Sambungkan ke kluster Anda menggunakan alat kubectl. Untuk informasi selengkapnya, lihat Sambungkan ke kluster menggunakan kubectl.
Proses peningkatan CoreDNS
Saat peningkatan CoreDNS, ACK memperbarui deployment CoreDNS menggunakan mode RollingUpgrade. Dalam mode ini, Pod lama hanya dihapus setelah Pod CoreDNS baru berjalan. Jumlah Pod CoreDNS tetap tidak berubah setelah peningkatan. Namun, jika Pod lama masih memproses permintaan resolusi DNS selama peningkatan, permintaan tersebut mungkin gagal. Untuk memastikan ketersediaan layanan DNS di kluster Anda, Anda dapat menggunakan komponen NodeLocal DNSCache. Untuk informasi selengkapnya, lihat Gunakan komponen NodeLocal DNSCache.
Jika sebelumnya Anda menyesuaikan templat YAML dengan mengubah bidang seperti toleransi, permintaan sumber daya memori dan CPU, serta batasannya, penyesuaian tersebut akan ditimpa. Dalam kasus ini, Anda harus melakukan peningkatan CoreDNS secara manual atau menerapkan kembali penyesuaian Anda ke templat YAML setelah peningkatan otomatis selesai. Untuk informasi selengkapnya tentang cara melakukan peningkatan manual, lihat Tingkatkan CoreDNS yang tidak dikelola secara manual.
Jika Anda menggunakan IPVS sebagai mode load balancing kube-proxy, timeout atau kegagalan resolusi DNS di seluruh kluster mungkin terjadi dalam waktu lima menit setelah peningkatan CoreDNS selesai. Untuk mengurangi dampak bug IPVS ini, Anda dapat menggunakan salah satu metode berikut:
Ubah timeout persistensi sesi UDP IPVS di kube-proxy. Untuk informasi selengkapnya, lihat Bagaimana cara mengubah timeout persistensi sesi UDP IPVS di kube-proxy?.
Gunakan NodeLocal DNSCache. Untuk informasi selengkapnya, lihat Gunakan NodeLocal DNSCache.
Jika node kluster menggunakan Alibaba Cloud Linux 2, tingkatkan kernel node ke versi 4.19.91-25.1.al7.x86_64 atau versi yang lebih baru. Untuk informasi selengkapnya tentang catatan rilis Alibaba Cloud Linux 2, lihat Catatan rilis citra Alibaba Cloud Linux 2.
Jika node kluster menggunakan sistem operasi lain, konfigurasikan timeout UDP untuk kluster IPVS guna menghindari masalah ini. Untuk informasi selengkapnya, lihat Konfigurasikan timeout UDP untuk kluster IPVS.
Jika Anda tidak ingin melakukan operasi di atas, Anda dapat menghubungkan semua kontainer aplikasi ke NodeLocal DNSCache sebelum meningkatkan CoreDNS. Untuk informasi selengkapnya, lihat Gunakan komponen NodeLocal DNSCache.
Proses peningkatan memerlukan waktu sekitar 2 menit. Waktu aktual yang dibutuhkan dapat bervariasi tergantung pada jumlah replika CoreDNS di kluster. Peningkatan menggunakan kebijakan terminasi graceful di mana replika lama tidak langsung dihentikan. Hal ini memastikan bahwa resolusi DNS untuk aplikasi tidak terpengaruh. Jika peningkatan gagal, sistem secara otomatis melakukan rollback dalam waktu 10 menit.
Aktifkan plugin ready
Jika Anda telah meningkatkan CoreDNS secara manual ke versi yang lebih baru dari 1.5.0, periksa apakah plugin ready diaktifkan dalam file konfigurasi CoreDNS. Jika plugin ready tidak diaktifkan, Anda harus mengaktifkan plugin ready sebelum melakukan peningkatan otomatis. Jika tidak, CoreDNS akan gagal memulai.
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, klik nama kluster yang ingin Anda ubah. Di panel navigasi sebelah kiri, pilih .
Di halaman ConfigMaps, atur Namespace menjadi kube-system di bagian atas halaman. Lalu, temukan coredns dan klik Edit YAML di kolom Actions.
Di panel View YAML, periksa keberadaan bidang
ready. Jika bidang tersebut tidak ada, tambahkan bidangreadydan klik OK.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 }Jalankan perintah berikut untuk memeriksa apakah konfigurasi CoreDNS dimuat ke output standar Pod CoreDNS. Konfigurasi baru akan dimuat ulang secara hot dalam waktu sekitar 30 detik.
kubectl logs coredns-78d4b8bd88-n6wjm -n kube-systemOutput yang diharapkan berisi informasi
plugin/reload, yang menunjukkan bahwa konfigurasi CoreDNS telah dimuat.
Mulai peningkatan
Anda dapat meningkatkan versi CoreDNS dari halaman Manajemen Komponen di Konsol ACK.
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang ingin Anda kelola dan klik namanya. Di panel navigasi kiri, klik Add-ons.
Di halaman Component Management, cari CoreDNS dan klik Upgrade.
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 potensi dampak 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.
Di halaman Clusters, klik nama kluster yang ingin Anda ubah. Di panel navigasi sebelah 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 akan membuat ulang secara otomatis.
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 di node ECS mana pun di kluster dan periksa angka ketiga dalam output.
sudo ipvsadm -L --timeoutJika angka ketiga dalam output 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 file konfigurasi kube-proxy-worker.
kubectl -n kube-system edit configmap kube-proxy-workerDi file konfigurasi kube-proxy, tambahkan
udpTimeout: 10sdi bawah bidang ipvs. Lalu, simpan file 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 ditemukan pada langkah sebelumnya. Sistem akan membuat ulang Pod bernama kube-proxy-worker secara otomatis.
kubectl -n kube-system delete pod <kube-proxy-worker-****>Ganti <kube-proxy-worker-****> dengan nama Pod yang ditemukan 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 di node ECS mana pun di kluster dan periksa angka ketiga dalam output.
sudo ipvsadm -L --timeoutJika angka ketiga dalam output 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 adalah 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.