Cumu cunnetta i clusters Kubernetes in diversi centri di dati
Benvenuti à a Serie Quick Start Kubernetes. Questa hè una colonna regulare cù e dumande più interessanti chì ricevemu in linea è in i nostri furmazioni. Risposte di l'esperti di Kubernetes.
L'espertu oghje hè Daniel Polenchik (Daniele Polencic). Daniel travaglia cum'è istruttore è sviluppatore di software in Learnk8s.
Piuttostu spessu, l'infrastruttura hè replicata è distribuita in diverse regioni, in particulare in ambienti cuntrullati.
Se una regione ùn hè micca dispunibile, u trafficu hè ridirettu à l'altru per evità interruzioni.
Cù Kubernetes, pudete aduprà una strategia simile è distribuisce carichi di travagliu in diverse regioni.
Pudete avè unu o più clusters per squadra, regione, ambiente, o una cumminazione di questi.
I vostri clusters ponu esse ospitati in parechje nuvole è in situ.
Ma cumu pianificà l'infrastruttura per una tale diffusione geografica?
Avete bisognu di creà un grande cluster per parechji ambienti nuvola nantu à una sola reta?
O avete parechji picculi clusters è truvate un modu per cuntrullà è sincronizà?
Un cluster di dirigenza
Crià un cluster nantu à una sola reta ùn hè micca cusì faciule.
Immaginate chì avete un accidente, a cunnessione trà i segmenti di cluster hè persa.
Sì avete un servitore maestru, a mità di e risorse ùn puderanu micca riceve novi cumandamenti perchè ùn puderanu micca cuntattà u maestru.
È à u stessu tempu avete vechji tabelle di routing (kube-proxy ùn pò micca scaricà novi) è senza pods supplementari (kubelet ùn pò micca dumandà l'aghjurnamenti).
Ancu peggiu, se Kubernetes ùn pò micca vede un node, u marca cum'è orfanu è distribuisce pods mancanti à i nodi esistenti.
In u risultatu, avete duie volte più pods.
Se fate un servitore maestru per regione, ci saranu prublemi cù l'algoritmu di cunsensu in a basa di dati etcd. (ca. ed. - In fatti, a basa di dati etcd ùn deve esse situatu nantu à i servitori maestri. Pò esse eseguitu nantu à un gruppu separatu di servitori in a listessa regione. Tuttavia, avè ricevutu à u listessu tempu un puntu di fallimentu di un cluster. Ma prestu.)
eccd usa algoritmu di raftd'accordu nantu à un valore prima di scrivellu à u discu.
Questu hè, a maiò parte di i casi deve ghjunghje à un cunsensu prima chì u statu pò esse scrittu à etcd.
Se a latenza trà l'istanze di etcd cresce, cum'è u casu cù trè istanze di etcd in diverse regioni, ci vole assai tempu per accunsentà un valore è scrive à u discu.
Questu hè riflessu ancu in i cuntrolli Kubernetes.
U gestore di u controller hà bisognu di più tempu per amparà u cambiamentu è scrive a risposta à a basa di dati.
È postu chì u controller ùn hè micca unu, ma parechji, una reazione in catena hè ottenuta, è tuttu u cluster cumencia à travaglià assai pianu.
Attualmente ùn ci sò micca boni esempi di una grande reta per un cluster unicu.
In fondu, a cumunità di sviluppatori è u gruppu SIG-cluster cercanu di capisce cumu orchestrate clusters in u listessu modu chì Kubernetes orchestra i cuntenituri.
Per a prima volta, avemu pruvatu à gestisce una cullizzioni di clusters cum'è un oggettu unicu utilizendu l'uttellu di federazione kube.
U principiu era bonu, ma à a fine, a federazione kube ùn hè micca diventata populari, perchè ùn sustene micca tutte e risorse.
Supportava forniture è servizii federati, ma micca StatefulSets, per esempiu.
Inoltre, a cunfigurazione di a federazione hè stata passata in forma di annotazioni è ùn era micca flexible.
Imagine cumu pudete descriverà a divisione di repliche per ogni cluster in una federazione utilizendu una sola annotazione.
Risultava esse un disordine cumpletu.
SIG-cluster hà fattu un bellu travagliu dopu à kubefed v1 è hà decisu di avvicinà u prublema da un altru angulu.
Invece di annotazioni, anu decisu di liberà un controller chì hè stallatu in clusters. Pò esse cunfiguratu utilizendu definizioni di risorse persunalizate (Definizione di Risorse Personalizzate, CRD).
Per ogni risorsa chì serà federata, avete una definizione CRD persunalizata in trè sezioni:
una definizione standard di una risorsa, cum'è implementazione;
rùbbrica placement, induve definisce cumu a risorsa serà distribuita in a federazione;
rùbbrica override, induve per una risorsa specifica pudete annullà u pesu è i paràmetri da a piazza.
Eccu un esempiu di una spedizione in bundle cù e sezioni di piazzamentu è di override.
Comu pudete vede, l'offerta hè divisa in dui gruppi: cluster1 и cluster2.
U primu cluster furnisce trè repliche, è u sicondu hà un valore di 5.
Se avete bisognu di più cuntrollu di u numeru di rèpliche, kubefed2 furnisce un novu oggettu ReplicaSchedulingPreference induve e rèpliche ponu esse ponderate:
I sviluppatori di Booking.com ùn anu micca trattatu di kubefed v2, ma sò ghjunti cù Shipper, un operatore per a spedizione in parechje clusters, multiple regioni è parechje nuvole.
I dui strumenti permettenu di persunalizà a vostra strategia di implementazione multi-cluster (chì clusters sò utilizati è quante repliche anu).
ma U travagliu di u speditore hè di riduce u risicu di errore di consegna.
In Shipper, pudete definisce una seria di passi chì descrizanu a divisione di repliche trà e implementazioni precedenti è attuali è a quantità di trafficu entrante.
Quandu spinghjate una risorsa à un cluster, u controller di speditore implementa in modu incrementale quellu cambiamentu in tutti i cluster federati.
Inoltre, u trasportatore hè assai limitatu.
Per esempiu, pigghia i charts Helm cum'è input è ùn sustene micca e risorse di vaniglia.
In termini ginirali, u speditore travaglia cum'è seguitu.
Invece di una distribuzione standard, avete bisognu di creà una risorsa di l'applicazione chì include un graficu Helm:
Ma invece di inventà un novu modu d'interagisce cù u cluster è di imballà e risorse in definizioni persunalizate, u multi-cluster-scheduler hè injectatu in u ciclu di vita standard di Kubernetes è intercepta tutte e chjama chì creanu pods.
Ogni poda creata hè immediatamente rimpiazzata cù un manichinu.
U pod originale passa per un altru ciclu di scheduling induve, dopu a votazione di l'intera federazione, una decisione di hosting hè presa.
Infine, u pod hè furnitu à u cluster di destinazione.
In u risultatu, avete un pod extra chì ùn faci nunda, solu occupa u spaziu.
U vantaghju hè chì ùn avete micca bisognu di scrive novi risorse per cumminà pruvisti.
Ogni risorsa chì crea un pod hè automaticamente pronta per esse federata.
Questu hè interessante, perchè di colpu avete pruvisti distribuiti in parechje regioni, è ùn avete micca avvistatu. Tuttavia, questu hè abbastanza risicatu, perchè quì tuttu si basa nantu à a magia.
Ma mentre u Speditore prova principalmente di mitigà l'effetti di e spedizioni, u multi-cluster-scheduler hè più generale è forse più adattatu per i travaglii in batch.
Ùn hà micca un mecanismu avanzatu di consegna graduale.
Più nantu à u multi-cluster-scheduler pò esse truvatu à pagina ufficiale di repository.
Se vulete leghje nantu à u multi-cluster-scheduler in azzione, Admiralty hà interessante casu d'usu cù Argo - flussi di travagliu, eventi, CI è CD Kubernetes.
Altri arnesi è suluzione
A cunnessione è a gestione di più clusters hè un compitu cumplessu, è ùn ci hè una soluzione unica per tutti.
Se vulete sapè più nantu à questu tema, eccu alcune risorse:
Submariner da Rancher hè un strumentu chì cunnetta e rete overlay di diversi clusters Kubernetes.
Cilium, un plugin di l'interfaccia di rete di container, prupone funzione cluster mesh, chì permette di cumminà parechji clusters
Hè tuttu per oghje
Grazie per leghje finu à a fine!
Se sapete cumu cunnetta in modu più efficiente parechji clusters, dicci.
Avemu aghjunghje u vostru metudu à i ligami.
Un ringraziu speciale à Chris Nesbitt-Smith (Chris Nesbitt-Smith) e Vincent de Sme (Vincent De Smet) (à l'ingegnere di affidabilità in swatmobile.io) per leghje l'articulu è sparte infurmazioni utili nantu à cumu funziona a federazione.