DNS merupakan layanan kritis dalam kluster Kubernetes. Dalam kondisi tertentu—seperti konfigurasi klien yang tidak tepat atau skala kluster yang besar—DNS dapat mengalami timeout dan kegagalan resolusi. Panduan ini menyediakan praktik terbaik untuk membantu Anda menghindari masalah tersebut.
Topik ini tidak berlaku untuk kluster Container Service for Kubernetes (ACK) yang menggunakan edisi managed CoreDNS atau telah mengaktifkan Auto Mode. Kluster tersebut secara otomatis melakukan scaling berdasarkan beban tanpa perlu penyesuaian manual.
Daftar Isi
Praktik terbaik DNS mencakup optimasi sisi klien dan sisi server:
Sisi klien: Anda dapat mengurangi latensi resolusi dengan mengoptimalkan permintaan DNS serta meminimalkan kegagalan resolusi melalui penggunaan gambar kontainer, sistem operasi node, dan NodeLocal DNSCache yang sesuai.
Sisi server: Anda dapat mengidentifikasi pengecualian DNS dan segera menemukan akar penyebabnya dengan memantau status berjalan CoreDNS. Ketersediaan tinggi CoreDNS dan throughput queries per second (QPS) dapat ditingkatkan dengan menyesuaikan konfigurasi deployment.
Untuk informasi lebih lanjut tentang CoreDNS, lihat dokumentasi resmi CoreDNS.
Optimalkan permintaan resolusi DNS
Resolusi DNS merupakan salah satu operasi jaringan paling sering dilakukan dalam kluster Kubernetes. Banyak permintaan resolusi dapat dioptimalkan atau dihindari untuk mengurangi latensi dan beban pada infrastruktur DNS:
(Direkomendasikan) Gunakan kolam koneksi: Ketika aplikasi dalam kontainer sering meminta layanan yang sama, gunakan kolam koneksi untuk menyimpan cache koneksi aktif ke layanan upstream di memori. Hal ini menghilangkan overhead resolusi DNS dan handshake TCP untuk setiap permintaan.
Gunakan mode asinkron atau long-polling untuk mengambil IP yang terkait dengan nama domain.
Gunakan cache DNS:
(Direkomendasikan) Jika aplikasi Anda tidak dapat direfaktor untuk menggunakan kolam koneksi, pertimbangkan untuk menyimpan cache hasil resolusi DNS di sisi aplikasi. Untuk petunjuknya, lihat Tingkatkan stabilitas dengan NodeLocal DNSCache.
Jika Anda tidak dapat menggunakan NodeLocal DNSCache, gunakan Name Service Cache Daemon (NSCD) bawaan dalam kontainer Anda.
Optimalkan file resolv.conf: Parameter ndots dan search menentukan efisiensi resolusi. Untuk detailnya, lihat Konfigurasikan kebijakan DNS dan resolusi nama domain.
Optimalkan konfigurasi domain: Konfigurasikan nama domain mengikuti prinsip-prinsip berikut untuk meminimalkan upaya resolusi dan mengurangi latensi:
Ketika sebuah Pod mengakses Layanan dalam namespace yang sama, gunakan
<service-name>.Ketika sebuah Pod mengakses Layanan dalam namespace berbeda, gunakan
<service-name>.<namespace-name>.Ketika sebuah Pod mengakses domain di luar kluster, gunakan Fully Qualified Domain Name (FQDN) dengan menambahkan titik (.). Hal ini memaksa resolver memperlakukan nama tersebut sebagai absolut, sehingga melewati pencarian yang tidak valid melalui domain internal kluster. Misalnya, gunakan www.aliyun.com. alih-alih www.aliyun.com.
Pada kluster yang menjalankan Kubernetes 1.33 atau versi lebih baru, atur domain
searchmenjadi satu titik (.) (lihat Issue 125883). Hal ini secara efektif mengubah semua permintaan DNS menjadi permintaan FQDN, mencegah iterasi domain pencarian yang tidak perlu.Cuplikan contoh
dnsConfig:dnsPolicy: None dnsConfig: nameservers: ["192.168.0.10"] ## Ganti dengan ClusterIP aktual layanan CoreDNS Anda. searches: - . - default.svc.cluster.local ## Ganti 'default' dengan namespace aktual Anda. - svc.cluster.local - cluster.local/etc/resolv.confyang dihasilkan:search . default.svc.cluster.local svc.cluster.local cluster.local nameserver 192.168.0.10Dengan
.sebagai domain pencarian pertama, sistem langsung mengenali permintaan sebagai FQDN, memprioritaskan resolusi mandiri dan menghilangkan pencarian rekursif yang tidak valid.PentingAnda harus mengatur
dnsPolicykeNoneagar konfigurasi di atas berlaku.
Catatan tentang konfigurasi DNS dalam kontainer
Resolver DNS yang berbeda dapat menunjukkan variasi perilaku halus karena implementasi dasarnya. Anda mungkin menemukan kasus di mana
dig <domain>berhasil sedangkanping <domain>gagal.Hindari gambar Alpine: Kami sangat menyarankan menggunakan gambar dasar seperti Debian atau CentOS alih-alih Alpine Linux. Pustaka
musl libcyang digunakan di Alpine memiliki beberapa perbedaan implementasi dibandingkanglibcstandar, yang menyebabkan masalah termasuk namun tidak terbatas pada:Fallback TCP: Alpine v3.18 dan versi sebelumnya tidak mendukung fallback ke TCP berdasarkan bit truncated (TC).
Domain pencarian: Alpine v3.3 dan versi sebelumnya tidak mendukung parameter search, yang mengganggu penemuan layanan dalam kluster.
Konflik optimasi: Alpine melakukan permintaan secara konkuren ke semua server DNS yang tercantum dalam
/etc/resolv.conf, yang dapat melewati dan membatalkan optimasi NodeLocal DNSCache.Kondisi race Conntrack: Permintaan rekaman A dan AAAA secara konkuren menggunakan socket yang sama dapat memicu konflik port sumber pada kernel Linux lawas, mengakibatkan kehilangan paket dan timeout resolusi.
Untuk masalah lainnya, lihat dokumentasi musl libc.
Jika Anda menggunakan aplikasi Go, perhatikan perbedaan antara resolver DNS
CGOdanPure Go.
Mitigasi timeout DNS intermiten dalam mode IPVS
Ketika kluster ACK menggunakan IPVS sebagai mode load-balancing kube-proxy, Anda mungkin mengalami timeout resolusi DNS intermiten selama scaling atau restart Pod CoreDNS. Hal ini disebabkan oleh cacat kernel Linux yang sudah diketahui. Lihat commit IPVS.
Untuk mengurangi dampak kelemahan IPVS ini, gunakan salah satu metode berikut:
Tingkatkan stabilitas dengan NodeLocal DNSCache
CoreDNS kadang-kadang mengalami masalah berikut:
Kehilangan paket langka akibat kueri A dan AAAA konkuren, menyebabkan kegagalan DNS.
Tabel
conntracknode penuh, menyebabkan kehilangan paket dan kegagalan DNS.
Untuk meningkatkan stabilitas dan performa DNS, instal NodeLocal DNSCache. Add-on ini menjalankan cache DNS pada setiap node kluster untuk menangani trafik DNS secara lokal.
Setelah menginstal NodeLocal DNSCache, Anda harus mengaktifkan injeksi untuk workload Anda. Jalankan perintah berikut untuk memberi label namespace. Semua Pod baru yang dibuat dalam namespace ini akan secara otomatis menggunakan konfigurasi cache DNS.
kubectl label namespace default node-local-dns-injection=enabledUntuk petunjuk detail dan metode injeksi lainnya, lihat Gunakan NodeLocal DNSCache.
Pertahankan versi CoreDNS
CoreDNS mempertahankan kompatibilitas mundur yang kuat dengan Kubernetes. Namun, penting untuk selalu memperbarui CoreDNS ke versi stabil. Kelola, upgrade, dan konfigurasikan CoreDNS melalui halaman Add-ons.
Jika konsol ACK menampilkan pembaruan CoreDNS yang tersedia, jadwalkan upgrade sesegera mungkin selama jam sepi.
Untuk petunjuk upgrade, lihat Upgrade otomatis untuk CoreDNS yang tidak dikelola.
Untuk catatan rilis CoreDNS, lihat CoreDNS.
Risiko pada versi CoreDNS di bawah 1.7.0
Crash logging: Jika konektivitas ke server API terputus (misalnya karena restart server API, migrasi, atau fluktuasi jaringan), CoreDNS akan restart karena gagal menulis log error. Lihat Setel flag logtostderr klog.
Masalah OOM: CoreDNS mengonsumsi memori ekstra saat startup. Batas memori default dapat memicu masalah kehabisan memori (OOM) pada kluster berskala besar. Dalam kasus parah, hal ini dapat menyebabkan loop restart. Lihat CoreDNS menggunakan banyak memori selama fase inisialisasi.
Kegagalan sinkronisasi: CoreDNS memiliki beberapa masalah yang dapat memengaruhi resolusi nama domain layanan headless dan nama domain eksternal. Untuk detailnya, lihat plugin/kubernetes: handle tombstones in default processor dan Data tidak disinkronkan saat CoreDNS menyambung ulang ke server api kubernetes setelah pemutusan koneksi yang lama.
Jika sebuah node kluster menjadi abnormal, kebijakan toleransi default pada beberapa versi CoreDNS awal dapat menyebabkan Pod CoreDNS dijadwalkan ke node abnormal tersebut. Pod tersebut tidak dapat dievakuasi secara otomatis, menyebabkan resolusi nama domain menjadi abnormal.
Versi minimum CoreDNS yang direkomendasikan
Versi kluster | Versi minimum CoreDNS yang direkomendasikan |
Di bawah 1.14.8 | 1.6.2 (End of life) |
1.14.8 hingga 1.20.4 | 1.7.0.0-f59c03d-aliyun |
1.20.4 hingga 1.21.0 | 1.8.4.1-3a376cc-aliyun |
1.21.0 dan di atasnya | 1.11.3.2-f57ea7ed6-aliyun |
Pantau status operasional CoreDNS
Metrik dan dasbor
CoreDNS mengekspos metrik kesehatan dan performa melalui antarmuka Prometheus standar untuk mendeteksi pengecualian pada CoreDNS dan server DNS upstream.
Kluster ACK yang dikelola:Managed Service for Prometheus menyediakan dasbor pemantauan metrik bawaan dan aturan peringatan untuk CoreDNS. Anda dapat mengaktifkan fitur Prometheus dan dasbor di Konsol ACK. Lihat Pantau komponen CoreDNS.
Prometheus yang dikelola sendiri: Ambil metrik CoreDNS dan konfigurasikan peringatan untuk indikator kritis. Lihat dokumentasi resmi Prometheus CoreDNS.
Analisis log
Jika terjadi pengecualian DNS, log CoreDNS sangat penting untuk diagnosis akar penyebab. Kami merekomendasikan untuk mengaktifkan logging resolusi DNS dan pengumpulan Simple Log Service (SLS). Untuk detailnya, lihat Analisis dan pantau log CoreDNS.
Pengiriman event Kubernetes
Pada CoreDNS v1.9.3.6-32932850-aliyun dan versi selanjutnya, gunakan plugin k8s_event untuk mengirim log kritis ke Event Center sebagai event Kubernetes. Lihat k8s_event.
CoreDNS yang baru diterapkan mengaktifkan fitur ini secara default. Jika melakukan upgrade dari versi sebelumnya ke v1.9.3.6-32932850-aliyun atau versi selanjutnya, ubah file konfigurasi secara manual untuk mengaktifkannya.
Edit ConfigMap CoreDNS.
kubectl -n kube-system edit configmap/corednsTambahkan plugin
kubeAPIdank8s_eventke konfigurasi.apiVersion: v1 data: Corefile: | .:53 { errors health { lameduck 15s } # --- Penambahan Dimulai (abaikan perbedaan lainnya) --- kubeapi k8s_event { level info error warning // Kirim log kunci dengan status info, error, dan warning. } # --- Penambahan Berakhir --- kubernetes cluster.local in-addr.arpa ip6.arpa { pods verified fallthrough in-addr.arpa ip6.arpa } # (Konfigurasi sisanya dihilangkan) }Verifikasi pembaruan dengan memeriksa log Pod CoreDNS. Jika log berisi kata
reload, modifikasi berhasil.
Pastikan ketersediaan tinggi CoreDNS
CoreDNS adalah penyedia DNS otoritatif untuk kluster Anda. Stabilitasnya sangat kritis; kegagalan dapat menyebabkan kesalahan resolusi layanan dan gangguan aplikasi secara luas. Bagian ini menjelaskan cara memantau CoreDNS dan menerapkan strategi ketersediaan tinggi (HA).
Evaluasi tekanan CoreDNS
Gunakan alat open-source seperti DNSPerf untuk mengukur performa DNS Anda. Jika Anda tidak dapat melakukan evaluasi khusus, ikuti rekomendasi garis dasar berikut:
Replica minimum: Selalu pertahankan minimal 2 Pod untuk redundansi.
Batas resource: Tetapkan batas resource minimal 1 Core CPU dan 1 GiB memori per Pod.
Scaling performa: Performa CoreDNS meningkat secara linear dengan CPU. Dengan NodeLocal DNSCache diaktifkan, satu core CPU biasanya dapat menangani lebih dari 10.000 QPS.
Rasio replica: Jika Anda tidak dapat memantau penggunaan CPU puncak, gunakan rasio konservatif 1:8 (Pod terhadap Node) (tambahkan satu Pod CoreDNS untuk setiap 8 node kluster).
Lakukan scaling Pod CoreDNS
Jumlah Pod CoreDNS menentukan resource komputasi yang tersedia. Sesuaikan jumlah Pod berdasarkan hasil evaluasi.
Karena UDP tidak memiliki pengiriman ulang, jika bug UDP IPVS menyebabkan risiko kehilangan paket pada node kluster, scaling-in atau restart Pod CoreDNS dapat menyebabkan timeout DNS di seluruh kluster hingga lima menit. Untuk strategi mitigasi, lihat Pemecahan masalah kesalahan resolusi DNS.
Scaling otomatis berdasarkan kebijakan yang direkomendasikan
Terapkan
dns-autoscaleruntuk menyesuaikan replica CoreDNS secara otomatis berdasarkan kebijakan yang direkomendasikan (satu Pod untuk setiap delapan node kluster).Rumus:
replicas = max(ceil(cores × 1/coresPerReplica), ceil(nodes × 1/nodesPerReplica))Hal ini memastikan rasio 1:8 dipertahankan saat kluster berkembang.
Penyesuaian manual
Jalankan perintah berikut untuk menyesuaikan jumlah Pod CoreDNS secara manual:
kubectl scale --replicas={target} deployment/coredns -n kube-system # Ganti {target} dengan jumlah Pod yang diinginkanJangan gunakan HPA atau CronHPA
Meskipun mekanisme auto-scaling workload (seperti HPA dan CronHPA) dapat menyesuaikan jumlah Pod secara otomatis, mekanisme ini melakukan operasi scaling yang sering. Karena pengecualian resolusi yang disebabkan oleh scale-in Pod (masalah UDP IPVS yang disebutkan di atas), jangan gunakan auto-scaling workload untuk mengontrol jumlah Pod CoreDNS.
Optimalkan spesifikasi Pod CoreDNS
Cara lain untuk menyesuaikan resource CoreDNS adalah dengan memodifikasi spesifikasi Pod. Pada kluster ACK managed Pro, batas memori default untuk Pod CoreDNS adalah 2 GiB, tanpa batas CPU. Untuk memastikan performa konsisten, tetapkan batas CPU ke 4096m (minimum 1024m). Anda dapat menyesuaikan permintaan dan batas resource ini di konsol.
Jadwalkan Pod CoreDNS
Penjadwalan dan konfigurasi yang tepat sangat penting untuk stabilitas CoreDNS. Pengaturan yang tidak tepat dapat menyebabkan kegagalan resolusi DNS, berpotensi menyebabkan gangguan layanan di seluruh kluster. Sebelum melakukan operasi ini, pastikan Anda memahami cara kerja penjadwalan.
Konfigurasi yang direkomendasikan
Deployment multi-zona: Selalu sebarkan replica CoreDNS di berbagai zona ketersediaan dan node untuk mencegah single point of failure.
Anti-affinity: Versi CoreDNS sebelum 1.8.4.3 menggunakan anti-affinity node "preferred" (soft) secara default. Jika resource node tidak mencukupi, beberapa Pod dapat dijadwalkan pada node yang sama. Jika hal ini terjadi, upgrade add-on atau hapus Pod secara manual untuk memicu penjadwalan ulang.
Manajemen siklus hidup: Versi CoreDNS di bawah 1.8 sudah end-of-life (EOL). Segera upgrade ke versi terbaru.
Hindari kehabisan resource: Pastikan node yang menjalankan CoreDNS tidak jenuh (penggunaan CPU/memori tinggi), karena kejenuhan tersebut secara langsung memengaruhi latensi kueri DNS dan QPS.
Node khusus: Untuk kluster berskala besar, pertimbangkan penggunaan parameter penjadwalan khusus (
tolerations/nodeAffinity) untuk menjalankan CoreDNS pada node khusus demi stabilitas maksimal.
Optimalkan konfigurasi CoreDNS
ACK menyediakan konfigurasi CoreDNS default. Namun, Anda harus menyesuaikan parameter ini berdasarkan kebutuhan bisnis Anda. Konfigurasi CoreDNS sangat fleksibel. Untuk detailnya, lihat Kebijakan DNS dan resolusi nama domain dan dokumentasi resmi CoreDNS.
Optimasi yang direkomendasikan untuk versi lama
Jika Anda menjalankan kluster lama, periksa risiko berikut:
Sebagai alternatif, periksa file konfigurasi CoreDNS menggunakan fitur inspeksi dan diagnostik dalam Container Intelligence Service. Jika inspeksi menunjukkan ConfigMap CoreDNS abnormal, tinjau item yang tercantum di atas.
CoreDNS dapat mengonsumsi memori ekstra saat menyegarkan konfigurasi. Setelah memodifikasi pengaturan CoreDNS, pantau status Pod. Jika Pod mengalami kill OOM setelah perubahan konfigurasi, tingkatkan batas memori dalam deployment CoreDNS (direkomendasikan: 2 GiB).
Nonaktifkan konfigurasi affinity layanan kube-dns
Konfigurasi affinity dapat menyebabkan ketidakseimbangan beban signifikan antara replica CoreDNS. Nonaktifkan dengan mengikuti langkah-langkah berikut:
Konsol
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, temukan kluster yang diinginkan dan klik namanya. Di panel navigasi kiri, pilih .
Pada namespace
kube-system, klik Edit YAML untuk layanan kube-dns.Jika nilai bidang sessionAffinity adalah
None, Anda tidak perlu melakukan langkah berikutnya.Jika nilai bidang sessionAffinity adalah
ClientIP, lakukan langkah berikut.
Hapus bidang sessionAffinity dan sessionAffinityConfig beserta semua sub-key-nya. Lalu, klik OK.
# Hapus bagian berikut sessionAffinity: ClientIP sessionAffinityConfig: clientIP: timeoutSeconds: 10800Klik Edit YAML di sebelah kanan Layanan kube-dns lagi dan verifikasi bahwa nilai bidang sessionAffinity adalah
None. Jika demikian, Layanankube-dnstelah dimodifikasi.
CLI
Jalankan perintah berikut untuk melihat konfigurasi Layanan
kube-dns.kubectl -n kube-system get svc kube-dns -o yamlJika nilai bidang sessionAffinity adalah
None, Anda tidak perlu melakukan langkah berikutnya.Jika nilai bidang sessionAffinity adalah
ClientIP, lakukan langkah berikut.
Jalankan perintah berikut untuk membuka dan mengedit Layanan
kube-dns.kubectl -n kube-system edit service kube-dnsHapus pengaturan terkait sessionAffinity (sessionAffinity, sessionAffinityConfig, dan semua sub-key-nya), lalu simpan dan keluar.
# Hapus bagian berikut sessionAffinity: ClientIP sessionAffinityConfig: clientIP: timeoutSeconds: 10800Setelah modifikasi, jalankan perintah berikut lagi untuk memverifikasi bahwa nilai bidang sessionAffinity adalah
None. Jika demikian, Layanankube-dnstelah diperbarui.kubectl -n kube-system get svc kube-dns -o yaml
Nonaktifkan plugin autopath
Beberapa versi awal CoreDNS mengaktifkan plugin autopath, yang dapat menyebabkan kesalahan resolusi dalam kasus tepi tertentu. Verifikasi apakah plugin tersebut diaktifkan dan edit file konfigurasi untuk menonaktifkannya. Untuk informasi lebih lanjut, lihat Masalah Autopath #3765.
Menonaktifkan autopath dapat meningkatkan QPS dan latensi resolusi sisi klien hingga 3 kali lipat. Pantau beban CoreDNS dan dampak terhadap layanan.
Jalankan perintah
kubectl -n kube-system edit configmap corednsuntuk membuka file konfigurasi CoreDNS.Hapus baris
autopath @kubernetesdan simpan perubahan.Periksa status berjalan dan log Pod CoreDNS. Jika log berisi kata
reload, modifikasi berhasil.
Konfigurasikan graceful shutdown
Mekanisme lameduck memastikan bahwa ketika proses CoreDNS akan dihentikan (selama pembaruan atau restart), proses tersebut menangani permintaan yang ada sebelum keluar.
Ketika proses CoreDNS akan dihentikan, proses tersebut memasuki mode
lameduck.Dalam mode
lameduck, CoreDNS terus memproses permintaan yang telah diterima selama durasi tertentu sambil memberi sinyal kepada sistem untuk berhenti mengirim permintaan baru.
Konsol
Masuk ke Konsol ACK. Di panel navigasi kiri, klik Clusters.
Pada halaman Clusters, klik nama kluster yang ingin diubah. Di panel navigasi kiri, pilih .
Pada namespace
kube-system, klik Edit YAML untuk ConfigMap coredns.Pada ConfigMap CoreDNS berikut, pastikan plugin health diaktifkan, atur timeout lameduck ke
15s, lalu klik OK.
.:53 {
errors
# Plugin health mungkin memiliki pengaturan berbeda pada versi CoreDNS yang berbeda.
# Skenario 1: Plugin health tidak diaktifkan secara default.
# Skenario 2: Plugin health diaktifkan secara default, tetapi waktu lameduck tidak diatur.
# health
# Skenario 3: Plugin health diaktifkan secara default, dan waktu lameduck diatur ke 5s.
# health {
# lameduck 5s
# }
# Untuk ketiga skenario di atas, modifikasi konfigurasi sebagai berikut dan atur parameter lameduck ke 15s.
health {
lameduck 15s
}
# Plugin lain tidak perlu dimodifikasi dan dihilangkan di sini.
}Status Pod CoreDNS yang sehat menunjukkan pembaruan konfigurasi berhasil. Jika terjadi anomali, rujuk ke event dan log Pod untuk mengidentifikasi akar penyebab.
CLI
Jalankan perintah berikut untuk membuka file konfigurasi CoreDNS.
Rujuk ke Corefile berikut, pastikan plugin
healthdiaktifkan, dan atur parameter lameduck ke15s.Setelah memodifikasi file konfigurasi CoreDNS, simpan perubahan.
Jika CoreDNS berjalan normal, konfigurasi graceful shutdown telah berhasil diperbarui. Jika Pod CoreDNS abnormal, diagnosa penyebabnya dengan meninjau event dan log Pod.
kubectl -n kube-system edit configmap/coredns.:53 {
errors
# Plugin health mungkin memiliki pengaturan berbeda pada versi CoreDNS yang berbeda.
# Skenario 1: Plugin health tidak diaktifkan secara default.
# Skenario 2: Plugin health diaktifkan secara default, tetapi waktu lameduck tidak diatur.
# health
# Skenario 3: Plugin health diaktifkan secara default, dan waktu lameduck diatur ke 5s.
# health {
# lameduck 5s
# }
# Untuk ketiga skenario di atas, modifikasi konfigurasi sebagai berikut dan atur parameter lameduck ke 15s.
health {
lameduck 15s
}
# Plugin lain tidak perlu dimodifikasi dan dihilangkan di sini.
}Optimalkan protokol upstream (prefer_udp)
Ketika menggunakan NodeLocal DNSCache, rantai komunikasi adalah: Aplikasi -> NodeLocal DNSCache (TCP) -> CoreDNS (TCP). Secara default, CoreDNS kemudian akan mencoba menghubungi DNS VPC upstream (100.100.2.136/138) melalui TCP.
Masalah: DNS VPC memiliki dukungan terbatas untuk TCP.
Solusi: Modifikasi plugin
forwarduntuk menggunakanprefer_udp. Hal ini memastikan CoreDNS berkomunikasi dengan DNS VPC upstream melalui UDP meskipun permintaan masuk menggunakan TCP. Untuk informasi lebih lanjut, lihat Kelola ConfigMap.
# Sebelum modifikasi
forward . /etc/resolv.conf
# Setelah modifikasi
forward . /etc/resolv.conf {
prefer_udp
}Konfigurasikan plugin ready untuk pemeriksaan kesiapan
Untuk CoreDNS v1.5.0 dan versi selanjutnya, plugin ready wajib digunakan agar pemeriksaan kesiapan berfungsi.
Jalankan perintah berikut untuk membuka ConfigMap CoreDNS.
kubectl -n kube-system edit configmap/corednsPeriksa apakah file berisi direktif
ready. Jika tidak, tambahkan, tekan tombol Esc, masukkan:wq!, lalu tekan Enter untuk menyimpan file konfigurasi yang dimodifikasi dan keluar dari mode edit.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 prefer_udp } cache 30 loop log reload loadbalance }Periksa status berjalan dan log Pod CoreDNS. Jika log berisi kata
reload, modifikasi berhasil.
Tingkatkan performa resolusi dengan plugin multisocket
CoreDNS v1.12.1 memperkenalkan plugin multisocket. Aktifkan plugin ini untuk memungkinkan CoreDNS mendengarkan pada port yang sama menggunakan beberapa socket, meningkatkan performa dalam skenario CPU tinggi. Untuk detailnya, lihat dokumentasi komunitas.
Aktifkan multisocket dalam ConfigMap coredns:
.:53 {
...
prometheus :9153
multisocket [NUM_SOCKETS]
forward . /etc/resolv.conf
...
}NUM_SOCKETS menentukan jumlah socket yang mendengarkan pada port yang sama.
Konfigurasi yang direkomendasikan: Sesuaikan NUM_SOCKETS dengan perkiraan penggunaan CPU, batas resource CPU, dan resource kluster yang tersedia. Contoh:
Jika konsumsi puncak adalah 4 core dengan 8 core tersedia, atur
NUM_SOCKETSke 2.Jika konsumsi puncak adalah 8 core dengan 64 core tersedia, atur
NUM_SOCKETSke 8.
Untuk menentukan konfigurasi optimal, uji QPS dan beban dengan pengaturan berbeda.
Default: Jika tidak ditentukan, nilai default adalah GOMAXPROCS, yang sama dengan batas CPU Pod CoreDNS. Jika batas CPU Pod tidak diatur, nilainya sama dengan jumlah core CPU pada node tempat Pod berada.

