ProHoster > Blog > Uprava > Kako povezati gruče Kubernetes v različnih podatkovnih centrih
Kako povezati gruče Kubernetes v različnih podatkovnih centrih
Dobrodošli v naši seriji Kubernetes Quick Start. To je redna rubrika z najbolj zanimivimi vprašanji, ki jih prejemamo na spletu in na naših izobraževanjih. Odgovor strokovnjaka za Kubernetes.
Današnji strokovnjak je Daniel Polenchik (Daniele Polenčič). Daniel dela kot inštruktor in razvijalec programske opreme pri Learnk8s.
Pogosto se infrastruktura replicira in porazdeli po različnih regijah, zlasti v nadzorovanih okoljih.
Če ena regija ni na voljo, se promet preusmeri na drugo, da se preprečijo motnje.
S Kubernetesom lahko uporabite podobno strategijo in razdelite delovne obremenitve po različnih regijah.
Imate lahko eno ali več gruč na ekipo, regijo, okolje ali kombinacijo teh elementov.
Vaše gruče lahko gostujejo v različnih oblakih in na mestu uporabe.
Kako pa načrtujete infrastrukturo za takšno geografsko razširjenost?
Ali morate ustvariti eno veliko gručo za več oblačnih okolij v enem omrežju?
Ali pa imeti veliko majhnih gruč in najti način za njihov nadzor in sinhronizacijo?
En vodstveni grozd
Ustvarjanje ene gruče v enem omrežju ni tako enostavno.
Predstavljajte si, da imate nesrečo, povezljivost med segmenti gruče je izgubljena.
Če imate en glavni strežnik, polovica virov ne bo mogla prejemati novih ukazov, ker ne bodo mogli vzpostaviti stika z glavnim strežnikom.
In hkrati imate stare usmerjevalne tabele (kube-proxy ne more prenesti novih) in brez dodatnih sklopov (kubelet ne more zahtevati posodobitev).
Da je zadeva še hujša, če Kubernetes ne vidi vozlišča, ga označi kot osirotelega in razdeli manjkajoče pode obstoječim vozliščem.
Posledično imate dvakrat več strokov.
Če naredite en glavni strežnik za vsako regijo, bodo težave z algoritmom soglasja v bazi podatkov etcd. (pribl. izd. — Pravzaprav ni nujno, da se baza podatkov etcd nahaja na glavnih strežnikih. Lahko se izvaja na ločeni skupini strežnikov v isti regiji. Res je, hkrati pa dobimo točko odpovedi grozda. Ampak hitro.)
etcd uporablja raft algoritemda se pogaja o vrednosti, preden jo zapiše na disk.
To pomeni, da mora večina primerov doseči soglasje, preden se lahko državi piše itd.
Če se zakasnitev med primerki etcd dramatično poveča, kot je to v primeru treh primerkov etcd v različnih regijah, traja dolgo časa, da se dogovorite o vrednosti in jo zapišete na disk.
To se odraža v krmilnikih Kubernetes.
Vodja krmilnika potrebuje več časa, da se seznani s spremembo in zapiše odgovor v bazo podatkov.
In ker ni enega krmilnika, ampak več, pride do verižne reakcije in celoten grozd začne delovati zelo počasi.
Prvič smo poskusili upravljati zbirko gruč kot en sam objekt z orodjem kube federation.
Začetek je bil dober, a na koncu zveza kube nikoli ni postala priljubljena, ker ni podpirala vseh virov.
Podpiral je zvezne dostave in storitve, ne pa na primer StatefulSets.
Poleg tega je bila zvezna konfiguracija posredovana v obliki opomb in ni bila prilagodljiva.
Predstavljajte si, kako bi lahko opisali particioniranje replike za vsako gručo v zvezi samo z opombami.
Bila je popolna zmešnjava.
SIG-cluster je opravil veliko dela po kubefed v1 in se odločil, da pristopi k problemu z drugega zornega kota.
Namesto opomb so se odločili izdati krmilnik, ki je nameščen na gručah. Lahko ga prilagodite z uporabo Custom Resource Definitions (CRD).
Za vsak vir, ki bo del zveze, imate definicijo CRD po meri s tremi razdelki:
standardna definicija vira, na primer uvedba;
oddelek placement, kjer določite, kako bo vir razdeljen v federaciji;
oddelek override, kjer lahko za določen vir preglasite težo in parametre iz umestitve.
Tukaj je primer kombinirane dostave z odseki za umestitev in preglasitev.
Toda namesto da bi iznašel nov način interakcije z gručo in zavil vire v definicije po meri, je razporejevalnik z več gručami vdelan v standardni življenjski cikel Kubernetes in prestreže vse klice, ki ustvarjajo pode.
Prvotni pod gre skozi še en cikel načrtovanja, kjer se po anketi celotne zveze sprejme odločitev o umestitvi.
Končno je pod dostavljen v ciljno gručo.
Posledično imate dodatno enoto, ki ne dela ničesar, samo zavzema prostor.
Prednost je, da vam ni bilo treba pisati novih virov za združevanje zalog.
Vsak vir, ki ustvari pod, je samodejno pripravljen za združitev.
To je zanimivo, ker imate nenadoma zaloge razporejene po več regijah, pa tega sploh niste opazili. Vendar je to precej tvegano, saj tukaj vse temelji na magiji.
Toda medtem ko Shipper poskuša večinoma ublažiti vpliv dostav, multi-cluster-scheduler obravnava bolj splošne naloge in je morda bolj primeren za paketna opravila.
Nima naprednega mehanizma postopne dostave.
Več o multi-cluster-schedulerju lahko najdete na uradna stran skladišča.
Če želite prebrati o delu razporejevalnika več gruč, Admiralty ima zanimiv primer uporabe z Argo — poteki dela, dogodki, CI in CD Kubernetes.
Druga orodja in rešitve
Povezovanje in upravljanje več gruč je kompleksna naloga in univerzalne rešitve ni.
Če želite to temo podrobneje raziskati, je tukaj nekaj virov:
Cilium, vsebniški vtičnik omrežnega vmesnika, ponuja mrežna funkcija grozda, ki omogoča združevanje več grozdov
To je vse za danes
Hvala, ker ste prebrali do konca!
Če veste, kako učinkoviteje povezati več gruč, Povej nam.
Vašo metodo bomo dodali na povezave.
Posebna zahvala Chrisu Nesbitt-Smithu (Chris Nesbitt-Smith) in Vincent de Sme (Vincent De Smet) (inženir za zanesljivost v swatmobile.io) za branje članka in deljenje koristnih informacij o delovanju zveze.