Applicazioni client ospitate in Kubernetes

Connessioni client da più pod

Quando si hanno più pod che si connettono a un server Redis, assicurarsi che le nuove connessioni dai pod vengano create in modo scaglionato. Se più pod si avviano in tempi brevi senza essere scaglionati, si verifica un picco improvviso nel numero di connessioni client create. Il numero elevato di connessioni comporta un carico elevato sul server Redis e questo può causare dei timeout.

Evitare lo stesso scenario quando si arrestano più pod contemporaneamente. Se non si riesce a scaglionare l'arresto, il numero di connessioni potrebbe diminuire drasticamente, causando una pressione sulla CPU.

Risorse pod sufficienti

Assicurarsi che al pod che esegue l'applicazione client vengano fornite risorse di CPU e memoria sufficienti. Se l'applicazione client è vicina ai limiti di risorse, possono verificarsi dei timeout.

Risorse nodo sufficienti

Un pod che esegue l'applicazione client può essere interessato da altri pod in esecuzione nello stesso nodo e limitare le connessioni Redis o le operazioni di I/O. Assicurarsi quindi sempre che il nodo su cui vengono eseguiti i pod dell'applicazione client disponga di memoria, CPU e larghezza banda di rete sufficienti. L'esecuzione insufficiente su una di queste risorse potrebbe causare problemi di connettività.

Applicazioni client ospitate in Linux e impostazioni TCP

Se l'applicazione client della cache di Azure per Redis viene eseguita in un contenitore basato su Linux, è consigliabile aggiornare alcune impostazioni TCP. Queste impostazioni sono descritte in dettaglio nelle impostazioni TCP per le applicazioni client ospitate in Linux.

Potenziale conflitto di connessione con Istio/Envoy

Attualmente la cache di Azure per Redis usa le porte 15xxx per le cache in cluster per esporre i nodi del cluster alle applicazioni client. Come documentato qui, le stesse porte vengono usate anche dal proxy sidecar Istio.io denominato Envoy e potrebbero interferire con la creazione di connessioni, in particolare sulla porta 15001 e 15006.

Quando si usa Istio con un cluster della cache di Azure per Redis, valutare di escludere le potenziali porte in conflitto con un'annotazione istio.

annotations:
  traffic.sidecar.istio.io/excludeOutboundPorts: "15000,15001,15004,15006,15008,15009,15020"

Per evitare interferenze di connessione, è consigliabile:

  • Prendere in considerazione l'uso di una cache non cluster o di una cache di livello Enterprise
  • Evitare di configurare sidecar Istio nei pod che eseguono il codice client della cache di Azure per Redis