Episode 14 membuat mesh tetap cepat saat membesar: scaling istiod dan pengelolaan xDS churn, sizing resource sidecar, pembatasan scope dengan Sidecar CRD, tuning connection pool, serta pemantauan performa control plane.

Mesh yang kecil terasa ringan. Saat workload membengkak ke ratusan atau ribuan, gejala mulai muncul: istiod kewalahan, sidecar memakai terlalu banyak memori, dan konfigurasi xDS mengalir lebih lambat. Episode 14 ini membahas cara mengukur, menskalakan, dan menyetel Istio agar tetap responsif di skala besar.
istiod bisa diskalakan secara horizontal, tetapi konfigurasi default-nya single replica. Untuk skala besar, aktifkan HorizontalPodAutoscaler:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: istiod
namespace: istio-system
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: istiod
minReplicas: 2
maxReplicas: 5
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 80averageUtilization: 80 menambah replica saat CPU istiod melewati 80 persen. Jangan hanya menambah replica tanpa data — pantau dulu metriknya (bagian terakhir episode ini).
Istiod menghabiskan CPU terutama untuk xDS churn: setiap kali ada perubahan (service dibuat, Pod restart, config berubah), istiod harus menghitung dan mengirim konfigurasi baru ke sidecar yang terpengaruh. Cara mengurangi churn:
Sidecar CRD (episode 12).PILOT_PUSH_THROTTLE.Ingat aturan praktis: semakin banyak konfigurasi yang harus dihitung ulang, semakin berat istiod. Kurangi jumlah listener dan cluster per sidecar dengan scoping.
Envoy memakai resource berdasarkan jumlah listener, cluster, dan traffic. Ukuran default sering terlalu kecil atau terlalu besar. Mulai dari angka ini lalu ukur dengan metrik nyata:
apiVersion: apps/v1
kind: Deployment
metadata:
name: productpage
spec:
template:
metadata:
annotations:
sidecar.istio.io/proxyCPU: "100m"
sidecar.istio.io/proxyCPULimit: "2000m"
sidecar.istio.io/proxyMemory: "128Mi"
sidecar.istio.io/proxyMemoryLimit: "1024Mi"
spec:
containers:
- name: productpage
image: istio/examples-bookinfo-productpage-v1:1.19.0sidecar.istio.io/proxyCPU: "100m" adalah contoh annotation untuk mengatur request CPU sidecar. Verifikasi pemakaian dengan:
kubectl top pod productpage-abc123 --containers
kubectl exec productpage-abc123 -c istio-proxy -- curl localhost:15000/stats | grep -E "server.memory|server.live"kubectl top pod --containers menunjukkan pemakaian nyata per container. Setel request dari median pemakaian normal dan limit dengan margin aman.
Sumber memori Envoy terbesar adalah jumlah listener dan cluster di konfigurasinya. Sidecar CRD yang membatasi egress (episode 12) bisa memangkas memori secara signifikan di meshes besar — sering kali ini investasi terbaik sebelum menaikkan limit.
Traffic HTTP diproses dengan filter di level L7; traffic TCP mentah tidak. Jalur HTTP membawa biaya tambahan (routing, telemetry, tracing) yang tidak ada di TCP. Saat performa adalah prioritas dan kalian tidak butuh fitur L7, pertimbangkan protocol TCP di Service dan Gateway untuk layanan tersebut.
Connection pool mengatur antrean ke upstream:
apiVersion: networking.istio.io/v1
kind: DestinationRule
metadata:
name: tuning-pool
spec:
host: productpage
trafficPolicy:
connectionPool:
tcp:
maxConnections: 100
connectTimeout: 3s
http:
http2MaxRequests: 2000
maxRequestsPerConnection: 100
idleTimeout: 10midleTimeout: 10m menutup koneksi idle untuk membebaskan resource. Ukur dulu lalu setel: pool yang terlalu kecil menambah latensi, terlalu besar menghabiskan resource backend.
Control plane juga harus diukur. Istiod mengekspos metrik di port 15014:
kubectl exec -n istio-system deploy/istiod -- curl localhost:15014/metrics | grep -E "pilot_|istio_xds" | head -20Perhatikan metrik seperti pilot_proxy_convergence_time (waktu konvergensi konfigurasi) dan istio_xds_push_errors. Jika konvergensi membengkak, periksa churn dan ukuran mesh. Metrik ini dipakai juga untuk alerting di episode 20.
Tip
Jangan tuning tanpa data. Pasang dulu observability (episode 8), ukur baseline, baru ubah satu variabel per iterasi dan bandingkan.
Episode 14 menjaga mesh tetap cepat: HPA untuk istiod dengan pemantauan xDS churn, sizing resource sidecar berbasis pengukuran, pembatasan scope untuk menghemat memori, tuning connection pool, serta metrik control plane untuk mengukur konvergensi.
Inti yang harus dibawa pulang:
sidecar.istio.io/proxy* mengontrol resource sidecar.Di episode 15 selanjutnya kita akan melampaui CRD bawaan: advanced extensibility dengan EnvoyFilter dan WASM — kapan memakai EnvoyFilter dengan aman, membangun filter Proxy-WASM untuk telemetry kustom, dan contoh header enricher serta authz hook.