Pada kluster ACK berskala besar yang menggunakan Terway, setiap agen Felix di tiap node terhubung langsung ke server API untuk mengambil aturan NetworkPolicy—menyebabkan beban berlebih pada server API saat skala meningkat. Topik ini menjelaskan cara mengatasi bottleneck tersebut dengan men-deploy Typha sebagai lapisan cache antara server API dan Felix, atau dengan menonaktifkan fitur NetworkPolicy jika kebijakan jaringan tidak lagi diperlukan.
Latar Belakang
Terway mengimplementasikan NetworkPolicy menggunakan agen Felix dari Calico. Pada kluster dengan lebih dari 100 node, setiap instans Felix secara independen melakukan watch terhadap server API Kubernetes untuk pembaruan kebijakan. Karena jumlah koneksi watch meningkat sebanding dengan jumlah node, beban pada server API tumbuh secara linear seiring peningkatan ukuran kluster.
Typha berada di antara server API dan semua instans Felix, berperan sebagai repeater yang mengurangi jumlah koneksi watch langsung ke server API.
Pilih pendekatan Anda:
| Pendekatan | Kapan digunakan |
|---|---|
| Deploy Typha | Kebijakan jaringan masih diperlukan; kluster memiliki lebih dari 100 node |
| Nonaktifkan NetworkPolicy | Kebijakan jaringan tidak lagi diperlukan dan Anda ingin menghilangkan seluruh overhead terkait |
Setelah menonaktifkan fitur NetworkPolicy, Anda tidak dapat lagi menggunakan kebijakan jaringan untuk mengontrol komunikasi antar Pod.
Prasyarat
Sebelum memulai, pastikan Anda telah memiliki:
Kluster ACK dengan Plugin Terway terinstal dan lebih dari 100 node. Untuk detailnya, lihat Buat kluster ACK yang dikelola.
File kubeconfig untuk kluster dengan klien kubectl yang terhubung ke kluster tersebut. Untuk detailnya, lihat Dapatkan kubeconfig dan hubungkan kubectl ke kluster.
Deploy Typha sebagai repeater
Typha berperan sebagai repeater antara server API Kubernetes dan agen Felix. Deploy minimal 3 replika Typha, tambahkan 1 replika untuk setiap 200 node tambahan.
Masuk ke Konsol ACK.
Perbarui Terway ke versi terbaru. Untuk detailnya, lihat Kelola komponen.
Komponen berbeda tergantung mode Terway. Untuk perbandingan, lihat Bandingkan mode Terway.
Buat file bernama
calico-typha.yamldan tambahkan konten berikut. Ganti{REGION-ID}dengan ID wilayah kluster Anda. Atur nilaireplicasmenjadi 1 per 200 node dengan minimum 3. Jika kluster Anda menjalankan Kubernetes versi sebelum 1.21, ubahpolicy/v1menjadipolicy/v1beta1pada bagian PodDisruptionBudget.apiVersion: v1 kind: Service metadata: name: calico-typha namespace: kube-system labels: k8s-app: calico-typha spec: ports: - port: 5473 protocol: TCP targetPort: calico-typha name: calico-typha selector: k8s-app: calico-typha --- apiVersion: apps/v1 kind: Deployment metadata: name: calico-typha namespace: kube-system labels: k8s-app: calico-typha spec: replicas: 3 # 1 replika per 200 node; minimum 3 revisionHistoryLimit: 2 selector: matchLabels: k8s-app: calico-typha template: metadata: labels: k8s-app: calico-typha annotations: cluster-autoscaler.kubernetes.io/safe-to-evict: 'true' spec: nodeSelector: kubernetes.io/os: linux hostNetwork: true tolerations: - operator: Exists serviceAccountName: terway priorityClassName: system-cluster-critical containers: - image: registry-vpc.{REGION-ID}.aliyuncs.com/acs/typha:v3.20.2 name: calico-typha ports: - containerPort: 5473 name: calico-typha protocol: TCP env: - name: TYPHA_LOGSEVERITYSCREEN value: "info" - name: TYPHA_LOGFILEPATH value: "none" # Nonaktifkan logging ke file (tidak diperlukan di Kubernetes) - name: TYPHA_LOGSEVERITYSYS value: "none" # Nonaktifkan syslog (tidak diperlukan di Kubernetes) - name: TYPHA_CONNECTIONREBALANCINGMODE value: "kubernetes" # Pantau API Kubernetes untuk menyeimbangkan kembali koneksi Felix - name: TYPHA_DATASTORETYPE value: "kubernetes" - name: TYPHA_HEALTHENABLED value: "true" livenessProbe: httpGet: path: /liveness port: 9098 host: localhost periodSeconds: 30 initialDelaySeconds: 30 readinessProbe: httpGet: path: /readiness port: 9098 host: localhost periodSeconds: 10 --- apiVersion: policy/v1 # Gunakan policy/v1beta1 untuk Kubernetes < 1.21 kind: PodDisruptionBudget metadata: name: calico-typha namespace: kube-system labels: k8s-app: calico-typha spec: maxUnavailable: 1 selector: matchLabels: k8s-app: calico-typha --- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: bgppeers.crd.projectcalico.org spec: scope: Cluster group: crd.projectcalico.org versions: - name: v1 served: true storage: true schema: openAPIV3Schema: type: object properties: apiVersion: type: string names: kind: BGPPeer plural: bgppeers singular: bgppeerTerapkan manifes tersebut.
kubectl apply -f calico-typha.yamlVerifikasi bahwa semua Pod Typha sedang berjalan.
kubectl get pods -l k8s-app=calico-typha -n kube-systemSemua Pod harus menampilkan
1/1pada kolom READY danRunningpada kolom STATUS sebelum Anda melanjutkan. Output-nya mirip dengan:NAME READY STATUS RESTARTS AGE calico-typha-66498ddfbd-2pzsr 1/1 Running 0 69s calico-typha-66498ddfbd-lrtzw 1/1 Running 0 50s calico-typha-66498ddfbd-scckd 1/1 Running 0 62sKonfigurasikan Terway agar mengarahkan koneksi Felix melalui Typha.
kubectl edit cm eni-config -n kube-systemDi dalam blok
eni_conf, tambahkan atau perbarui bidang berikut:felix_relay_service: calico-typha disable_network_policy: "false" # Abaikan baris ini jika kunci tersebut tidak adaMulai ulang Terway untuk menerapkan perubahan.
kubectl get pod -n kube-system | grep terway | awk '{print $1}' | xargs kubectl delete -n kube-system podOutput yang diharapkan mirip dengan:
pod "terway-eniip-8hmz7" deleted pod "terway-eniip-dclfn" deleted pod "terway-eniip-rmctm" deleted ...
Nonaktifkan fitur NetworkPolicy
Jika kebijakan jaringan tidak lagi diperlukan, nonaktifkan fitur NetworkPolicy untuk menghilangkan seluruh beban terkait Felix dari server API.
Setelah menonaktifkan fitur NetworkPolicy, Anda tidak dapat lagi menggunakan kebijakan jaringan untuk mengontrol komunikasi antar Pod.
Edit ConfigMap Terway dan atur nilai
disable_network_policymenjadi"true".kubectl edit cm -n kube-system eni-configTambahkan atau perbarui bidang berikut:
disable_network_policy: "true"Mulai ulang Terway untuk menerapkan perubahan.
kubectl get pod -n kube-system | grep terway | awk '{print $1}' | xargs kubectl delete -n kube-system podOutput yang diharapkan mirip dengan:
pod "terway-eniip-8hmz7" deleted pod "terway-eniip-dclfn" deleted pod "terway-eniip-rmctm" deleted ...
Verifikasi hasil
Setelah men-deploy Typha, proxy NetworkPolicy mulai menggunakan komponen Typha, yang mengurangi beban pada server API. Anda dapat memantau trafik yang didistribusikan ke instans Server Load Balancer (SLB) untuk memeriksa apakah beban pada server API telah berkurang.