K8S Multicluster Journey

Hei Habr!

Vi representerer Exness-plattformteamet. Tidligere har vÄre kolleger allerede skrevet en artikkel om Produksjonsklare bilder for k8s. I dag Þnsker vi Ä dele vÄr erfaring med Ä migrere tjenester til Kubernetes.

K8S Multicluster Journey

Til Ä begynne med tilbyr vi deg noen tall for en bedre forstÄelse av hva som vil bli diskutert:

  • VĂ„r utviklingsavdeling bestĂ„r av 100+ personer, inkludert mer enn 10 forskjellige team med selvforsynt QA, DevOps og Scrum prosesser. Utviklingsstabel - Python, PHP, C++, Java og Golang. 
  • StĂžrrelsen pĂ„ test- og produksjonsmiljĂžene er ca. 2000 containere hver. De kjĂžrer Rancher v1.6 pĂ„ sin egen virtualisering og under VMware. 

Motivasjon

Som de sier, ingenting varer evig, og Rancher annonserte slutten pÄ stÞtten for versjon 1.6 for ganske lenge siden. Ja, pÄ mer enn tre Är har vi lÊrt Ä forberede det og lÞse problemer som oppstÄr, men oftere og oftere stÄr vi overfor problemer som aldri vil bli rettet. Rancher 1.6 har ogsÄ et forbenet system for Ä utstede rettigheter, hvor du enten kan gjÞre nesten alt eller ingenting.

Selv om proprietÊr virtualisering ga stÞrre kontroll over datalagring og dens sikkerhet, pÄfÞrte den driftskostnader som var vanskelige Ä akseptere gitt selskapets konstante vekst, antall prosjekter og krav til dem.

Vi Þnsket Ä fÞlge IaC-standarder og om nÞdvendig skaffe kapasitet raskt, uansett geografisk plassering og uten leverandÞrlÄs, og ogsÄ raskt kunne forlate den.

FĂžrste trinn

FĂžrst av alt Ăžnsket vi Ă„ stole pĂ„ moderne teknologier og lĂžsninger som ville tillate team Ă„ ha en raskere utviklingssyklus og minimere driftskostnadene for samhandling med plattformen som gir kraft. 
 
SelvfĂžlgelig var det fĂžrste vi tenkte pĂ„ Kubernetes, men vi ble ikke begeistret og gjorde litt research for Ă„ se om det var det riktige valget. Vi evaluerte kun Ă„pen kildekode-lĂžsninger, og i en urettferdig kamp vant Kubernetes betingelseslĂžst.  

Deretter kom spÞrsmÄlet om Ä velge et verktÞy for Ä lage klynger. Vi sammenlignet de mest populÊre lÞsningene: kops, kubespray, kubeadm.

Til Ă„ begynne med virket kubeadm for oss Ă„ vĂŠre en for komplisert sti, snarere som en slags oppfinner av en "sykkel", og kops hadde ikke nok fleksibilitet.

Og vinneren ble:

K8S Multicluster Journey

Vi begynte Ă„ eksperimentere med vĂ„r egen virtualisering og AWS, og prĂžvde Ă„ gjenskape noe som lignet pĂ„ vĂ„rt tidligere ressurshĂ„ndteringsmĂžnster, der alle bruker den samme «klyngen». Og nĂ„ har vi vĂ„r fĂžrste klynge, 10 smĂ„. virtuelle maskiner, et par av dem ligger i AWS. Vi begynte Ă„ prĂžve Ă„ migrere team dit, og alt sĂ„ ut til Ă„ gĂ„ bra, og historien kunne ha sluttet, men


FĂžrste problemer

Ansible er det kubespray er bygget pĂ„, det er ikke et verktĂžy som lar deg fĂžlge IaC: ved idriftsettelse/avvikling av noder gikk noe konstant galt og en slags intervensjon var nĂždvendig, og nĂ„r du brukte forskjellige OSer, oppfĂžrte playbook seg annerledes. annerledes . Etter hvert som antallet lag og noder i klyngen vokste, begynte vi Ă„ legge merke til at det tok lengre og lengre tid Ă„ fullfĂžre spilleboken, og som et resultat var rekorden vĂ„r pĂ„ 3,5 timer, hva med din? 🙂

Og det virker som kubespray bare er Ansible, og alt er klart ved fĂžrste Ăžyekast, men:

K8S Multicluster Journey

I begynnelsen av reisen var oppgaven Ä lansere kapasiteter kun i AWS og pÄ virtualisering, men sÄ endret kravene seg, som ofte skjer.
 
K8S Multicluster JourneyK8S Multicluster Journey

I lys av dette ble det klart at vĂ„rt gamle mĂžnster med Ă„ kombinere ressurser i ett orkestreringssystem ikke var egnet – i tilfellet hvor klyngene er svĂŠrt avsidesliggende og administreres av ulike tilbydere. 

Dessuten. NÄr alle team jobber innenfor samme klynge, kunne ulike tjenester med feil installerte NodeSelectors fly til den "fremmede" verten til et annet team og bruke ressurser der, og hvis det ble angitt smuss, var det konstante forespÞrsler om at en eller annen tjeneste ikke fungerte, ikke distribuert riktig pÄ grunn av menneskelig faktor. Et annet problem var Ä beregne kostnadene, spesielt med tanke pÄ problemene med Ä distribuere tjenester pÄ tvers av noder.

En egen historie var utstedelsen av rettigheter til ansatte: hvert team Ăžnsket Ă„ vĂŠre "i spissen" av klyngen og administrere den fullstendig, noe som kan fĂžre til en fullstendig kollaps, siden teamene i utgangspunktet er uavhengige av hverandre.

Hva du skal gjĂžre?

Med hensyn til ovenstĂ„ende og Ăžnskene til teamene om Ă„ vĂŠre mer uavhengige, gjorde vi en enkel konklusjon: ett team - en klynge. 

SĂ„ vi fikk en andre:

K8S Multicluster Journey

Og sĂ„ den tredje klyngen: 

K8S Multicluster Journey

SĂ„ begynte vi Ă„ tenke: la oss si at om et Ă„r vil teamene vĂ„re ha mer enn Ă©n klynge? I ulike geografiske omrĂ„der, for eksempel, eller under kontroll av ulike tilbydere? Og noen av dem vil raskt kunne distribuere en midlertidig klynge for noen tester. 

K8S Multicluster Journey

Full Kubernetes ville komme! Dette er en slags MultiKubernetes, viser det seg. 

Samtidig vil vi alle pÄ en eller annen mÄte ha behov for Ä vedlikeholde alle disse klyngene, enkelt kunne administrere tilgang til dem, samt opprette nye og avvikle gamle uten manuell inngripen.

Det har gÄtt litt tid siden begynnelsen av reisen vÄr i Kubernetes-verdenen, og vi bestemte oss for Ä undersÞke de tilgjengelige lÞsningene pÄ nytt. Det viste seg at den allerede eksisterer pÄ markedet - Rancher 2.2.

K8S Multicluster Journey

PĂ„ den fĂžrste fasen av forskningen vĂ„r hadde Rancher Labs allerede laget den fĂžrste utgivelsen av versjon 2, men selv om den kunne Ăžkes veldig raskt ved Ă„ lansere en container uten eksterne avhengigheter med et par parametere eller bruke det offisielle HELM-diagrammet, virket det grovt. til oss, og vi visste ikke om vi kunne stole pĂ„ denne beslutningen om den vil bli utviklet eller raskt forlatt. Klynge = klikk-paradigmet i selve UI passet heller ikke for oss, og vi Ăžnsket ikke Ă„ bli bundet til RKE, siden det er et ganske snevert fokusert verktĂžy. 

Versjon Rancher 2.2 hadde allerede et mer brukbart utseende og hadde, sammen med de forrige, en haug med interessante funksjoner ut av boksen, for eksempel integrasjon med mange eksterne leverandĂžrer, et enkelt distribusjonspunkt for rettigheter og kubeconfig-filer, lansering av en kubectl bilde med dine rettigheter i brukergrensesnittet, nestede navnerom aka prosjekter. 

Det var ogsÄ et fellesskap som allerede var dannet rundt Rancher 2, og en leverandÞr kalt HashiCorp Terraform ble opprettet for Ä administrere det, noe som hjalp oss med Ä sette alt sammen.

Hva skjedde

Som et resultat endte vi opp med en liten klynge som kjĂžrte Rancher, tilgjengelig for alle andre klynger, samt mange klynger koblet til den, tilgang til hvilken som helst kan gis like enkelt som Ă„ legge til en bruker i ldap-katalogen, uavhengig av hvor den befinner seg og hvilken leverandĂžrs ressurser den bruker.

Ved Ä bruke gitlab-ci og Terraform ble det laget et system som lar deg lage en klynge av enhver konfigurasjon i skyleverandÞrer eller vÄr egen infrastruktur og koble dem til Rancher. Alt dette gjÞres i IaC-stilen, der hver klynge er beskrevet av et depot, og dens tilstand er versjonert. Samtidig er de fleste moduler koblet til fra eksterne depoter, slik at alt som gjenstÄr er Ä sende variabler eller beskrive din egendefinerte konfigurasjon for forekomster, noe som bidrar til Ä redusere prosentandelen av kodegjentakelse.

K8S Multicluster Journey

SelvfĂžlgelig er reisen vĂ„r langt fra over, og det er fortsatt mange interessante oppgaver foran oss, for eksempel et enkelt arbeidspunkt med logger og beregninger for alle klynger, servicenettverk, gitops for hĂ„ndtering av belastninger i en multicluster og mye mer. Vi hĂ„per du finner vĂ„r opplevelse interessant! 

Artikkelen er skrevet av A. Antipov, A. Ganush, Platform Engineers. 

Kilde: www.habr.com

KjĂžp pĂ„litelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere đŸ”„ KjĂžp pĂ„litelig webhotell med DDoS-beskyttelse, VPS VDS-servere | ProHoster