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:
Mengonfigurasi kubectl untuk terhubung ke kluster Anda. Untuk informasi selengkapnya, lihat Menghubungkan ke kluster menggunakan kubectl.
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.yamlSetelah 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.
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, klik nama kluster. Di panel navigasi kiri, pilih Configurations > ConfigMaps.
Di halaman ConfigMaps, atur Namespace menjadi kube-system. Temukan coredns dan klik Edit YAML di kolom Actions.
Di panel Edit YAML, periksa keberadaan bidang
ready. Jika tidak ada, tambahkanreadydan klik OK. Pastikan indentasi konsisten dengan blokkubernetes.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 }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:
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 Tingkatkan stabilitas dengan NodeLocal DNSCache.
Tingkatkan kernel node (khusus Alibaba Cloud Linux 2). Tingkatkan ke versi kernel 4.19.91-25.1.al7.x86_64 atau yang lebih baru. Untuk informasi selengkapnya, lihat Catatan rilis image Alibaba Cloud Linux 2.
Konfigurasikan timeout UDP IPVS pada sistem operasi lain. Lihat Mengonfigurasi timeout UDP untuk kluster IPVS dalam topik ini.
Hubungkan semua kontainer aplikasi ke NodeLocal DNSCache sebelum melakukan peningkatan. Untuk informasi selengkapnya, lihat Menggunakan komponen NodeLocal DNSCache.
Untuk memeriksa apakah kluster Anda menggunakan mode IPVS, lihat Melihat informasi kluster.
Peningkatan CoreDNS
Masuk ke ACK console. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, temukan dan klik nama kluster. Di panel navigasi kiri, klik Add-ons.
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
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Di halaman Clusters, klik nama kluster. Di panel navigasi kiri, pilih Configurations > ConfigMaps.
Di halaman ConfigMaps, pilih namespace kube-system. Temukan kube-proxy-worker dan klik Edit YAML di kolom Actions.
Di panel Edit YAML, tambahkan
udpTimeout: 10sdi bawah bidangipvsdan 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 kube-proxy-worker.
Di halaman detail kluster, di panel navigasi kiri, pilih Workloads > DaemonSets.
Di daftar DaemonSet, klik kube-proxy-worker.
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.
Verifikasi bahwa timeout UDP telah dikonfigurasi.
Instal
ipvsadm:sudo yum install -y ipvsadmJalankan perintah berikut di node ECS mana pun dalam kluster:
sudo ipvsadm -L --timeoutJika 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
Edit ConfigMap kube-proxy-worker:
kubectl -n kube-system edit configmap kube-proxy-workerTambahkan
udpTimeout: 10sdi bawah bidangipvs. 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: 10sBuat ulang semua Pod kube-proxy-worker.
Daftar Pod saat ini:
kubectl -n kube-system get pod -o wide | grep kube-proxy-workerHapus 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.
Verifikasi bahwa timeout UDP telah dikonfigurasi.
Instal
ipvsadm:sudo yum install -y ipvsadmJalankan perintah berikut di node ECS mana pun dalam kluster:
sudo ipvsadm -L --timeoutJika 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_newUntuk 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.