Topik ini menjelaskan masalah umum yang mungkin Anda temui saat menggunakan plugin jaringan Terway atau Flannel serta cara mengatasinya, seperti memilih plugin jaringan, menginstal plugin jaringan pihak ketiga di kluster, dan merencanakan jaringan kluster.
Indeks
Terway
Bagaimana cara mengetahui apakah Terway berada dalam mode ENI eksklusif atau mode ENI bersama?
Bagaimana cara mengetahui apakah akselerasi jaringan Terway menggunakan DataPathv2 atau IPvlan+eBPF?
Apakah routing dalam mode Terway DataPathv2 atau IPvlan+eBPF melewati IPVS?
Dapatkah saya mengganti plugin jaringan untuk kluster ACK yang sudah ada?
Apa yang harus saya lakukan jika vSwitch kehabisan sumber daya IP dalam mode jaringan Terway?
Bagaimana cara memilih antara plugin jaringan Terway dan Flannel untuk kluster Kubernetes?
Bagaimana cara mengaktifkan load balancing dalam kluster untuk kluster Terway IPvlan?
Pembuatan pod gagal dengan kesalahan "cannot find MAC address" dalam mode jaringan Terway
Flannel
Bagaimana cara memilih antara plugin jaringan Terway dan Flannel untuk kluster Kubernetes?
Mengapa pod tidak dapat melakukan ping ke beberapa node ECS?
Dalam skenario apa saya perlu mengonfigurasi beberapa tabel rute untuk kluster?
Mengapa pod gagal dimulai dan melaporkan kesalahan "no IP addresses available in range"?
Bagaimana cara mengubah jumlah IP node, blok CIDR IP Pod, atau blok CIDR IP Service?
kube-proxy
IPv6
Bagaimana cara mengatasi masalah umum dengan dual-stack IPv6?
Lainnya
Bagaimana cara mengatasi masalah latensi setelah pod dimulai?
Bagaimana cara mengizinkan pod mengakses layanan yang di-expose-nya sendiri?
Bagaimana cara melihat jenis jaringan kluster dan vSwitch yang sesuai?
Bagaimana cara melihat sumber daya cloud yang digunakan dalam kluster?
Bagaimana cara meningkatkan batas pelacakan koneksi Linux (conntrack)?
Apa yang perlu saya ketahui tentang mengonfigurasi domain kluster (ClusterDomain)?
Apa saja mode jaringan utama Terway?
Terway memiliki dua mode jaringan utama: mode elastic network interface (ENI) bersama dan mode ENI eksklusif. Untuk informasi lebih lanjut tentang masing-masing mode, lihat Mode ENI bersama dan mode ENI eksklusif. Perhatikan bahwa hanya mode ENI bersama Terway yang mendukung akselerasi jaringan (DataPathv2 atau IPvlan+eBPF). DataPathv2 merupakan versi peningkatan dari mode akselerasi IPvlan+eBPF. Di Terway v1.8.0 dan yang lebih baru, DataPathv2 adalah satu-satunya opsi akselerasi yang tersedia saat membuat kluster dan menginstal plugin Terway.
Bagaimana cara mengetahui apakah Terway berada dalam mode ENI eksklusif atau mode ENI bersama?
Di Terway v1.11.0 dan yang lebih baru, Terway menggunakan mode ENI bersama secara default. Anda dapat mengaktifkan mode ENI eksklusif dengan mengonfigurasi mode jaringan ENI eksklusif untuk kelompok node.
Di versi sebelum Terway v1.11.0, Anda dapat memilih mode ENI eksklusif atau bersama saat membuat kluster. Setelah kluster dibuat, Anda dapat mengidentifikasi mode tersebut sebagai berikut:
Mode ENI eksklusif: Nama DaemonSet Terway di namespace kube-system adalah
terway-eni.Mode ENI bersama: Nama DaemonSet Terway di namespace kube-system adalah
terway-eniip.
Bagaimana cara mengetahui apakah akselerasi jaringan Terway menggunakan DataPathv2 atau IPvlan+eBPF?
Hanya mode ENI bersama Terway yang mendukung akselerasi jaringan (DataPathv2 atau IPvlan+eBPF). DataPathv2 merupakan versi peningkatan dari mode akselerasi IPvlan+eBPF. Di Terway v1.8.0 dan yang lebih baru, DataPathv2 adalah satu-satunya opsi akselerasi yang tersedia saat membuat kluster dan menginstal plugin Terway.
Anda dapat memeriksa konfigurasi eniip_virtual_type di ConfigMap eni-config di namespace kube-system untuk menentukan apakah akselerasi jaringan diaktifkan. Nilainya adalah datapathv2 atau ipvlan.
Apakah routing dalam mode Terway DataPathv2 atau IPvlan+eBPF melewati IPVS?
Saat Anda mengaktifkan mode akselerasi (DataPathv2 atau IPvlan+eBPF) untuk Terway, ia menggunakan jalur penerusan lalu lintas yang berbeda dari mode ENI bersama biasa. Dalam skenario tertentu, seperti pod mengakses Service internal, lalu lintas dapat melewati tumpukan protokol jaringan node dan tidak perlu melewati rute IPVS node. Sebagai gantinya, eBPF menyelesaikan alamat Service ke alamat pod backend. Untuk informasi lebih lanjut tentang alur lalu lintas, lihat Akselerasi jaringan.
Dapatkah saya mengganti plugin jaringan untuk kluster ACK yang sudah ada?
Anda hanya dapat memilih plugin jaringan (Terway atau Flannel) saat membuat kluster. Plugin jaringan tidak dapat diubah setelah kluster dibuat. Untuk menggunakan plugin jaringan yang berbeda, Anda harus membuat kluster baru. Untuk informasi lebih lanjut, lihat Buat kluster ACK yang dikelola.
Apa yang harus saya lakukan jika kluster tidak dapat mengakses Internet setelah saya menambahkan vSwitch dalam mode jaringan Terway?
Gejala
Anda menambahkan vSwitch secara manual karena pod kehabisan sumber daya IP. Setelah menambahkan vSwitch, Anda menemukan bahwa kluster tidak dapat mengakses Internet.
Penyebab
vSwitch yang menyediakan alamat IP untuk pod tidak memiliki akses Internet.
Solusi
Anda dapat menggunakan fitur SNAT Gateway NAT untuk mengonfigurasi aturan SNAT untuk vSwitch yang menyediakan alamat IP untuk pod. Untuk informasi lebih lanjut, lihat Aktifkan akses Internet untuk kluster.
Setelah memperbarui versi citra Flannel secara manual, bagaimana cara mengatasi ketidakcocokan dengan kluster versi 1.16 atau yang lebih baru?
Gejala
Setelah memperbarui kluster ke versi 1.16, node kluster masuk ke status NotReady.
Penyebab
Masalah ini terjadi karena Anda memperbarui versi Flannel secara manual tetapi tidak memperbarui konfigurasi Flannel. Akibatnya, kubelet tidak dapat mengenali konfigurasi baru.
Solusi
Edit konfigurasi Flannel untuk menambahkan bidang
cniVersion.kubectl edit cm kube-flannel-cfg -n kube-systemTambahkan bidang
cniVersionke konfigurasi."name": "cb0", "cniVersion":"0.3.0", "type": "flannel",Mulai ulang Flannel.
kubectl delete pod -n kube-system -l app=flannel
Bagaimana cara mengatasi masalah latensi setelah pod dimulai?
Gejala
Setelah pod dimulai, terjadi penundaan sebelum jaringan tersedia.
Penyebab
Kebijakan Jaringan yang dikonfigurasi dapat menyebabkan latensi. Menonaktifkan Kebijakan Jaringan dapat mengatasi masalah ini.
Solusi
Modifikasi ConfigMap Terway untuk menambahkan konfigurasi yang menonaktifkan NetworkPolicy.
kubectl edit cm -n kube-system eni-configTambahkan bidang berikut ke konfigurasi.
disable_network_policy: "true"Opsional:Jika Anda tidak menggunakan versi Terway terbaru, tingkatkan versinya di konsol.
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel sebelah kiri, pilih .
Di halaman Add-ons, klik tab Networking, lalu klik Upgrade untuk komponen Terway.
Di kotak dialog yang muncul, ikuti petunjuk untuk menyelesaikan konfigurasi dan klik OK.
Mulai ulang semua pod Terway.
kubectl delete pod -n kube-system -l app=terway-eniip
Bagaimana cara mengizinkan pod mengakses layanan yang di-expose-nya sendiri?
Gejala
Pod tidak dapat mengakses layanan yang di-expose-nya sendiri. Akses bersifat intermiten atau gagal saat pod dijadwalkan ke dirinya sendiri.
Penyebab
Hal ini dapat terjadi karena akses loopback tidak diaktifkan untuk kluster Flannel.
Versi Flannel sebelum v0.15.1.4-e02c8f12-aliyun tidak mengizinkan akses loopback. Setelah ditingkatkan, akses loopback tetap dinonaktifkan secara default tetapi dapat diaktifkan secara manual.
Akses loopback diaktifkan secara default hanya untuk deployment baru Flannel v0.15.1.4-e02c8f12-aliyun dan versi yang lebih baru.
Solusi
Gunakan Layanan Headless untuk mengekspos dan mengakses layanan. Untuk informasi lebih lanjut, lihat Layanan Headless.
CatatanIni adalah metode yang direkomendasikan.
Buat ulang kluster dan gunakan plugin jaringan Terway. Untuk informasi lebih lanjut, lihat Gunakan plugin jaringan Terway.
Modifikasi konfigurasi Flannel, lalu buat ulang plugin Flannel dan pod.
CatatanMetode ini tidak direkomendasikan karena konfigurasi dapat ditimpa oleh peningkatan berikutnya.
Edit cni-config.json.
kubectl edit cm kube-flannel-cfg -n kube-systemDalam konfigurasi, tambahkan
hairpinMode: trueke bagiandelegate.Contoh:
cni-conf.json: | { "name": "cb0", "cniVersion":"0.3.1", "type": "flannel", "delegate": { "isDefaultGateway": true, "hairpinMode": true } }Mulai ulang Flannel.
kubectl delete pod -n kube-system -l app=flannelHapus dan buat ulang pod.
Bagaimana cara memilih antara plugin jaringan Terway dan Flannel untuk kluster Kubernetes?
Bagian ini menjelaskan dua plugin jaringan, Terway dan Flannel, yang tersedia saat Anda membuat kluster ACK.
Saat membuat kluster Kubernetes, ACK menyediakan dua plugin jaringan:
Flannel: Plugin ini menggunakan plugin CNI Flannel yang sederhana dan stabil dari komunitas open source. Plugin ini bekerja dengan jaringan VPC Alibaba Cloud berkecepatan tinggi untuk menyediakan jaringan berkinerja tinggi dan stabil untuk kontainer. Namun, plugin ini hanya menyediakan fitur dasar dan tidak memiliki kemampuan lanjutan, seperti Kebijakan Jaringan Kubernetes standar.
Terway: Ini adalah plugin jaringan yang dikembangkan oleh ACK. Plugin ini sepenuhnya kompatibel dengan Flannel dan mendukung penugasan ENI Alibaba Cloud ke kontainer. Plugin ini juga mendukung Kebijakan Jaringan Kubernetes standar untuk menentukan kebijakan akses antar kontainer dan memungkinkan Anda membatasi bandwidth kontainer individual. Jika Anda tidak perlu menggunakan Kebijakan Jaringan, Anda dapat memilih Flannel. Jika tidak, kami merekomendasikan Anda menggunakan Terway. Untuk informasi lebih lanjut tentang plugin jaringan Terway, lihat Gunakan plugin jaringan Terway.
Bagaimana cara merencanakan jaringan kluster?
Saat membuat kluster ACK, Anda perlu menentukan VPC, vSwitch, blok CIDR jaringan Pod, dan blok CIDR Service. Kami merekomendasikan Anda merencanakan alamat instance ECS, alamat pod Kubernetes, dan alamat Service terlebih dahulu. Untuk informasi lebih lanjut, lihat Rencanakan jaringan untuk kluster ACK yang dikelola.
Apakah ACK mendukung pemetaan hostPort?
Hanya plugin Flannel yang mendukung hostPort. Plugin lain tidak mendukung fitur ini.
Alamat pod di ACK dapat diakses langsung oleh sumber daya lain dalam VPC yang sama tanpa memerlukan pemetaan port tambahan.
Untuk mengekspos layanan ke jaringan eksternal, gunakan Service tipe NodePort atau LoadBalancer.
Bagaimana cara melihat jenis jaringan kluster dan vSwitch yang sesuai?
ACK mendukung dua jenis jaringan kontainer: Flannel dan Terway.
Untuk melihat jenis jaringan yang Anda pilih saat membuat kluster, lakukan langkah-langkah berikut:
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Di halaman Clusters, temukan kluster target dan klik namanya. Di panel navigasi sebelah kiri, klik Cluster Information.
Klik tab Basic Information. Di bagian Network, lihat jenis jaringan kontainer kluster, yaitu nilai di sebelah Network Plugin.
Jika Network Plugin diatur ke Terway, jenis jaringan kontainer adalah Terway.
Jika Network Plugin diatur ke Flannel, jenis jaringan kontainer adalah Flannel.
Untuk melihat vSwitch node yang digunakan oleh jenis jaringan, lakukan langkah-langkah berikut:
Di panel navigasi sebelah kiri, pilih .
Di halaman Node Pools, temukan kelompok node target dan klik Details di kolom Actions. Lalu, klik tab Basic Information.
Di bagian Node Configurations, lihat ID Node VSwitch.
Untuk menanyakan ID vSwitch pod yang digunakan oleh jenis jaringan Terway, lakukan langkah-langkah berikut:
CatatanHanya jenis jaringan Terway yang menggunakan vSwitch pod. Jenis jaringan Flannel tidak menggunakannya.
Di panel navigasi sebelah kiri, klik Add-ons.
Di halaman Add-on, klik View Configurations di kartu terway-eniip. Opsi PodVswitchId menunjukkan vSwitch pod yang sedang digunakan.
Bagaimana cara melihat sumber daya cloud yang digunakan dalam kluster?
Untuk melihat informasi tentang sumber daya cloud yang digunakan dalam kluster, termasuk mesin virtual, VPC, dan peran RAM worker, lakukan langkah-langkah berikut:
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Di halaman Kluster, klik nama kluster target, atau klik Details di kolom Tindakan untuk kluster tersebut.
Klik tab Basic Information untuk melihat informasi tentang sumber daya cloud yang digunakan dalam kluster.
Bagaimana cara memodifikasi konfigurasi kube-proxy?
Secara default, kluster ACK yang dikelola menyebarkan DaemonSet kube-proxy-worker untuk load balancing. Anda dapat mengontrol parameternya menggunakan ConfigMap kube-proxy-worker. Jika Anda menggunakan kluster khusus ACK, DaemonSet kube-proxy-master dan ConfigMap yang sesuai juga diterapkan di kluster Anda dan berjalan di node master.
Konfigurasi kube-proxy kompatibel dengan standar KubeProxyConfiguration komunitas. Anda dapat menyesuaikan konfigurasi berdasarkan standar ini. Untuk informasi lebih lanjut, lihat Konfigurasi kube-proxy. Berkas konfigurasi kube-proxy memiliki persyaratan format yang ketat. Jangan menghilangkan titik dua atau spasi. Untuk memodifikasi konfigurasi kube-proxy, lakukan langkah-langkah berikut:
Jika Anda menggunakan kluster yang dikelola, Anda harus memodifikasi konfigurasi kube-proxy-worker.
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel sebelah kiri, pilih .
Di bagian atas halaman, pilih namespace kube-system. Lalu, temukan ConfigMap kube-proxy-worker dan klik Edit YAML di kolom Tindakan.
Di panel Edit YAML, modifikasi parameter dan klik OK.
Buat ulang semua kontainer kube-proxy-worker agar konfigurasi berlaku.
PentingMemulai ulang kube-proxy tidak mengganggu layanan yang sedang berjalan. Jika layanan sedang dirilis secara bersamaan, layanan baru mungkin memerlukan waktu sedikit lebih lama untuk berlaku di kube-proxy. Kami merekomendasikan Anda melakukan operasi ini di luar jam sibuk.
Di panel navigasi sebelah kiri halaman manajemen kluster, pilih .
Dalam daftar DaemonSet, temukan dan klik kube-proxy-worker.
Di halaman kube-proxy-worker, di tab Pods, pilih lalu klik OK.
Ulangi operasi ini untuk menghapus semua pod. Sistem akan secara otomatis membuat ulang pod setelah dihapus.
Jika Anda menggunakan kluster khusus, Anda harus memodifikasi konfigurasi kube-proxy-worker dan kube-proxy-master. Lalu, hapus pod kube-proxy-worker dan kube-proxy-master. Pod akan dibuat ulang secara otomatis, dan konfigurasi baru akan berlaku. Untuk informasi lebih lanjut, lihat langkah-langkah sebelumnya.
Bagaimana cara meningkatkan batas pelacakan koneksi Linux (conntrack)?
Jika log kernel (dmesg) berisi pesan kesalahan conntrack full, jumlah entri conntrack telah mencapai batas conntrack_max. Anda harus meningkatkan batas conntrack Linux.
Jalankan perintah berikut untuk memeriksa penggunaan conntrack saat ini dan jumlah untuk setiap protokol.
# Lihat detail tabel. Anda dapat menggunakan pipeline grep untuk memeriksa status, atau gunakan cat /proc/net/nf_conntrack. conntrack -L # Lihat jumlah. cat /proc/sys/net/netfilter/nf_conntrack_count # Lihat nilai maksimum saat ini dari tabel. cat /proc/sys/net/netfilter/nf_conntrack_maxJika banyak entri protokol TCP, periksa layanan tertentu. Jika ini adalah aplikasi koneksi singkat, pertimbangkan untuk mengubahnya menjadi aplikasi koneksi persisten.
Jika banyak entri DNS, gunakan NodeLocal DNSCache di kluster ACK Anda untuk meningkatkan kinerja DNS. Untuk informasi lebih lanjut, lihat Gunakan komponen NodeLocal DNSCache.
Jika banyak timeout di lapisan aplikasi atau kesalahan 504 terjadi, atau jika log kernel sistem operasi mencetak kesalahan
kernel: nf_conntrack: table full, dropping packet., sesuaikan parameter terkait conntrack dengan hati-hati.
Jika penggunaan conntrack aktual masuk akal, atau jika Anda tidak ingin memodifikasi layanan Anda, Anda dapat menyesuaikan batas pelacakan koneksi dengan menambahkan parameter maxPerCore ke konfigurasi kube-proxy.
Jika Anda menggunakan kluster yang dikelola, Anda perlu menambahkan parameter maxPerCore ke konfigurasi kube-proxy-worker dan mengatur nilainya ke 65536 atau lebih tinggi. Lalu, hapus pod kube-proxy-worker. Pod akan dibuat ulang secara otomatis, dan konfigurasi baru akan berlaku. Untuk informasi lebih lanjut tentang cara memodifikasi dan menghapus kube-proxy-worker, lihat Bagaimana cara memodifikasi konfigurasi kube-proxy?.
apiVersion: v1 kind: ConfigMap metadata: name: kube-proxy-worker namespace: kube-system data: config.conf: | apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration featureGates: IPv6DualStack: true clusterCIDR: 172.20.0.0/16 clientConnection: kubeconfig: /var/lib/kube-proxy/kubeconfig.conf conntrack: maxPerCore: 65536 # Atur maxPerCore ke nilai yang masuk akal. 65536 adalah pengaturan default. mode: ipvs # Bidang lain dihilangkan.Jika Anda menggunakan kluster khusus, Anda perlu menambahkan parameter maxPerCore ke konfigurasi kube-proxy-worker dan kube-proxy-master dan mengatur nilainya ke 65536 atau lebih tinggi. Lalu, hapus pod kube-proxy-worker dan kube-proxy-master. Pod akan dibuat ulang secara otomatis, dan konfigurasi baru akan berlaku. Untuk informasi lebih lanjut tentang cara memodifikasi dan menghapus kube-proxy-worker dan kube-proxy-master, lihat Bagaimana cara memodifikasi konfigurasi kube-proxy?.
Dalam mode Terway DataPath V2 atau IPvlan, informasi conntrack untuk lalu lintas kontainer disimpan dalam peta eBPF. Dalam mode lain, informasi conntrack disimpan dalam conntrack Linux. Untuk informasi lebih lanjut tentang cara menyesuaikan ukuran conntrack eBPF, lihat Optimalkan konfigurasi conntrack dalam mode Terway.
Bagaimana cara mengubah mode load balancing IPVS di kube-proxy?
Jika layanan Anda menggunakan koneksi persisten, jumlah permintaan ke pod backend mungkin tidak merata karena setiap koneksi mengirimkan beberapa permintaan. Anda dapat mengatasi ketidakseimbangan beban ini dengan mengubah mode load balancing IPVS di kube-proxy. Lakukan langkah-langkah berikut:
Pilih algoritma penjadwalan yang sesuai. Untuk informasi lebih lanjut tentang cara memilih algoritma penjadwalan yang sesuai, lihat parameter-changes dalam dokumentasi Kubernetes.
Untuk node kluster yang dibuat sebelum Oktober 2022, tidak semua algoritma penjadwalan IPVS diaktifkan secara default. Anda harus mengaktifkan modul kernel algoritma penjadwalan IPVS secara manual di semua node kluster. Misalnya, untuk menggunakan algoritma penjadwalan least connection (lc), masuk ke setiap node dan jalankan lsmod | grep ip_vs_lc untuk memeriksa apakah ada output. Jika Anda memilih algoritma lain, ganti `lc` dengan kata kunci yang sesuai.
Jika perintah menghasilkan output ip_vs_lc, modul kernel algoritma penjadwalan sudah dimuat, dan Anda dapat melewati langkah ini.
Jika belum dimuat, jalankan modprobe ip_vs_lc agar langsung berlaku di node tersebut. Lalu, jalankan echo "ip_vs_lc" >> /etc/modules-load.d/ack-ipvs-modules.conf untuk memastikan perubahan tetap berlaku setelah node dimulai ulang.
Atur parameter ipvs.scheduler di kube-proxy ke algoritma penjadwalan yang sesuai.
Jika Anda menggunakan kluster yang dikelola, Anda perlu mengatur parameter ipvs.scheduler kube-proxy-worker ke algoritma penjadwalan yang sesuai. Lalu, hapus pod kube-proxy-worker. Pod akan dibuat ulang secara otomatis, dan konfigurasi baru akan berlaku. Untuk informasi lebih lanjut tentang cara memodifikasi dan menghapus kube-proxy-worker, lihat Bagaimana cara memodifikasi konfigurasi kube-proxy?.
apiVersion: v1 kind: ConfigMap metadata: name: kube-proxy-worker namespace: kube-system data: config.conf: | apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration featureGates: IPv6DualStack: true clusterCIDR: 172.20.0.0/16 clientConnection: kubeconfig: /var/lib/kube-proxy/kubeconfig.conf conntrack: maxPerCore: 65536 mode: ipvs ipvs: scheduler: lc # Atur scheduler ke algoritma penjadwalan yang sesuai. # Bidang lain dihilangkan.Jika Anda menggunakan kluster khusus, Anda perlu mengatur parameter ipvs.scheduler di kube-proxy-worker dan kube-proxy-master ke algoritma penjadwalan yang sesuai. Lalu, hapus pod kube-proxy-worker dan kube-proxy-master. Pod akan dibuat ulang secara otomatis, dan konfigurasi baru akan berlaku. Untuk informasi lebih lanjut tentang cara memodifikasi dan menghapus kube-proxy-worker dan kube-proxy-master, lihat Bagaimana cara memodifikasi konfigurasi kube-proxy?.
Periksa log kube-proxy yang sedang berjalan.
Jalankan perintah kubectl get pods untuk memeriksa apakah kontainer kube-proxy-worker baru di namespace kube-system berada dalam status Running. Jika Anda menggunakan kluster khusus, periksa juga kube-proxy-master.
Jalankan perintah kubectl logs untuk melihat log kontainer baru.
Jika log berisi Can't use the IPVS proxier: IPVS proxier will not be used because the following required kernel modules are not loaded: [ip_vs_lc], modul kernel algoritma penjadwalan IPVS gagal dimuat. Verifikasi bahwa langkah-langkah sebelumnya telah dilakukan dengan benar dan coba lagi.
Jika log berisi Using iptables Proxier., kube-proxy gagal mengaktifkan modul IPVS dan secara otomatis kembali ke mode iptables. Dalam kasus ini, kami merekomendasikan Anda terlebih dahulu mengembalikan konfigurasi kube-proxy lalu memulai ulang node.
Jika entri log di atas tidak muncul dan log menunjukkan Using ipvs Proxier., modul IPVS berhasil diaktifkan.
Jika semua pemeriksaan di atas berhasil, perubahan telah berhasil.
Bagaimana cara mengubah waktu timeout persistensi sesi UDP IPVS di kube-proxy?
Jika kluster ACK Anda menggunakan kube-proxy dalam mode IPVS, kebijakan persistensi sesi IPVS default dapat menyebabkan kehilangan paket probabilistik untuk backend UDP hingga lima menit setelah dihapus. Jika layanan Anda bergantung pada CoreDNS, Anda mungkin mengalami latensi antarmuka bisnis, timeout permintaan, dan masalah lainnya hingga lima menit saat komponen CoreDNS ditingkatkan atau nodenya dimulai ulang.
Jika layanan Anda di kluster ACK tidak menggunakan protokol UDP, Anda dapat mengurangi dampak latensi atau kegagalan penguraian dengan menurunkan waktu timeout persistensi sesi untuk protokol UDP IPVS. Lakukan langkah-langkah berikut:
Jika layanan Anda sendiri menggunakan protokol UDP, silakan kirim tiket untuk konsultasi.
Untuk kluster K8s 1.18 dan yang lebih baru
Jika Anda menggunakan kluster yang dikelola, Anda perlu memodifikasi nilai parameter udpTimeout di kube-proxy-worker. Lalu, hapus pod kube-proxy-worker. Pod akan dibuat ulang secara otomatis, dan konfigurasi baru akan berlaku. Untuk informasi lebih lanjut tentang cara memodifikasi dan menghapus kube-proxy-worker, lihat Bagaimana cara memodifikasi konfigurasi kube-proxy?.
apiVersion: v1 kind: ConfigMap metadata: name: kube-proxy-worker namespace: kube-system data: config.conf: | apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration # Bidang lain yang tidak relevan dihilangkan. mode: ipvs # Jika kunci ipvs tidak ada, Anda perlu menambahkannya. ipvs: udpTimeout: 10s # Default adalah 300 detik. Mengubahnya menjadi 10 detik dapat mengurangi waktu dampak kehilangan paket setelah backend IPVS UDP dihapus menjadi 10 detik.Jika Anda menggunakan kluster khusus, Anda perlu memodifikasi nilai parameter udpTimeout di kube-proxy-worker dan kube-proxy-master. Lalu, hapus pod kube-proxy-worker dan kube-proxy-master. Pod akan dibuat ulang secara otomatis, dan konfigurasi baru akan berlaku. Untuk informasi lebih lanjut tentang cara memodifikasi dan menghapus kube-proxy-worker, lihat Bagaimana cara memodifikasi konfigurasi kube-proxy?.
Untuk kluster K8s 1.16 dan yang lebih lama
Komponen kube-proxy di kluster versi ini tidak mendukung parameter udpTimeout. Untuk menyesuaikan konfigurasi timeout UDP, Anda dapat menggunakan CloudOps Orchestration Service (OOS) untuk menjalankan perintah
ipvsadmberikut secara batch di semua node di kluster:yum install -y ipvsadm ipvsadm -L --timeout > /tmp/ipvsadm_timeout_old ipvsadm --set 900 120 10 ipvsadm -L --timeout > /tmp/ipvsadm_timeout_new diff /tmp/ipvsadm_timeout_old /tmp/ipvsadm_timeout_newUntuk informasi lebih lanjut tentang operasi batch di OOS, lihat Operasi batch instance.
Bagaimana cara mengatasi masalah umum dengan dual-stack IPv6?
Symptom: Alamat IP pod yang ditampilkan di kubectl masih berupa alamat IPv4.
Solution: Jalankan perintah berikut untuk menampilkan bidang Pod IPs. Output yang diharapkan adalah alamat IPv6.
kubectl get pods -A -o jsonpath='{range .items[*]}{@.metadata.namespace} {@.metadata.name} {@.status.podIPs[*].ip} {"\n"}{end}'Symptom: IP Cluster yang ditampilkan di kubectl masih berupa alamat IPv4.
Solution:
Pastikan bahwa spec.ipFamilyPolicy tidak diatur ke SingleStack.
Jalankan perintah berikut untuk menampilkan bidang Cluster IPs. Output yang diharapkan adalah alamat IPv6.
kubectl get svc -A -o jsonpath='{range .items[*]}{@.metadata.namespace} {@.metadata.name} {@.spec.ipFamilyPolicy} {@.spec.clusterIPs[*]} {"\n"}{end}'
Symptom: Tidak dapat mengakses pod menggunakan alamat IPv6-nya.
Cause: Beberapa aplikasi, seperti kontainer Nginx, tidak mendengarkan alamat IPv6 secara default.
Solution: Jalankan perintah
netstat -anpuntuk memastikan bahwa pod mendengarkan alamat IPv6.Output yang diharapkan:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.XX.XX:10248 0.0.0.0:* LISTEN 8196/kubelet tcp 0 0 127.0.XX.XX:41935 0.0.0.0:* LISTEN 8196/kubelet tcp 0 0 0.0.XX.XX:111 0.0.0.0:* LISTEN 598/rpcbind tcp 0 0 0.0.XX.XX:22 0.0.0.0:* LISTEN 3577/sshd tcp6 0 0 :::30500 :::* LISTEN 1916680/kube-proxy tcp6 0 0 :::10250 :::* LISTEN 8196/kubelet tcp6 0 0 :::31183 :::* LISTEN 1916680/kube-proxy tcp6 0 0 :::10255 :::* LISTEN 8196/kubelet tcp6 0 0 :::111 :::* LISTEN 598/rpcbind tcp6 0 0 :::10256 :::* LISTEN 1916680/kube-proxy tcp6 0 0 :::31641 :::* LISTEN 1916680/kube-proxy udp 0 0 0.0.0.0:68 0.0.0.0:* 4892/dhclient udp 0 0 0.0.0.0:111 0.0.0.0:* 598/rpcbind udp 0 0 47.100.XX.XX:323 0.0.0.0:* 6750/chronyd udp 0 0 0.0.0.0:720 0.0.0.0:* 598/rpcbind udp6 0 0 :::111 :::* 598/rpcbind udp6 0 0 ::1:323 :::* 6750/chronyd udp6 0 0 fe80::216:XXXX:fe03:546 :::* 6673/dhclient udp6 0 0 :::720 :::* 598/rpcbindJika
Protoadalahtcp, artinya layanan mendengarkan alamat IPv4. Jikatcp6, artinya layanan mendengarkan alamat IPv6.Symptom: Anda dapat mengakses pod dalam kluster menggunakan alamat IPv6-nya, tetapi tidak dapat mengaksesnya dari Internet.
Cause: Bandwidth Internet mungkin belum dikonfigurasi untuk alamat IPv6.
Solution: Konfigurasikan bandwidth Internet untuk alamat IPv6. Untuk informasi lebih lanjut, lihat Aktifkan dan kelola bandwidth Internet IPv6.
Symptom: Tidak dapat mengakses pod menggunakan IP Cluster IPv6-nya.
Solution:
Pastikan bahwa spec.ipFamilyPolicy tidak diatur ke SingleStack.
Jalankan perintah
netstat -anpuntuk memastikan bahwa pod mendengarkan alamat IPv6.Output yang diharapkan:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.XX.XX:10248 0.0.0.0:* LISTEN 8196/kubelet tcp 0 0 127.0.XX.XX:41935 0.0.0.0:* LISTEN 8196/kubelet tcp 0 0 0.0.XX.XX:111 0.0.0.0:* LISTEN 598/rpcbind tcp 0 0 0.0.XX.XX:22 0.0.0.0:* LISTEN 3577/sshd tcp6 0 0 :::30500 :::* LISTEN 1916680/kube-proxy tcp6 0 0 :::10250 :::* LISTEN 8196/kubelet tcp6 0 0 :::31183 :::* LISTEN 1916680/kube-proxy tcp6 0 0 :::10255 :::* LISTEN 8196/kubelet tcp6 0 0 :::111 :::* LISTEN 598/rpcbind tcp6 0 0 :::10256 :::* LISTEN 1916680/kube-proxy tcp6 0 0 :::31641 :::* LISTEN 1916680/kube-proxy udp 0 0 0.0.0.0:68 0.0.0.0:* 4892/dhclient udp 0 0 0.0.0.0:111 0.0.0.0:* 598/rpcbind udp 0 0 47.100.XX.XX:323 0.0.0.0:* 6750/chronyd udp 0 0 0.0.0.0:720 0.0.0.0:* 598/rpcbind udp6 0 0 :::111 :::* 598/rpcbind udp6 0 0 ::1:323 :::* 6750/chronyd udp6 0 0 fe80::216:XXXX:fe03:546 :::* 6673/dhclient udp6 0 0 :::720 :::* 598/rpcbindJika
Protoadalahtcp, artinya layanan mendengarkan alamat IPv4. Jikatcp6, artinya layanan mendengarkan alamat IPv6.Symptom: Pod tidak dapat mengakses Internet menggunakan IPv6.
Solution: Untuk menggunakan IPv6 untuk akses Internet, Anda perlu mengaktifkan gateway IPv6 dan mengonfigurasi bandwidth Internet untuk alamat IPv6. Untuk informasi lebih lanjut, lihat Buat dan kelola gateway IPv6 dan Aktifkan dan kelola bandwidth Internet IPv6.
Apa yang harus saya lakukan jika vSwitch kehabisan sumber daya IP dalam mode jaringan Terway?
Deskripsi
Saat Anda mencoba membuat pod, pembuatan gagal. Masuk ke Konsol VPC, pilih Wilayah target, dan lihat informasi vSwitch yang digunakan oleh kluster. Anda menemukan bahwa Jumlah Alamat IP Tersedia vSwitch adalah 0. Untuk informasi lebih lanjut tentang cara mengonfirmasi masalah ini, lihat Informasi lebih lanjut.

Penyebab
vSwitch yang digunakan oleh Terway di node tidak memiliki alamat IP yang tersedia. Hal ini menyebabkan pod tetap dalam status ContainerCreating karena kekurangan sumber daya IP.
Solusi
Anda dapat memperluas vSwitch dengan menambahkan vSwitch baru untuk meningkatkan sumber daya IP kluster:
Masuk ke Konsol VPC, pilih Wilayah target, dan buat vSwitch baru.
CatatanvSwitch baru harus berada di wilayah dan zona yang sama dengan vSwitch yang kekurangan sumber daya IP. Jika kepadatan pod meningkat, kami merekomendasikan awalan jaringan blok CIDR vSwitch untuk pod adalah /19 atau lebih kecil, yang berarti blok CIDR berisi setidaknya 8.192 alamat IP.
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.Di halaman Clusters, klik nama kluster target, lalu di panel navigasi sebelah kiri, klik Add-ons.
Di halaman Add-on, temukan kartu terway-eniip, klik View Configurations, dan tambahkan ID vSwitch yang dibuat pada langkah sebelumnya ke opsi PodVswitchId.
Jalankan perintah berikut untuk menghapus semua pod Terway. Pod Terway akan dibuat ulang secara otomatis setelah dihapus.
CatatanJika Anda memilih ENI Eksklusif untuk Pod guna mencapai kinerja terbaik saat membuat kluster dengan Terway, Anda menggunakan mode ENI satu-IP. Jika Anda tidak memilih opsi ini, Anda menggunakan mode ENI multi-IP. Untuk informasi lebih lanjut, lihat Plugin jaringan Terway.
Untuk skenario ENI multi-IP:
kubectl delete -n kube-system pod -l app=terway-eniipUntuk skenario ENI satu-IP:
kubectl delete -n kube-system pod -l app=terway-eni
Lalu, jalankan perintah
kubectl get poduntuk mengonfirmasi bahwa semua pod Terway berhasil dibuat ulang.Buat pod baru dan konfirmasi bahwa pod tersebut berhasil dibuat dan diberi alamat IP dari vSwitch baru.
Informasi lebih lanjut
Sambungkan ke kluster Kubernetes. Untuk informasi lebih lanjut tentang cara menyambung, lihat Sambungkan ke kluster Kubernetes menggunakan kubectl. Jalankan perintah kubectl get pod dan temukan bahwa status pod adalah ContainerCreating. Jalankan perintah berikut untuk melihat log kontainer Terway di node tempat pod berada.
kubectl get pod -l app=terway-eniip -n kube-system | grep [$Node_Name] # [$Node_Name] adalah nama node tempat pod berada. Gunakan untuk menemukan nama pod Terway di node tersebut.
kubectl logs --tail=100 -f [$Pod_Name] -n kube-system -c terway # [$Pod_Name] adalah nama pod Terway di node tempat pod berada.Sistem menampilkan pesan yang mirip dengan berikut, dengan pesan kesalahan seperti `InvalidVSwitchId.IpNotEnough`, yang menunjukkan bahwa vSwitch kekurangan alamat IP.
time="2020-03-17T07:03:40Z" level=warning msg="Assign private ip address failed: Aliyun API Error: RequestId: 2095E971-E473-4BA0-853F-0C41CF52651D Status Code: 403 Code: InvalidVSwitchId.IpNotEnough Message: The specified VSwitch \"vsw-AAA\" has not enough IpAddress., retrying"Apa yang harus saya lakukan jika pod dalam mode jaringan Terway diberi alamat IP yang tidak berada dalam blok CIDR vSwitch?
Gejala
Dalam jaringan Terway, pod yang dibuat diberi alamat IP yang tidak berada dalam blok CIDR vSwitch yang dikonfigurasi.
Penyebab
Alamat IP pod berasal dari VPC dan ditugaskan ke kontainer menggunakan ENI. Anda hanya dapat mengonfigurasi vSwitch saat membuat ENI baru. Jika ENI sudah ada, alamat IP pod terus dialokasikan dari vSwitch yang sesuai dengan ENI tersebut.
Masalah ini biasanya terjadi dalam dua skenario berikut:
Anda menambahkan node ke kluster, tetapi node ini sebelumnya digunakan di kluster lain dan pod-nya tidak dikosongkan saat node dihapus. Dalam kasus ini, sumber daya ENI dari kluster sebelumnya mungkin masih ada di node.
Anda menambahkan atau memodifikasi konfigurasi vSwitch yang digunakan oleh Terway secara manual. Karena ENI dengan konfigurasi asli mungkin masih ada di node, pod baru mungkin terus menggunakan alamat IP dari ENI asli.
Solusi
Anda dapat memastikan bahwa berkas konfigurasi berlaku dengan membuat node baru dan memutar node lama.
Untuk memutar node lama, lakukan langkah-langkah berikut:
Kosongkan dan hapus node lama. Untuk informasi lebih lanjut, lihat Hapus node.
Putuskan ENI dari node yang dihapus. Untuk informasi lebih lanjut, lihat Kelola ENI.
Setelah ENI diputus, tambahkan kembali node yang dihapus ke kluster ACK asli. Untuk informasi lebih lanjut, lihat Tambahkan node yang ada.
Apa yang harus saya lakukan jika pod masih tidak dapat diberi alamat IP setelah saya memperluas vSwitch dalam mode jaringan Terway?
Gejala
Dalam jaringan Terway, pod masih tidak dapat diberi alamat IP setelah vSwitch diperluas.
Penyebab
Alamat IP pod berasal dari VPC dan ditugaskan ke kontainer menggunakan ENI. Anda hanya dapat mengonfigurasi vSwitch saat membuat ENI baru. Jika ENI sudah ada, alamat IP pod terus dialokasikan dari vSwitch yang sesuai dengan ENI tersebut. Karena kuota ENI di node telah habis, tidak ada ENI baru yang dapat dibuat, sehingga konfigurasi baru tidak dapat berlaku. Untuk informasi lebih lanjut tentang kuota ENI, lihat Ikhtisar ENI.
Solusi
Anda dapat memastikan bahwa berkas konfigurasi berlaku dengan membuat node baru dan memutar node lama.
Untuk memutar node lama, lakukan langkah-langkah berikut:
Kosongkan dan hapus node lama. Untuk informasi lebih lanjut, lihat Hapus node.
Putuskan ENI dari node yang dihapus. Untuk informasi lebih lanjut, lihat Kelola ENI.
Setelah ENI diputus, tambahkan kembali node yang dihapus ke kluster ACK asli. Untuk informasi lebih lanjut, lihat Tambahkan node yang ada.
Bagaimana cara mengaktifkan load balancing dalam kluster untuk kluster Terway IPvlan?
Gejala
Dalam mode IPvlan, untuk Terway v1.2.0 dan yang lebih baru, load balancing dalam kluster diaktifkan secara default untuk kluster baru. Saat Anda mengakses ExternalIP atau LoadBalancer dari dalam kluster, lalu lintas diseimbangkan ke jaringan Service. Bagaimana cara mengaktifkan load balancing dalam kluster untuk kluster Terway IPvlan yang sudah ada?
Penyebab
Kube-proxy mempersingkat lalu lintas ke ExternalIP dan LoadBalancer dari dalam kluster. Artinya, saat Anda mengakses alamat eksternal ini dari dalam kluster, lalu lintas sebenarnya tidak keluar tetapi dialihkan langsung ke Endpoints backend yang sesuai. Dalam mode Terway IPvlan, lalu lintas ke alamat ini ditangani oleh Cilium, bukan kube-proxy. Versi Terway sebelum v1.2.0 tidak mendukung pemersingkatan ini. Setelah rilis Terway v1.2.0, fitur ini diaktifkan secara default untuk kluster baru tetapi tidak untuk kluster yang sudah ada.
Solusi
Terway harus v1.2.0 atau yang lebih baru dan menggunakan mode IPvlan.
Jika kluster belum mengaktifkan mode IPvlan, konfigurasi ini tidak valid dan tidak perlu dikonfigurasi.
Fitur ini diaktifkan secara default untuk kluster baru dan tidak perlu dikonfigurasi.
Jalankan perintah berikut untuk memodifikasi ConfigMap Terway.
kubectl edit cm eni-config -n kube-systemTambahkan konten berikut ke eni_conf.
in_cluster_loadbalance: "true"CatatanPastikan bahwa
in_cluster_loadbalancedaneni_confberada di tingkat yang sama.Jalankan perintah berikut untuk membuat ulang pod Terway agar konfigurasi load balancing dalam kluster berlaku.
kubectl delete pod -n kube-system -l app=terway-eniipVerify The Configuration
Jalankan perintah berikut untuk memeriksa log kebijakan terway-ennip. Jika menunjukkan
enable-in-cluster-loadbalance=true, konfigurasi telah berlaku.kubectl logs -n kube-system <nama pod terway> policy | grep enable-in-cluster-loadbalance
Bagaimana cara menambahkan blok CIDR tertentu ke daftar putih untuk pod di kluster ACK yang menggunakan Terway?
Gejala
Anda sering perlu menyiapkan daftar putih untuk layanan seperti database untuk memberikan kontrol akses yang lebih aman. Persyaratan ini juga ada di jaringan kontainer, di mana Anda perlu menyiapkan daftar putih untuk alamat IP pod yang berubah secara dinamis.
Penyebab
Jaringan kontainer ACK terutama menggunakan dua plugin: Flannel dan Terway.
Dalam jaringan Flannel, karena pod mengakses layanan lain melalui node, Anda dapat menjadwalkan pod klien ke kumpulan node kecil yang tetap menggunakan afinitas node. Lalu, Anda dapat menambahkan alamat IP node ini ke daftar putih database.
Dalam jaringan Terway, alamat IP pod disediakan oleh ENI. Saat pod mengakses layanan eksternal melalui ENI, layanan eksternal melihat alamat klien sebagai alamat IP yang disediakan oleh ENI, bukan alamat IP node. Bahkan jika Anda mengikat pod ke node dengan afinitas, alamat IP klien untuk akses eksternal tetap merupakan alamat IP ENI. Alamat IP pod masih ditugaskan secara acak dari vSwitch yang ditentukan oleh Terway. Selain itu, pod klien sering memiliki konfigurasi seperti penskalaan otomatis, yang menyulitkan untuk memenuhi kebutuhan penskalaan elastis bahkan jika Anda dapat memperbaiki alamat IP pod. Kami merekomendasikan Anda menetapkan blok CIDR tertentu untuk klien mengalokasikan alamat IP, lalu menambahkan blok CIDR ini ke daftar putih database.
Solusi
Dengan menambahkan label ke node tertentu, Anda dapat menentukan vSwitch yang digunakan oleh pod. Saat pod dijadwalkan ke node dengan label tetap, pod tersebut dapat membuat alamat IP podnya menggunakan vSwitch khusus.
Di namespace kube-system, buat ConfigMap terpisah bernama eni-config-fixed, yang menentukan vSwitch khusus.
Contoh ini menggunakan vsw-2zem796p76viir02c**** dan 10.2.1.0/24.
apiVersion: v1 data: eni_conf: | { "vswitches": {"cn-beijing-h":["vsw-2zem796p76viir02c****"]}, "security_group": "sg-bp19k3sj8dk3dcd7****", "security_groups": ["sg-bp1b39sjf3v49c33****","sg-bp1bpdfg35tg****"] } kind: ConfigMap metadata: name: eni-config-fixed namespace: kube-systemBuat kelompok node dan tambahkan label
terway-config:eni-config-fixedke node. Untuk informasi lebih lanjut tentang cara membuat kelompok node, lihat Buat kelompok node.Untuk memastikan tidak ada pod lain yang dijadwalkan ke node di kelompok node ini, Anda juga dapat mengonfigurasi taint untuk kelompok node, seperti
fixed=true:NoSchedule.
Perluas kelompok node. Untuk informasi lebih lanjut, lihat Perluas kelompok node secara manual.
Node yang diperluas dari kelompok node ini akan memiliki label node dan taint yang ditetapkan pada langkah sebelumnya secara default.
Buat pod dan jadwalkan ke node yang memiliki label
terway-config:eni-config-fixed. Anda perlu menambahkan toleransi.apiVersion: apps/v1 # Untuk versi sebelum 1.8.0, gunakan apps/v1beta1. kind: Deployment metadata: name: nginx-fixed labels: app: nginx-fixed spec: replicas: 2 selector: matchLabels: app: nginx-fixed template: metadata: labels: app: nginx-fixed spec: tolerations: # Tambahkan toleransi. - key: "fixed" operator: "Equal" value: "true" effect: "NoSchedule" nodeSelector: terway-config: eni-config-fixed containers: - name: nginx image: nginx:1.9.0 # Ganti dengan citra aktual Anda <nama_citra:tag>. ports: - containerPort: 80Verify The Result
Jalankan perintah berikut untuk melihat alamat IP pod.
kubectl get po -o wide | grep fixedOutput yang diharapkan:
nginx-fixed-57d4c9bd97-l**** 1/1 Running 0 39s 10.2.1.124 bj-tw.062149.aliyun.com <none> <none> nginx-fixed-57d4c9bd97-t**** 1/1 Running 0 39s 10.2.1.125 bj-tw.062148.aliyun.com <none> <none>Anda dapat melihat bahwa alamat IP pod ditugaskan dari vSwitch yang ditentukan.
Jalankan perintah berikut untuk memperluas pod menjadi 30 replika.
kubectl scale deployment nginx-fixed --replicas=30Output yang diharapkan:
nginx-fixed-57d4c9bd97-2**** 1/1 Running 0 60s 10.2.1.132 bj-tw.062148.aliyun.com <none> <none> nginx-fixed-57d4c9bd97-4**** 1/1 Running 0 60s 10.2.1.144 bj-tw.062149.aliyun.com <none> <none> nginx-fixed-57d4c9bd97-5**** 1/1 Running 0 60s 10.2.1.143 bj-tw.062148.aliyun.com <none> <none> ...Anda dapat melihat bahwa semua alamat IP pod yang dihasilkan berada dalam vSwitch yang ditentukan. Lalu, Anda dapat menambahkan vSwitch ini ke daftar putih database untuk mengontrol akses untuk alamat IP pod dinamis.
Kami merekomendasikan Anda menggunakan node yang baru dibuat. Jika Anda menggunakan node yang sudah ada, Anda perlu memutus ENI dari instance ECS sebelum menambahkan node ke kluster. Anda harus menggunakan metode otomatis untuk menambahkan node yang ada (yang mengganti disk sistem). Untuk informasi lebih lanjut, lihat Kelola ENI dan Tambahkan node yang ada secara otomatis.
Pastikan untuk menambahkan label dan taint ke kelompok node tertentu untuk memastikan layanan yang tidak perlu dimasukkan ke daftar putih tidak dijadwalkan ke node ini.
Metode daftar putih ini pada dasarnya adalah penggantian konfigurasi. ACK akan menggunakan konfigurasi di ConfigMap yang ditentukan untuk menggantikan eni-config sebelumnya. Untuk informasi lebih lanjut tentang parameter konfigurasi, lihat Konfigurasi Dinamis Node Terway.
Kami merekomendasikan jumlah alamat IP di vSwitch yang ditentukan setidaknya dua kali jumlah pod yang diharapkan. Hal ini memberikan buffer untuk penskalaan di masa depan dan membantu mencegah situasi di mana tidak ada alamat IP yang tersedia untuk alokasi karena kegagalan yang mencegah reklamasi alamat IP tepat waktu.
Mengapa pod tidak dapat melakukan ping ke beberapa node ECS?
Gejala
Dalam mode jaringan Flannel, Anda memeriksa bahwa rute VPN normal, tetapi saat Anda masuk ke pod, Anda menemukan bahwa beberapa node ECS tidak dapat diping.
Penyebab
Ada dua alasan mengapa pod tidak dapat melakukan ping ke beberapa node ECS.
Penyebab 1: Instance ECS yang diakses oleh pod berada di VPC yang sama dengan kluster tetapi tidak berada di grup keamanan yang sama.
Penyebab 2: Instance ECS yang diakses oleh pod tidak berada di VPC yang sama dengan kluster.
Solusi
Solusinya bervariasi tergantung pada penyebabnya.
Untuk Penyebab 1, Anda perlu menambahkan instance ECS ke grup keamanan kluster. Untuk informasi lebih lanjut, lihat Konfigurasi grup keamanan.
Untuk Penyebab 2, Anda perlu mengakses instance ECS melalui titik akhir publiknya. Anda harus menambahkan alamat IP egress publik kluster ke grup keamanan instance ECS.
Mengapa node kluster memiliki taint NodeNetworkUnavailable?
Gejala
Dalam mode jaringan Flannel, node kluster yang baru ditambahkan memiliki taint NodeNetworkUnavailable, yang mencegah pod dijadwalkan.
Penyebab
Cloud Controller Manager (CCM) tidak segera menghapus taint node, kemungkinan karena tabel rute penuh atau adanya beberapa tabel rute di VPC.
Solusi
Gunakan perintah kubectl describe node untuk melihat informasi event node dan tangani kesalahan berdasarkan output aktual. Untuk masalah dengan beberapa tabel rute, Anda perlu mengonfigurasi CCM secara manual untuk mendukungnya. Untuk informasi lebih lanjut, lihat Gunakan beberapa tabel rute di VPC.
Mengapa pod gagal dimulai dan melaporkan kesalahan "no IP addresses available in range"?
Gejala
Dalam mode jaringan Flannel, pod gagal dimulai. Saat Anda memeriksa event pod, Anda melihat pesan kesalahan yang mirip dengan failed to allocate for range 0: no IP addresses available in range set: 172.30.34.129-172.30.34.190.
Penyebab
Solusi
Untuk kebocoran alamat IP yang disebabkan oleh versi ACK lama, Anda dapat meningkatkan kluster Anda ke versi 1.20 atau yang lebih baru. Untuk informasi lebih lanjut, lihat Tingkatkan kluster secara manual.
Untuk kebocoran alamat IP yang disebabkan oleh versi Flannel lama, Anda dapat meningkatkan Flannel ke v0.15.1.11-7e95fe23-aliyun atau yang lebih baru. Lakukan langkah-langkah berikut:
Di Flannel v0.15.1.11-7e95fe23-aliyun dan yang lebih baru, ACK memindahkan database alokasi rentang IP default di Flannel ke direktori sementara /var/run. Direktori ini secara otomatis dihapus saat restart, mencegah kebocoran alamat IP.
Perbarui Flannel ke 0.15.1.11-7e95fe23-aliyun atau yang lebih baru. Untuk informasi lebih lanjut, lihat Kelola komponen.
Jalankan perintah berikut untuk mengedit berkas kube-flannel-cfg. Lalu, tambahkan parameter dataDir dan ipam ke berkas kube-flannel-cfg.
kubectl -n kube-system edit cm kube-flannel-cfgBerikut adalah contoh berkas kube-flannel-cfg.
# Sebelum modifikasi { "name": "cb0", "cniVersion":"0.3.1", "plugins": [ { "type": "flannel", "delegate": { "isDefaultGateway": true, "hairpinMode": true } }, # portmap # Mungkin tidak ada di versi lama. Abaikan jika tidak digunakan. { "type": "portmap", "capabilities": { "portMappings": true }, "externalSetMarkChain": "KUBE-MARK-MASQ" } ] } # Setelah modifikasi { "name": "cb0", "cniVersion":"0.3.1", "plugins": [ { "type": "flannel", "delegate": { "isDefaultGateway": true, "hairpinMode": true }, # Perhatikan koma. "dataDir": "/var/run/cni/flannel", "ipam": { "type": "host-local", "dataDir": "/var/run/cni/networks" } }, { "type": "portmap", "capabilities": { "portMappings": true }, "externalSetMarkChain": "KUBE-MARK-MASQ" } ] }Jalankan perintah berikut untuk memulai ulang pod Flannel.
Memulai ulang pod Flannel tidak memengaruhi layanan yang sedang berjalan.
kubectl -n kube-system delete pod -l app=flannelHapus direktori IP di node dan mulai ulang node.
Kosongkan Pod yang ada di node. Untuk informasi lebih lanjut, lihat Mengosongkan node dan mengelola status penjadwalannya.
Masuk ke node dan jalankan perintah berikut untuk menghapus direktori IP.
rm -rf /etc/cni/ rm -rf /var/lib/cni/Mulai ulang node. Untuk informasi lebih lanjut, lihat Mulai ulang instance.
Ulangi langkah-langkah di atas untuk menghapus direktori IP di semua node.
Jalankan perintah berikut di node untuk memverifikasi apakah direktori sementara diaktifkan.
if [ -d /var/lib/cni/networks/cb0 ]; then echo "not using tmpfs"; fi if [ -d /var/run/cni/networks/cb0 ]; then echo "using tmpfs"; fi cat /etc/cni/net.d/10-flannel.conf*Jika
using tmpfsdikembalikan, artinya node saat ini telah mengaktifkan direktori sementara /var/run untuk database alokasi rentang IP, dan perubahan berhasil.
Jika Anda tidak dapat meningkatkan ACK atau Flannel dalam waktu dekat, Anda dapat menggunakan metode berikut untuk penanganan darurat sementara. Perbaikan sementara ini berlaku untuk kebocoran yang disebabkan oleh kedua alasan di atas.
Perbaikan sementara ini hanya membantu Anda membersihkan alamat IP yang bocor. Kebocoran alamat IP mungkin masih terjadi, jadi Anda tetap perlu meningkatkan versi Flannel atau kluster.
CatatanPerintah berikut tidak berlaku untuk Flannel v0.15.1.11-7e95fe23-aliyun dan versi yang lebih baru yang telah beralih ke penggunaan /var/run untuk menyimpan informasi alokasi alamat IP.
Skrip berikut hanya sebagai referensi. Jika node telah dikustomisasi, skrip mungkin tidak berfungsi dengan benar.
Atur node yang bermasalah menjadi tidak dapat dijadwalkan. Untuk informasi selengkapnya, lihat Mengosongkan node dan mengelola status penjadwalannya.
Gunakan skrip berikut untuk membersihkan node berdasarkan mesin runtime.
Jika Anda menggunakan runtime Docker, gunakan skrip berikut untuk membersihkan node.
#!/bin/bash cd /var/lib/cni/networks/cb0; docker ps -q > /tmp/running_container_ids find /var/lib/cni/networks/cb0 -regex ".*/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" -printf '%f\n' > /tmp/allocated_ips for ip in $(cat /tmp/allocated_ips); do cid=$(head -1 $ip | sed 's/\r#g' | cut -c-12) grep $cid /tmp/running_container_ids > /dev/null || (echo removing leaked ip $ip && rm $ip) doneJika Anda menggunakan runtime containerd, gunakan skrip berikut untuk membersihkan node.
#!/bin/bash # install jq yum install -y jq # export all running pod's configs crictl -r /run/containerd/containerd.sock pods -s ready -q | xargs -n1 crictl -r /run/containerd/containerd.sock inspectp > /tmp/flannel_ip_gc_all_pods # export and sort pod ip cat /tmp/flannel_ip_gc_all_pods | jq -r '.info.cniResult.Interfaces.eth0.IPConfigs[0].IP' | sort > /tmp/flannel_ip_gc_all_pods_ips # export flannel's all allocated pod ip ls -alh /var/lib/cni/networks/cb0/1* | cut -f7 -d"/" | sort > /tmp/flannel_ip_gc_all_allocated_pod_ips # print leaked pod ip comm -13 /tmp/flannel_ip_gc_all_pods_ips /tmp/flannel_ip_gc_all_allocated_pod_ips > /tmp/flannel_ip_gc_leaked_pod_ip # clean leaked pod ip echo "Found $(cat /tmp/flannel_ip_gc_leaked_pod_ip | wc -l) leaked Pod IP, press <Enter> to clean." read sure # delete leaked pod ip for pod_ip in $(cat /tmp/flannel_ip_gc_leaked_pod_ip); do rm /var/lib/cni/networks/cb0/${pod_ip} done echo "Leaked Pod IP cleaned, removing temp file." rm /tmp/flannel_ip_gc_all_pods_ips /tmp/flannel_ip_gc_all_pods /tmp/flannel_ip_gc_leaked_pod_ip /tmp/flannel_ip_gc_all_allocated_pod_ips
Atur node yang bermasalah ke status dapat dijadwalkan. Untuk informasi lebih lanjut, lihat Mengosongkan node dan mengelola status penjadwalannya.
Bagaimana cara mengubah jumlah IP node, blok CIDR IP Pod, atau blok CIDR IP Service?
Jumlah IP node, blok CIDR IP Pod, dan blok CIDR IP Service tidak dapat diubah setelah kluster dibuat. Rencanakan segmen jaringan Anda secara wajar saat membuat kluster.
Dalam skenario apa saya perlu mengonfigurasi beberapa tabel rute untuk kluster?
Dalam mode jaringan Flannel, berikut adalah skenario umum di mana Anda perlu mengonfigurasi beberapa tabel rute untuk cloud-controller-manager. Untuk informasi lebih lanjut tentang cara mengonfigurasi beberapa tabel rute untuk kluster, lihat Gunakan beberapa tabel rute di VPC.
Skenario
Skenario 1:
Diagnosis sistem menampilkan "Blok CIDR Pod node tidak berada dalam entri tabel rute VPC. Silakan merujuk ke penambahan entri rute kustom ke tabel rute kustom untuk menambahkan rute next-hop untuk blok CIDR Pod ke node saat ini."
Penyebab: Saat membuat tabel rute kustom di kluster, Anda perlu mengonfigurasi CCM untuk mendukung beberapa tabel rute.
Skenario 2:
Komponen cloud-controller-manager melaporkan kesalahan jaringan:
multiple route tables found.Penyebab: Saat beberapa tabel rute ada di kluster, Anda perlu mengonfigurasi CCM untuk mendukung beberapa tabel rute.
Skenario 3:
Dalam mode jaringan Flannel, node kluster yang baru ditambahkan memiliki taint NodeNetworkUnavailable, dan komponen cloud-controller-manager tidak segera menghapus taint node, yang mencegah pod dijadwalkan. Untuk informasi lebih lanjut, lihat Mengapa node kluster memiliki taint NodeNetworkUnavailable?.
Apakah plugin jaringan pihak ketiga didukung?
Kluster ACK tidak mendukung instalasi dan konfigurasi plugin jaringan pihak ketiga. Menginstalnya dapat menyebabkan jaringan kluster menjadi tidak tersedia.
Mengapa alamat CIDR Pod tidak mencukupi, menyebabkan kesalahan no IP addresses available in range set?
Kesalahan ini terjadi karena kluster ACK Anda menggunakan plugin jaringan Flannel. Flannel menentukan blok CIDR jaringan Pod, yang menyediakan kumpulan alamat IP terbatas untuk setiap node guna ditugaskan ke pod. Rentang ini tidak dapat diubah. Setelah alamat IP dalam rentang habis, pod baru tidak dapat dibuat di node tersebut. Anda harus melepaskan beberapa alamat IP atau membuat ulang kluster. Untuk informasi lebih lanjut tentang cara merencanakan jaringan kluster, lihat Rencanakan jaringan untuk kluster ACK yang dikelola.
Berapa jumlah pod yang didukung dalam mode jaringan Terway?
Jumlah pod yang didukung oleh kluster dalam mode jaringan Terway adalah jumlah alamat IP yang didukung oleh instance ECS. Untuk informasi lebih lanjut, lihat Gunakan plugin jaringan Terway.
Mode bidang data Terway DataPath V2
Mulai dari Terway v1.8.0, saat Anda membuat kluster baru dan memilih opsi IPvlan, mode DataPath V2 diaktifkan secara default. Untuk kluster yang sudah ada yang telah mengaktifkan fitur IPvlan, bidang data tetap menggunakan metode IPvlan asli.
DataPath V2 adalah jalur bidang data generasi baru. Dibandingkan dengan mode IPvlan asli, mode DataPath V2 memiliki kompatibilitas yang lebih baik. Untuk informasi lebih lanjut, lihat Gunakan plugin jaringan Terway.
Bagaimana cara melihat siklus hidup pod jaringan Terway?
Masuk ke Konsol ACK. Di panel navigasi sebelah kiri, klik Clusters.
Di halaman Clusters, temukan kluster yang Anda inginkan dan klik namanya. Di panel sebelah kiri, pilih .
Di bagian atas halaman DaemonSets, klik
dan pilih namespace kube-system.Di halaman DaemonSets, cari terway-eniip dan klik terway-eniip di bawah daftar Name.
Berikut menjelaskan status saat ini dari pod:
Jenis
Deskripsi
Ready
Semua kontainer di pod telah dimulai dan berjalan normal.
Pending
Pod sedang menunggu Terway mengonfigurasi sumber daya jaringan untuknya.
Pod belum dijadwalkan ke node karena sumber daya node tidak mencukupi. Untuk informasi lebih lanjut, lihat Pemecahan masalah pengecualian pod.
ContainerCreating
Pod telah dijadwalkan ke node, menunjukkan bahwa pod sedang menunggu inisialisasi jaringan selesai.
Untuk informasi lebih lanjut, lihat Siklus Hidup Pod.
FAQ tentang kegagalan peningkatan komponen Terway
Gejala | Solusi |
Kode kesalahan | Fitur EIP tidak lagi didukung di komponen Terway. Untuk terus menggunakan fitur ini, lihat Migrasikan EIP dari Terway ke ack-extend-network-controller. |
Dalam mode jaringan Terway, pembuatan pod gagal dengan kesalahan "cannot find MAC address"
Gejala
Pembuatan pod gagal dengan kesalahan yang menunjukkan bahwa alamat MAC tidak dapat ditemukan.
failed to do add; error parse config, can't found dev by mac 00:16:3e:xx:xx:xx: not foundSolusi
Pemuatan network interface card di sistem bersifat asinkron. Saat CNI sedang dikonfigurasi, network interface card mungkin belum dimuat dengan sukses. Dalam kasus ini, CNI secara otomatis mencoba ulang, dan hal ini seharusnya tidak menyebabkan masalah. Periksa status akhir pod untuk menentukan apakah berhasil.
Jika pod gagal dibuat dalam waktu lama dan kesalahan di atas dilaporkan, biasanya karena driver gagal dimuat saat ENI sedang dilampirkan karena memori orde tinggi tidak mencukupi. Anda dapat mengatasi hal ini dengan memulai ulang instance.
Apa yang perlu saya ketahui tentang mengonfigurasi domain kluster (ClusterDomain)?
ClusterDomain default untuk kluster ACK adalah cluster.local. Anda juga dapat menyesuaikan domain kluster saat membuat kluster. Perhatikan hal-hal berikut:
Anda hanya dapat mengonfigurasi ClusterDomain saat membuat kluster. ClusterDomain tidak dapat dimodifikasi setelah kluster dibuat.
ClusterDomain kluster adalah domain tingkat atas untuk domain Service dalam kluster. Ini adalah zona resolusi nama domain independen untuk layanan internal kluster. ClusterDomain tidak boleh tumpang tindih dengan zona DNS pribadi atau publik di luar kluster untuk menghindari konflik resolusi DNS.