Prestazioni e scalabilità del componente aggiuntivo Istio Service Mesh

Il componente aggiuntivo Service Mesh basato su Istio viene suddiviso logicamente in un piano di controllo (istiod) e in un piano dati. Il piano dati è composto da proxy sidecar Envoy all'interno dei pod del carico di lavoro. Istiod gestisce e configura questi proxy Envoy. Questo articolo presenta le prestazioni sia del piano di controllo che del piano dati per la revisione asm-1-19, tra cui consumo di risorse, capacità sidecar e sovraccarico della latenza. Fornisce inoltre suggerimenti per affrontare potenziali sollecitazioni sulle risorse durante periodi di carico elevato. Questo articolo illustra anche come personalizzare il ridimensionamento per il piano di controllo e i gateway.

Prestazioni del piano di controllo

I requisiti di CPU e memoria di Istiod sono correlati alla frequenza di modifiche a distribuzione e configurazione e al numero di proxy connessi. Gli scenari testati sono:

  • Abbandono dei pod: esamina l'impatto dell'abbandono dei pod su istiod. Per ridurre le variabili, viene usato un solo servizio per tutti i sidecar.
  • Più servizi: esamina l'impatto di più servizi sul numero massimo di sidecar che Istiod può gestire (capacità sidecar), in cui ogni servizio ha N sidecar, che rappresentano in totale il numero massimo complessivo.

Specifiche di test

  • Un'istanza di istiod con le impostazioni predefinite
  • Scalabilità automatica orizzontale dei pod disabilitata
  • Testato con due plug-in di rete: Overlay CNI (Azure Container Networking Interface) e Overlay CNI di Azure con Cilium (plug-in di rete consigliati per cluster su larga scala)
  • SKU del nodo: D16 Standard v3 (16 vCPU, 64 GB di memoria)
  • Versione di Kubernetes: 1.28.5
  • Revisione Istio: asm-1-19

Abbandono dei pod

Il framework ClusterLoader2 è stato usato per determinare il numero massimo di sidecar che Istiod è in grado di gestire quando è presente un abbandono di sidecar. La percentuale di abbandono viene definita come percentuale di sidecar inattivi/attivi durante il test. Ad esempio, un abbandono del 50% per 10.000 sidecar significherebbe che 5.000 sidecar erano inattivo, quindi 5.000 sidecar erano attivi. Le percentuali di abbandono testate sono state determinate dalla percentuale di abbandono tipica durante le implementazioni della distribuzione (maxUnavailable). L'abbandono è stato calcolato determinando il numero totale di sidecar abbandonati (attivi e inattivi) nel tempo effettivo impiegato per completare il processo di abbandono.

Capacità sidecar e CPU e memoria di Istiod

Overlay CNI di Azure

Abbandono (%) Abbandono (sidecar/sec) Capacità sidecar Memoria di Istiod (GB) CPU di Istiod
0 -- 25000 32,1 15
25 31.2 15000 22.2 15
50 31.2 15000 25.4 15

Overlay CNI di Azure con Cilium

Abbandono (%) Abbandono (sidecar/sec) Capacità sidecar Memoria di Istiod (GB) CPU di Istiod
0 -- 30000 41.2 15
25 41.7 25000 36.1 16
50 37.9 25000 42.7 16

Più servizi

Il framework ClusterLoader2 è stato usato per determinare il numero massimo di sidecar che istiod può gestire con 1.000 servizi. I risultati possono essere confrontati con il test di abbandono del 0% (un servizio) nello scenario di abbandono dei pod. Ogni servizio aveva N sidecar che contribuiscono al conteggio del numero massimo complessivo di sidecar. L'utilizzo delle risorse del server API è stato osservato per determinare se si è verificato uno stress significativo dal componente aggiuntivo.

Capacità sidecar

Sovrimpressione di Azure CNI Overlay CNI di Azure con Cilium
20000 20000

CPU e memoria

Conto risorse Sovrimpressione di Azure CNI Overlay CNI di Azure con Cilium
Memoria del server API (GB) 38,9 9.7
CPU del server API 6.1 4.7
Memoria di Istiod (GB) 40.4 42.6
CPU di Istiod 15 16

Prestazioni del piano dati

Vari fattori influiscono sulle prestazioni dei sidecar, ad esempio le dimensioni delle richieste, il numero di thread di lavoro proxy e il numero di connessioni client. Qualsiasi richiesta che attraversa la mesh attraversa inoltre il proxy lato client e quindi il proxy lato server. Pertanto, la latenza e il consumo di risorse vengono misurati per determinare le prestazioni del piano dati.

Fortio è stato usato per creare il carico. Il test è stato eseguito con il repository di benchmark Istio modificato per l'uso con il componente aggiuntivo.

Specifiche di test

  • Testato con due plug-in di rete: Overlay CNI di Azure e Overlay CNI di Azure con Cilium (plug-in di rete consigliati per cluster su larga scala)
  • SKU del nodo: D16 Standard v5 (16 vCPU, 64 GB di memoria)
  • Versione di Kubernetes: 1.28.5
  • Due ruoli di lavoro proxy
  • Payload da 1 KB
  • 1.000 query al secondo (QPS) con connessioni client variabili
  • Protocollo http/1.1 e TLS (Transport Layer Security) reciproco abilitati
  • 26 punti dati raccolti

CPU e memoria

L'utilizzo di memoria e CPU per il proxy client e server per 16 connessioni client e 1.000 query al secondo in tutti gli scenari di plug-in di rete è approssimativamente 0,4 vCPU e 72 MB.

Latenza

Il proxy Envoy sidecar raccoglie i dati di telemetria non elaborati dopo aver risposto a un client. Ciò non influisce direttamente sul tempo di elaborazione totale della richiesta. Questo processo ritarda tuttavia l'inizio della gestione della richiesta successiva, contribuendo ai tempi di attesa delle code e influenzando le latenze medie e di coda. A seconda del modello di traffico, la latenza effettiva della coda varia.

I risultati seguenti valutano l'impatto dell'aggiunta di proxy sidecar al percorso dati, mostrando la latenza P90 e P99.

  • Percorso del traffico sidecar: client --> client-sidecar --> server-sidecar --> server
  • Percorso del traffico di base: client --> server

Un confronto delle prestazioni della latenza del piano dati tra i componenti aggiuntivi Istio e le versioni del servizio Azure Kubernetes sono disponibili qui.

Sovrimpressione di Azure CNI Overlay CNI di Azure con Cilium
Diagramma che confronta la latenza P99 per Overlay CNI di Azure. Diagramma che confronta la latenza P99 per Overlay CNI di Azure con Cilium.
Diagramma che confronta la latenza P90 per Overlay CNI di Azure. Diagramma che confronta la latenza P90 per Overlay CNI di Azure con Cilium.

Scalabilità

Personalizzazione della scalabilità automatica orizzontale dei pod

La scalabilità automatica orizzontale dei pod è abilitata per istiod e i pod gateway in ingresso. Le configurazioni predefinite per istiod e i gateway sono:

  • Numero minimo di repliche: 2
  • Numero massimo di repliche: 5
  • Utilizzo della CPU: 80%

Nota

Per evitare conflitti con PodDisruptionBudget, il componente aggiuntivo non consente di impostare il minReplicas sotto il valore predefinito iniziale di 2.

Di seguito sono riportate le risorse di scalabilità automatica orizzontale dei pod di istiod e del gateway in ingresso:

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

La configurazione della scalabilità automatica orizzontale dei pod può essere modificata tramite patch e modifiche dirette. Esempio:

kubectl patch hpa aks-istio-ingressgateway-external-asm-1-19 -n aks-istio-ingress --type merge --patch '{"spec": {"minReplicas": 3, "maxReplicas": 6}}'

Nota

Per informazioni dettagliate sull'applicazione delle impostazioni HPA in entrambe le revisioni durante un aggiornamento canary, vedere la documentazione relativa all'aggiornamento del componente aggiuntivo Istio.

Voce del servizio

La definizione di risorsa personalizzata ServiceEntry di Istio consente di aggiungere altri servizi nel registro del servizio interno di Istio. ServiceEntry consente ai servizi già nella mesh di instradare o accedere ai servizi specificati. Tuttavia, la configurazione di più ServiceEntry con il campo resolution impostato su DNS può causare un carico elevato nei server DNS (Domain Name System). I suggerimenti seguenti consentono di ridurre il carico:

  • Passare a resolution: NONE per evitare completamente ricerche DNS proxy. Adatto per la maggior parte dei casi d'uso.
  • Aumentare la durata (TTL) se si controllano i domini risolti.
  • Limitare l'ambito di ServiceEntry con exportTo.