Kubernetes-klusterien yhdistäminen eri palvelinkeskuksissa
Tervetuloa Kubernetes Quick Start -sarjaan. Tämä on tavallinen kolumni, jossa on mielenkiintoisimmat kysymykset, joita saamme verkossa ja koulutuksissamme. Kubernetes-asiantuntija vastaa.
Tämän päivän asiantuntija on Daniel Polenchik (Daniele Polencic). Daniel työskentelee ohjaajana ja ohjelmistokehittäjänä Opi8s.
Melko usein infrastruktuuria kopioidaan ja hajautetaan eri alueiden kesken, erityisesti valvotuissa ympäristöissä.
Jos jokin alue ei ole käytettävissä, liikenne ohjataan toiselle häiriön välttämiseksi.
Kubernetesin avulla voit käyttää samanlaista strategiaa ja jakaa työkuormia eri alueilla.
Sinulla voi olla yksi tai useampi klusteri per tiimi, alue, ympäristö tai näiden yhdistelmä.
Klustereitasi voidaan isännöidä useissa pilvissä ja paikan päällä.
Mutta kuinka suunnitella infrastruktuuri tällaiselle maantieteelliselle levinneisyydelle?
Onko sinun luotava yksi suuri klusteri useille pilviympäristöille yhden verkon yli?
Vai onko sinulla monia pieniä klustereita ja löydät tavan hallita ja synkronoida niitä?
Yksi johtamisklusteri
Yhden klusterin luominen yhden verkon yli ei ole niin helppoa.
Kuvittele, että sinulla on onnettomuus, yhteys klusterin segmenttien välillä katkeaa.
Jos sinulla on yksi pääpalvelin, puolet resursseista ei voi vastaanottaa uusia komentoja, koska ne eivät saa yhteyttä isäntäpalvelimeen.
Ja samaan aikaan sinulla on vanhoja reititystaulukoita (kube-proxy ei voi ladata uusia) eikä muita podeja (kubelet ei voi hakea päivityksiä).
Vielä pahempaa, jos Kubernetes ei näe solmua, se merkitsee sen orvoksi ja jakaa puuttuvat podit olemassa oleviin solmuihin.
Tämän seurauksena sinulla on kaksi kertaa enemmän paloja.
Jos teet yhden pääpalvelimen aluetta kohden, etcd-tietokannan konsensusalgoritmin kanssa tulee ongelmia. (noin toim. - Itse asiassa etcd-tietokannan ei tarvitse sijaita pääpalvelimilla. Sitä voidaan käyttää erillisessä palvelinryhmässä samalla alueella. Kuitenkin saatuaan samalla klusterin vikapisteen. Mutta nopeasti.)
etcd käyttää lautta-algoritmisopia arvosta ennen sen kirjoittamista levylle.
Eli useimpien instanssien on päästävä yksimielisyyteen ennen kuin tila voidaan kirjoittaa jne.
Jos etcd-ilmentymien välinen viive nousee pilviin, kuten kolmen etcd-esiintymän tapauksessa eri alueilla, kestää kauan sopia arvon arvosta ja kirjoittaa se levylle.
Tämä näkyy myös Kubernetes-ohjaimissa.
Ohjaimen johtaja tarvitsee enemmän aikaa perehtyäkseen muutokseen ja kirjoittaakseen vastauksen tietokantaan.
Ja koska ohjain ei ole yksi, vaan useita, saadaan aikaan ketjureaktio ja koko klusteri alkaa toimia hyvin hitaasti.
Tällä hetkellä ei ole olemassa hyviä esimerkkejä yhden klusterin suuresta verkosta.
Pohjimmiltaan kehittäjäyhteisö ja SIG-klusteriryhmä yrittävät selvittää, kuinka klusterit orkestroidaan samalla tavalla kuin Kubernetes orkestroi kontteja.
Ensimmäistä kertaa yritimme hallita klustereiden kokoelmaa yhtenä objektina käyttämällä kube federation -työkalua.
Alku oli hyvä, mutta lopulta kube federaatiosta ei tullut suosittua, koska se ei tukenut kaikkia resursseja.
Se tuki liittoutuneita tarvikkeita ja palveluita, mutta ei esimerkiksi StatefulSetsia.
Myös liittämismääritys välitettiin huomautusten muodossa, eikä se ollut joustava.
Kuvittele, kuinka voit kuvata replikoiden jakoa liiton kunkin klusterin osalta käyttämällä yhtä huomautusta.
Se osoittautui täydelliseksi sotkuksi.
SIG-klusteri teki hienoa työtä kubefed v1:n jälkeen ja päätti lähestyä ongelmaa toisesta näkökulmasta.
Merkintöjen sijaan he päättivät julkaista klusteriin asennetun ohjaimen. Se voidaan määrittää käyttämällä mukautettuja resurssimäärityksiä (Custom Resource Definition, CRD).
Jokaiselle yhdistettävälle resurssille on oma CRD-määritelmä kolmessa osiossa:
resurssin vakiomääritelmä, kuten käyttöönotto;
jakso placement, jossa määrität, kuinka resurssi jaetaan liitossa;
jakso override, jossa voit ohittaa tietyn resurssin painon ja parametrit sijoittelusta.
Tässä on esimerkki niputetusta toimituksesta, jossa on sijoitus- ja ohitusosiot.
Booking.comin kehittäjät eivät käsitelleet kubefed v2:ta, mutta he keksivät Shipperin, operaattorin, joka toimittaa useille klusteille, useille alueille ja useille pilville.
Molempien työkalujen avulla voit mukauttaa usean klusterin käyttöönottostrategiaasi (mitä klustereita käytetään ja kuinka monta replikaa niillä on).
Mutta Lähettäjän tehtävänä on vähentää toimitusvirheiden riskiä.
Shipperissä voit määrittää joukon vaiheita, jotka kuvaavat replikoiden jakautumista edellisen ja nykyisen käyttöönoton välillä sekä saapuvan liikenteen määrää.
Kun työnnät resurssin klusteriin, lähettäjän ohjain ottaa tämän muutoksen käyttöön asteittain kaikkiin hajautettuihin klustereihin.
Myös lähettäjä on erittäin rajoitettu.
Esimerkiksi se ottaa syötteenä Helm-kaavioita eikä tue vaniljavaroja.
Yleisesti ottaen Shipper toimii seuraavasti.
Vakiojakelun sijaan sinun on luotava sovellusresurssi, joka sisältää Helm-kaavion:
Mutta sen sijaan, että keksittäisiin uusi tapa olla vuorovaikutuksessa klusterin kanssa ja käärittäisiin resurssit mukautetuiksi määrityksiksi, usean klusterin ajoitus lisätään tavalliseen Kubernetesin elinkaareen ja sieppaa kaikki puhelut, jotka luovat podeja.
Jokainen luotu pod korvataan välittömästi nukella.
usean klusterin ajoituskäyttöön verkkokoukut pääsyn muokkaamiseensiepataksesi puhelun ja luodaksesi tyhjäkäynnillä toimivan valepodin.
Alkuperäinen pod käy läpi toisen aikataulutusjakson, jossa koko liiton kyselyn jälkeen tehdään isännöintipäätös.
Lopuksi pod toimitetaan kohdeklusteriin.
Tämän seurauksena sinulla on ylimääräinen kotelo, joka ei tee mitään, vain vie tilaa.
Etuna on, että sinun ei tarvitse kirjoittaa uusia resursseja tarvikkeiden yhdistämiseen.
Jokainen podin luova resurssi on automaattisesti valmis yhdistettäväksi.
Tämä on mielenkiintoista, koska sinulla on yhtäkkiä tarvikkeita jaettu useille alueille, etkä huomannut. Tämä on kuitenkin melko riskialtista, koska täällä kaikki perustuu taikuuteen.
Mutta vaikka Shipper pyrkii pääasiassa lieventämään lähetysten vaikutuksia, moniklusterisuunnittelija on yleisempi ja sopii ehkä paremmin erätöihin.
Siinä ei ole kehittynyttä asteittaista toimitusmekanismia.
Lisää multi-cluster-schedulerista löytyy osoitteesta virallinen arkiston sivu.
Jos haluat lukea multi-cluster-schedulerin toiminnasta, Admiralty on tehnyt sen mielenkiintoinen käyttötapaus Argon kanssa - työnkulut, tapahtumat, CI ja CD Kubernetes.
Muut työkalut ja ratkaisut
Useiden klustereiden yhdistäminen ja hallinta on monimutkainen tehtävä, eikä ole olemassa yhtä kaikille sopivaa ratkaisua.
Jos haluat oppia lisää tästä aiheesta, tässä on joitain resursseja:
Rancherin sukellusvene on työkalu, joka yhdistää eri Kubernetes-klusterien peittoverkot.
Cilium, konttiverkkoliitäntälaajennus, tarjoaa klusteriverkkotoiminto, jonka avulla voit yhdistää useita klustereita
Siinä kaikki tältä päivältä
Kiitos kun luit loppuun!
Jos tiedät kuinka yhdistää useita klustereita tehokkaammin, Kerro meille.
Lisäämme linkkiin sinun menetelmäsi.
Erityinen kiitos Chris Nesbitt-Smithille (Chris Nesbitt-Smith) ja Vincent de Sme (Vincent De Smet) (luotettavuusinsinöörille swatmobile.io) artikkelin lukemiseen ja hyödyllisten tietojen jakamiseen liiton toiminnasta.