Come utilizzare il bilanciamento del carico kubernetes?

Come utilizzare il bilanciamento del carico kubernetes?
Il bilanciamento del carico è fondamentale per mantenere i cluster di Kubernetes su larga scala funzionante e sicuro. Mentre molti bilanciatori del carico hanno un grande successo nel controllare molte di queste preoccupazioni per te, è fondamentale configurare correttamente il tuo ambiente Kubernetes per ottenere il massimo dai servizi che questi bilancianti del carico forniscono. Questo articolo approfondisce l'argomento.

Cos'è il bilanciatore del carico di Kubernetes?

I bilanciatori del carico distribuiscono il traffico in arrivo su un gruppo di host per garantire carichi di lavoro ottimali e alta disponibilità. A causa del suo design sottostante, l'architettura distribuita di un cluster di Kubernetes si basa su più istanze di servizi, che pone sfide in assenza di un'adeguata allocazione del carico.

Un bilanciamento del carico è un controller del traffico che instrada le richieste del client ai nodi che possono servirli prontamente ed efficiente. Il bilanciamento del carico ridistribuisce il carico di lavoro attraverso i nodi rimanenti quando uno degli host fallisce. Quando un nuovo nodo entra in un cluster, d'altra parte, il servizio inizia automaticamente a inviare richieste ai pod associati ad esso associati.

Un servizio di bilanciamento del carico in un cluster Kubernetes fa quanto segue:

  • Distribuzione di carichi di rete e richieste di servizio in numerosi istanze in modo economico
  • Abilitare l'autoscaling in risposta alle fluttuazioni della domanda.

Come aggiungere un bilanciamento del carico a un cluster Kubernetes?

Un bilanciamento del carico può essere aggiunto a un cluster Kubernetes in due modi:

Mediante l'uso di un file di configurazione:
Il bilanciamento del carico è abilitato specificando LoadBalancer nel campo Tipo del file di configurazione del servizio. Il provider di servizi cloud gestisce e guida questo bilanciamento del carico, che invia traffico ai pod back-end. Il file di configurazione del servizio dovrebbe assomigliare a quanto segue:

Apiversion: V1
GIOCO: SERVIZIO
Metadati:
Nome: New-ServiceOne
Spec:
selettore:
App: newapp
Porte:
- Porta: 5678
TargetPort: 8456
Tipo: loadbalancer

Gli utenti potrebbero essere in grado di assegnare un indirizzo IP al bilanciamento del carico a seconda del provider cloud. Il tag loadBalancerip specificato dall'utente può essere utilizzato per impostarlo. Se l'utente non fornisce un indirizzo IP, il bilanciamento del carico viene assegnato un indirizzo IP effimero. Se l'utente specifica un indirizzo IP che il provider cloud non supporta, viene ignorato.

IL.stato.La proprietà LoadBalancer deve essere utilizzata se l'utente desidera aggiungere ulteriori informazioni al servizio di bilanciamento del carico. Vedere l'immagine qui sotto per impostare l'indirizzo IP Ingress.

stato:
LoadBalancer:
ingresso:
- IP: 192.154.0.1

Usando Kubectl:
-Type = LoadBalancer: il parametro può anche essere utilizzato per costruire un bilanciamento del carico con il comando Kubectl Expose.

$ kubectl Expose PO Nuovo --Port = 5678--Target-Port = 8456 \
--name = new-serviceOne --Type = LoadBalancer

Il comando sopra crea il nuovo servizio e collega il nuovo pod a una porta specifica.

Cosa sta raccogliendo i bilanciatori del carico della spazzatura?

Quando viene distrutto un servizio di tipo loadbalancer, le risorse di bilanciamento del carico associato nel fornitore di cloud dovrebbero essere ripulite il più presto possibile. Tuttavia, è noto che le risorse cloud possono essere orfane se il servizio correlato viene rimosso in una varietà di situazioni. Per evitare che ciò si verifichi, è stata sviluppata la protezione del Finalizzatore per il servizio di carico.

Se un servizio è del tipo di caricamento, il controller di servizio aggiungerà un finalizer denominato servizio.Kubernetes.IO/CARICO-BALANCER-CLIENUP. Il finalizer verrà cancellato dopo che la risorsa del bilanciamento del carico è già stata ripulita. Anche in casi estremi, come quando il controller di servizio si arresta in modo anomalo, questo impedisce le risorse del bilanciamento del carico penzolante.

Diversi modi per configurare il bilanciamento del carico in kubernetes

Per gestire il traffico esterno ai pod, sono disponibili metodi e algoritmi di bilanciamento del carico di Kubernetes.

Round Robin
Un approccio Round Robin distribuisce nuove connessioni a server qualificati in ordine sequenziale. Questa tecnica è statica, il che significa che non prende in considerazione velocità specifiche del server o problemi di prestazioni, pertanto un server lento e un server per le prestazioni migliori riceveranno entrambi lo stesso numero di connessioni. Di conseguenza, il bilanciamento del carico rotondo non è sempre la scelta migliore per il traffico di produzione ed è più adatto ai semplici test di carico.

Kube-Proxy L4 Round Robin
Kube-Proxy raccoglie e percorso tutte le richieste fornite al servizio Kubernetes.

Perché è un processo e non un proxy, utilizza un IP virtuale per il servizio. Quindi aggiunge architettura e complessità al routing. Ogni richiesta si aggiunge alla latenza e il problema peggiora man mano che il numero di servizi cresce.

L7 Round Robin
A volte, il routing traffico direttamente su Pod evita il kube-proxy. Ciò può essere realizzato con un gateway API di Kubernetes che impiega un proxy L7 per gestire le richieste tra i pod Kubernetes disponibili.

Hashing/anello costante
Il bilanciamento del carico di Kubernetes utilizza un hash basato su una chiave definita per distribuire nuove connessioni sui server utilizzando tecniche di hashing coerenti. Questa strategia è la migliore per gestire i server di cache di grandi dimensioni con contenuto dinamico.

Poiché la tabella hash completa non deve essere ricalcolata ogni volta che un server viene aggiunto o ritirato, questo approccio è coerente.

Meno server
Piuttosto che allocare tutte le richieste tra tutti i server, la tecnica di un minor numero di server classifica la più piccola quantità di server obbligatoria per soddisfare il carico del client corrente. Per il momento i server eccessivi possono essere rifiutati o distorsi.

Questa tecnica opera monitorando le variazioni nella latenza di risposta quando il carico varia in base alla capacità del server.

Connessioni minime
Questo algoritmo di bilanciamento del carico in Kubernetes rotta le richieste client al server delle applicazioni con il minor numero di connessioni attive al momento della richiesta. Questo metodo utilizza il carico di connessione attivo su account poiché un server delle applicazioni può essere sovraccarico a causa di connessioni a più lungo vietate se i server dell'applicazione hanno pari requisiti.

Conclusione

Questo articolo mirava a fornire ai lettori una comprensione completa del bilanciamento del carico di Kubernetes, che copre la sua architettura e numerosi metodi di provisioning per un cluster Kubernetes. Il bilanciamento del carico è una parte importante dell'esecuzione di un cluster Kubernetes efficace ed è uno dei lavori principali di un amministratore di Kubernetes. Le attività possono essere pianificate in modo efficiente attraverso pod e nodi cluster utilizzando un bilanciamento del carico fornito in modo ottimale, consentendo un'elevata disponibilità, un recupero rapido e una bassa latenza per applicazioni containerizzate che operano su kubernetes.