ProHoster > Bloc > Administració > Com connectar els clústers de Kubernetes a diferents centres de dades
Com connectar els clústers de Kubernetes a diferents centres de dades
Benvingut a la sèrie d'inici ràpid de Kubernetes. Aquesta és una columna habitual amb les preguntes més interessants que rebem en línia i en els nostres entrenaments. Respostes d'experts de Kubernetes.
L'expert d'avui és Daniel Polenchik (Daniele Polencic). Daniel treballa com a instructor i desenvolupador de programari a Learnk8s.
Molt sovint, la infraestructura es replica i es distribueix entre diferents regions, especialment en entorns controlats.
Si una regió no està disponible, el trànsit es redirigeix a una altra per evitar interrupcions.
Amb Kubernetes, podeu utilitzar una estratègia similar i distribuir les càrregues de treball a diferents regions.
Podeu tenir un o més clústers per equip, regió, entorn o una combinació d'aquests.
Els vostres clústers es poden allotjar en diversos núvols i locals.
Però, com planificar la infraestructura per a una estesa geogràfica?
Necessites crear un clúster gran per a diversos entorns de núvol en una mateixa xarxa?
O tens molts clústers petits i trobes una manera de controlar-los i sincronitzar-los?
Un grup de lideratge
Crear un clúster en una única xarxa no és tan fàcil.
Imagineu que teniu un accident, la connectivitat entre els segments del clúster es perd.
Si teniu un servidor mestre, la meitat dels recursos no podran rebre ordres noves perquè no podran contactar amb el mestre.
I al mateix temps teniu taules d'encaminament antigues (kube-proxy no se'n poden baixar de nous) i no hi ha pods addicionals (kubelet no pot consultar actualitzacions).
Encara pitjor, si Kubernetes no pot veure un node, el marca com a orfe i distribueix les beines que falten als nodes existents.
Com a resultat, teniu el doble de beines.
Si feu un servidor mestre per regió, hi haurà problemes amb l'algoritme de consens a la base de dades etcd. (aprox. ed. - De fet, la base de dades etcd no s'ha d'ubicar als servidors mestres. Es pot executar en un grup separat de servidors de la mateixa regió. No obstant això, havent rebut al mateix temps un punt de fallada d'un clúster. Però ràpidament.)
usos etcd algorisme de bassaper posar-se d'acord en un valor abans d'escriure'l al disc.
És a dir, la majoria dels casos han d'arribar a un consens abans que l'estat es pugui escriure a etcd.
Si la latència entre les instàncies d'etcd es dispara, com és el cas de tres instàncies d'etcd a diferents regions, es triga molt de temps a acordar un valor i escriure-lo al disc.
Això també es reflecteix als controladors Kubernetes.
El gestor del controlador necessita més temps per conèixer el canvi i escriure la resposta a la base de dades.
I com que el controlador no és un, sinó diversos, s'obté una reacció en cadena i tot el clúster comença a funcionar molt lentament.
Actualment no hi ha bons exemples de xarxa gran per a un únic clúster.
Bàsicament, la comunitat de desenvolupadors i el grup de clúster SIG estan intentant esbrinar com organitzar clústers de la mateixa manera que Kubernetes orquestra els contenidors.
Per primera vegada, vam intentar gestionar una col·lecció de clústers com un únic objecte mitjançant l'eina de federació de kube.
El començament va ser bo, però al final, la federació de kube no es va popularitzar, perquè no suportava tots els recursos.
Admetava subministraments i serveis federats, però no StatefulSets, per exemple.
A més, la configuració de la federació es va passar en forma d'anotacions i no era flexible.
Imagineu com podeu descriure la divisió de rèpliques per a cada clúster d'una federació mitjançant una única anotació.
Va resultar ser un embolic complet.
SIG-cluster va fer un gran treball després de kubefed v1 i va decidir abordar el problema des d'un angle diferent.
En lloc d'anotacions, van decidir llançar un controlador instal·lat als clústers. Es pot configurar mitjançant definicions de recursos personalitzades (Custom Resource Definition, CRD).
Per a cada recurs que es federarà, teniu una definició de CRD personalitzada en tres seccions:
una definició estàndard d'un recurs, com ara desplegar;
secció placement, on definiu com es distribuirà el recurs a la federació;
secció override, on per a un recurs específic podeu anul·lar el pes i els paràmetres de la ubicació.
Aquí teniu un exemple d'un lliurament agrupat amb seccions d'ubicació i anul·lació.
Com podeu veure, l'oferta es divideix en dos grups: cluster1 и cluster2.
El primer clúster proporciona tres rèpliques i el segon té un valor de 5.
Si necessiteu més control sobre el nombre de rèpliques, kubefed2 proporciona un nou objecte ReplicaSchedulingPreference on les rèpliques es poden ponderar:
Els desenvolupadors de Booking.com no van tractar amb kubefed v2, però van inventar Shipper, un operador per al lliurament en diversos clústers, diverses regions i diversos núvols.
Ambdues eines us permeten personalitzar la vostra estratègia de desplegament de diversos clústers (quins clústers s'utilitzen i quantes rèpliques tenen).
Sinó La feina del transportista és reduir el risc d'errors d'enviament.
A Shipper, podeu definir una sèrie de passos que descriuen la divisió de rèpliques entre els desplegaments anteriors i actuals i la quantitat de trànsit entrant.
Quan envieu un recurs a un clúster, el controlador de l'enviament desplega aquest canvi de manera incremental a tots els clústers federats.
També el transportista és molt limitat.
Per exemple, pren com a entrada els gràfics Helm i no admet recursos de vainilla.
En termes generals, el carregador funciona de la següent manera.
En lloc d'una distribució estàndard, heu de crear un recurs d'aplicació que inclogui un gràfic Helm:
Kubefed v2 i Shipper treballen amb la federació de clústers proporcionant nous recursos als clústers mitjançant una definició de recursos personalitzada.
Però, què passa si no voleu reescriure tots els subministraments, StatefulSets, DaemonSets, etc. que es fusionin?
Com incloure un clúster existent a la federació sense canviar YAML?
Però en lloc d'inventar una nova manera d'interaccionar amb el clúster i embolicar els recursos en definicions personalitzades, el programador de múltiples clústers s'injecta al cicle de vida estàndard de Kubernetes i intercepta totes les trucades que creen pods.
Cada beina creat es substitueix immediatament per un maniquí.
usos del programador de múltiples clústers ganxos web per modificar l'accésper interceptar la trucada i crear un pod fictici inactiu.
El pod original passa per un altre cicle de programació on, després d'enquestar a tota la federació, es pren una decisió d'acollida.
Finalment, el pod es lliura al clúster objectiu.
Com a resultat, teniu una beina addicional que no fa res, només ocupa espai.
L'avantatge és que no cal escriure nous recursos per combinar subministraments.
Cada recurs que crea un pod està llest automàticament per ser federat.
Això és interessant, perquè de sobte tens subministraments distribuïts en diverses regions i no te'n vas adonar. Tanmateix, això és força arriscat, perquè aquí tot es basa en la màgia.
Però mentre que l'enviament intenta principalment mitigar els efectes dels enviaments, el programador de múltiples clústers és més general i potser més adequat per a treballs per lots.
No té un mecanisme de lliurament gradual avançat.
Podeu trobar més informació sobre el programador de múltiples clústers a pàgina oficial del repositori.
Si voleu llegir sobre el programador de múltiples clústers en acció, l'Almirallat ho té cas d'ús interessant amb Argo - fluxos de treball, esdeveniments, CI i CD Kubernetes.
Altres eines i solucions
Connectar i gestionar diversos clústers és una tasca complexa i no hi ha una solució única.
Si voleu aprendre més sobre aquest tema, aquí teniu alguns recursos:
Submariner de Rancher és una eina que connecta xarxes superposades de diferents clústers de Kubernetes.
Cilium, un connector d'interfície de xarxa de contenidors, ofereix funció de malla de clúster, que permet combinar diversos clústers
Això és tot per avui
Gràcies per llegir fins al final!
Si sabeu com connectar de manera més eficient diversos clústers, digueu-nos.
Afegirem el vostre mètode als enllaços.
Agraïment especial a Chris Nesbitt-Smith (Chris Nesbitt-Smith) i Vincent de Sme (Vincent de Smet) (a l'enginyer de fiabilitat a swatmobile.io) per llegir l'article i compartir informació útil sobre com funciona la federació.