Leistung und Skalierung des Istio-Dienstnetz-Add-Ons
Das Istio-basierte Service Mesh-Add-On ist logisch in eine Steuerungsebene (istiod
) und in eine Datenebene unterteilt. Die Datenebene besteht aus Envoy-Sidecar-Proxys innerhalb von Workload-Pods. Diese Envoy-Proxys werden von Istiod verwaltet und konfiguriert. Dieser Artikel enthält Informationen zur Leistung der Steuerungs- und Datenebene für die Revision „asm-1-19“ (einschließlich Ressourcenverbrauch, Sidecarkapazität und zusätzlicher Wartezeit). Darüber hinaus finden Sie hier Empfehlungen für die Behandlung potenzieller Ressourcenbelastungen bei hoher Auslastung. In diesem Artikel wird auch beschrieben, wie Sie die Skalierung für die Steuerungsebene und Gateways anpassen.
Leistung der Steuerungsebene
Die CPU- und Arbeitsspeicheranforderungen von Istiod korrelieren mit der Rate der Bereitstellungs- und Konfigurationsänderungen und der Anzahl verbundener Proxys. Folgende Szenarien wurden getestet:
- Pod-Churn: Untersucht die Auswirkungen von Pod-Churning auf
istiod
. Zur Reduzierung von Variablen wird für alle Sidecars nur ein einzelner Dienst verwendet. - Mehrere Dienste: Untersucht die Auswirkungen mehrerer Dienste auf die maximale Anzahl von Sidecars, die Istiod verwalten kann (Sidecarkapazität). Hierbei hat jeder Dienst
N
Sidecars, woraus sich der gesamte Maximalwert ergibt.
Testspezifikationen
- Eine einzelne
istiod
-Instanz mit Standardeinstellungen - Horizontale automatische Podskalierung deaktiviert
- Getestet mit zwei Netzwerk-Plug-Ins: Azure Container Networking Interface (CNI) Overlay und Azure CNI Overlay mit Cilium (empfohlene Netzwerk-Plug-Ins für große Cluster)
- Knoten-SKU: Standard D16 v3 (16 vCPUs, 64 GB Arbeitsspeicher)
- Kubernetes-Version: 1.28.5
- Istio-Revision: asm-1-19
Pod-Churn
Das ClusterLoader2-Framework wurde verwendet, um die maximale Anzahl von Sidecars zu bestimmen, die Istiod bei Auftreten von Sidecar-Churning verwalten kann. Der Churn-Prozentsatz wird als prozentualer Anteil der Sidecars definiert, die während des Tests weggefallen oder hinzugekommen sind. Ein Churn von 50 Prozent für 10.000 Sidecars bedeutet beispielsweise, dass 5.000 Sidecars weggefallen und anschließend 5.000 Sidecars hinzugekommen sind. Die getesteten Churn-Prozentsätze wurden auf der Grundlage des typischen Churn-Prozentsatzes während des Bereitstellungsrollouts (maxUnavailable
) ermittelt. Zur Berechnung des Churn wurde die Gesamtanzahl von Sidecars mit Churn (unabhängig von der Art des Churn) für die tatsächliche Zeit bis zum Abschluss des Churning-Prozesses ermittelt.
Sidecarkapazität und sowie CPU und Arbeitsspeicher von Istiod
Azure CNI Overlay
Churn (Prozent) | Churn (Sidecars/Sek.) | Sidecarkapazität | Istiod-Arbeitsspeicher (GB) | Istiod-CPU |
---|---|---|---|---|
0 | -- | 25000 | 32,1 | 15 |
25 | 31.2 | 15000 | 22.2 | 15 |
50 | 31.2 | 15000 | 25.4 | 15 |
Azure CNI Overlay mit Cilium
Churn (Prozent) | Churn (Sidecars/Sek.) | Sidecarkapazität | Istiod-Arbeitsspeicher (GB) | Istiod-CPU |
---|---|---|---|---|
0 | -- | 30.000 | 41,2 | 15 |
25 | 41,7 | 25000 | 36,1 | 16 |
50 | 37,9 | 25000 | 42,7 | 16 |
Mehrere Dienste
Das ClusterLoader2-Framework wurde verwendet, um die maximale Anzahl von Sidecars zu bestimmen, die istiod
mit 1.000 Diensten verwalten kann. Die Ergebnisse können mit dem Null-Prozent-Churn-Test (einzelner Dienst) im Pod-Churn-Szenario verglichen werden. Jeder Dienst verfügte über N
Sidecars, die zur gesamten maximalen Anzahl von Sidecars beitragen. Die API Server-Ressourcenauslastung wurde beobachtet, um festzustellen, ob das Add-On zu einer erheblichen Belastung führt.
Sidecarkapazität
Azure CNI Overlay | Azure CNI Overlay mit Cilium |
---|---|
20000 | 20000 |
CPU und Arbeitsspeicher
Resource | Azure CNI Overlay | Azure CNI Overlay mit Cilium |
---|---|---|
API-Serverarbeitsspeicher (GB) | 38,9 | 9.7 |
API-Server-CPU | 6.1 | 4.7 |
Istiod-Arbeitsspeicher (GB) | 40,4 | 42,6 |
Istiod-CPU | 15 | 16 |
Leistung der Datenebene
Die Sidecarleistung wird durch verschiedene Faktoren beeinflusst. Hierzu zählen beispielsweise die Anforderungsgröße, die Anzahl von Proxyarbeitsthreads und die Anzahl von Clientverbindungen. Darüber hinaus durchläuft jede Anforderung auf ihrem Weg durch das Mesh den clientseitigen Proxy und dann den serverseitigen Proxy. Daher werden Wartezeit und Ressourcenverbrauch gemessen, um die Leistung der Datenebene zu ermitteln.
Fortio
wurde zum Erstellen der Last verwendet. Der Test wurde mit dem Istio-Benchmarkrepository durchgeführt, das für die Verwendung mit dem Add-On angepasst wurde.
Testspezifikationen
- Getestet mit zwei Netzwerk-Plug-Ins: Azure CNI Overlay und Azure CNI Overlay mit Cilium (empfohlene Netzwerk-Plug-Ins für große Cluster)
- Knoten-SKU: Standard D16 v5 (16 vCPUs, 64 GB Arbeitsspeicher)
- Kubernetes-Version: 1.28.5
- Zwei Proxyworker
- Nutzdaten mit einer Größe von 1 KB
- 1.000 QPS (Queries per Second, Abfragen pro Sekunde) bei variierenden Clientverbindungen
- Aktivierung des
http/1.1
-Protokolls und von Mutual Transport Layer Security (TLS) - 26 gesammelte Datenpunkte
CPU und Arbeitsspeicher
Die Arbeitsspeicher- bzw. CPU-Auslastung für den Client- und den Serverproxy für 16 Clientverbindungen und 1.000 QPS in allen Netzwerk-Plug-In-Szenarien liegt bei etwa 0,4 virtuellen CPUs bzw. bei 72 MB.
Latency
Der Sidecar-Envoy-Proxy sammelt unformatierte Telemetriedaten nach der Antwort an einen Client, was sich nicht direkt auf die Gesamtverarbeitungszeit der Anforderung auswirkt. Dieser Prozess verzögert jedoch den Beginn der Behandlung der nächsten Anforderung. Somit trägt er zu Wartezeiten in der Warteschlange bei und beeinflusst die durchschnittliche Wartezeit sowie die Wartezeit am Ende. Die tatsächliche Wartezeit am Ende variiert je nach Datenverkehrsmuster.
In den folgenden Ergebnissen werden die Auswirkungen des Hinzufügens von Sidecarproxys zum Datenpfad ausgewertet und die P90- und die P99-Wartezeit dargestellt.
- Sidecar-Datenverkehrspfad: Client --> Client-Sidecar --> Server-Sidecar --> Server
- Baseline-Datenverkehrspfad: Client --> Server
Hier finden Sie einen Vergleich der Latenzleistung auf Datenebene über das Istio-Add-On und die AKS-Versionen hinweg.
Azure CNI Overlay | Azure CNI Overlay mit Cilium |
---|---|
Skalierung
Automatische Anpassung des horizontalen Pods
Horizontale automatische Podskalierung (Horizontal Pod Autoscaling, HPA) ist für die istiod
- und Eingangsgatewaypods aktiviert. Standardkonfigurationen für istiod
und die Gateways:
- Mindestanzahl Replikate: 2
- Maximale Anzahl Replikate: 5
- CPU-Auslastung: 80 %
Hinweis
Um Konflikte mit PodDisruptionBudget
zu verhindern, lässt das Add-On das Festlegen von minReplicas
auf einen niedrigeren Wert als die anfängliche Standardeinstellung 2
nicht zu.
Im Folgenden sind die HPA-Ressourcen für istiod
und das Eingangsgateway aufgeführt:
NAMESPACE NAME REFERENCE
aks-istio-ingress aks-istio-ingressgateway-external-asm-1-19 Deployment/aks-istio-ingressgateway-external-asm-1-19
aks-istio-ingress aks-istio-ingressgateway-internal-asm-1-19 Deployment/aks-istio-ingressgateway-internal-asm-1-19
aks-istio-system istiod-asm-1-19 Deployment/istiod-asm-1-19
Die HPA-Konfiguration kann über Patches und direkte Bearbeitungen geändert werden. Beispiel:
kubectl patch hpa aks-istio-ingressgateway-external-asm-1-19 -n aks-istio-ingress --type merge --patch '{"spec": {"minReplicas": 3, "maxReplicas": 6}}'
Hinweis
In der Dokumentation zum Istio-Add-On-Upgrade finden Sie Einzelheiten dazu, wie HPA-Einstellungen während eines Canary-Upgrades auf beide Revisionen angewendet werden.
Diensteintrag
Die benutzerdefinierte Ressourcendefinition „ServiceEntry“ von Istio ermöglicht das Hinzufügen anderer Dienste zur internen Dienstregistrierung von Istio. Ein Diensteintrag (ServiceEntry) ermöglicht es Diensten, die sich bereits im Mesh befindet, die angegebenen Dienste weiterzuleiten oder auf sie zuzugreifen. Die Konfiguration mehrerer Diensteinträge (ServiceEntries), bei denen das Feld resolution
auf „DNS“ festgelegt ist, kann jedoch zu einer hohen Last für DNS-Server (Domain Name System) führen. Die folgenden Empfehlungen können zur Verringerung der Last beitragen:
- Wechseln Sie zu
resolution: NONE
, um Proxy-DNS-Lookups vollständig zu vermeiden. Geeignet für die meisten Anwendungsfälle. - Erhöhen Sie die Gültigkeitsdauer (Time To Live, TTL), wenn Sie die aufzulösenden Domänen steuern.
- Beschränken Sie den ServiceEntry-Bereich mit
exportTo
.
Azure Kubernetes Service