K8S vairāku klasteru ceļojums

Čau Habr!

Mēs pārstāvam Exness platformas komandu. IepriekÅ” mÅ«su kolēģi jau rakstÄ«ja rakstu par RažoÅ”anai gatavi attēli k8s. Å odien mēs vēlamies dalÄ«ties pieredzē par pakalpojumu migrÄ“Å”anu uz Kubernetes.

K8S vairāku klasteru ceļojums

Sākumā mēs piedāvājam dažus skaitļus, lai labāk izprastu, kas tiks apspriests:

  • MÅ«su attÄ«stÄ«bas nodaļā ir vairāk nekā 100 cilvēku, tostarp vairāk nekā 10 dažādas komandas ar paÅ”pietiekamiem QA, DevOps un Scrum procesiem. Izstrādes kaudze - Python, PHP, C++, Java un Golang. 
  • Testa un ražoÅ”anas vides lielums ir aptuveni 2000 konteineru katrā. Viņi izmanto Rancher v1.6 savā virtualizācijā un VMware. 

Motivācija

Kā saka, nekas neturpinās mūžīgi, un Rancher jau diezgan sen paziņoja par 1.6 versijas atbalsta beigām. Jā, vairāk nekā trÄ«s gadu laikā esam iemācÄ«juÅ”ies to sagatavot un risināt raduŔās problēmas, taču arvien biežāk saskaramies ar problēmām, kuras nekad netiks labotas. Rancher 1.6 ir arÄ« pārkaulota tiesÄ«bu izsniegÅ”anas sistēma, kurā jÅ«s varat darÄ«t gandrÄ«z visu vai neko.

Lai gan patentētā virtualizācija nodroÅ”ināja lielāku kontroli pār datu glabāŔanu un tās droŔību, tā radÄ«ja darbÄ«bas izmaksas, kuras bija grÅ«ti pieņemt, ņemot vērā pastāvÄ«go uzņēmuma izaugsmi, projektu skaitu un prasÄ«bas tiem.

Mēs vēlējāmies ievērot IaC standartus un, ja nepiecieÅ”ams, iegÅ«t jaudu ātri, jebkurā Ä£eogrāfiskā vietā un bez pārdevēja bloÄ·Ä“Å”anas, kā arÄ« spēt ātri no tās atteikties.

Pirmie soļi

Pirmkārt, mēs vēlējāmies paļauties uz modernām tehnoloÄ£ijām un risinājumiem, kas ļautu komandām veikt ātrāku izstrādes ciklu un samazināt darbÄ«bas izmaksas, mijiedarbojoties ar platformu, kas nodroÅ”ina jaudu. 
 
Protams, pirmais, kas mums ienāca prātā, bija Kubernetes, taču mēs nesajÅ«sminājāmies un veicām nelielu izpēti, lai noskaidrotu, vai tā ir pareizā izvēle. Mēs izvērtējām tikai atvērtā pirmkoda risinājumus, un negodÄ«gā cīņā Kubernetes bez ierunām uzvarēja.  

Tālāk sekoja jautājums par klasteru izveides rīka izvēli. Salīdzinājām populārākos risinājumus: kops, kubespray, kubeadm.

Iesākumam kubeadm mums Ŕķita pārāk sarežģīts ceļŔ, drÄ«zāk kā sava veida ā€œvelosipēdaā€ izgudrotājs, un kops nepietika elastÄ«bas.

Un uzvarētājs bija:

K8S vairāku klasteru ceļojums

Mēs sākām eksperimentēt ar savu virtualizāciju un AWS, mēģinot atjaunot kaut ko aptuveni lÄ«dzÄ«gu mÅ«su iepriekŔējam resursu pārvaldÄ«bas modelim, kurā visi koplietoja vienu un to paÅ”u "klasteri". Un tagad mums ir pirmais 10 mazu virtuālo maŔīnu klasteris, no kurām dažas atrodas AWS. Mēs sākām mēģināt migrēt komandas, viss likās "labi", un stāstu varēja pabeigt, bet...

Pirmās problēmas

Ansible ir tas, uz kura ir veidots kubespray, tas nav rÄ«ks, kas ļauj sekot IaC: nododot ekspluatācijā/izslēdzot mezglus, pastāvÄ«gi kaut kas nogāja greizi un bija nepiecieÅ”ama kaut kāda iejaukÅ”anās, un, izmantojot dažādas OS, rokasgrāmata izturējās atŔķirÄ«gi. savādāk . Pieaugot klastera komandu un mezglu skaitam, mēs sākām pamanÄ«t, ka rokasgrāmatas aizpildÄ«Å”ana aizņem arvien ilgāku laiku, un rezultātā mÅ«su rekords bija 3,5 stundas, kā ar jÅ«su? šŸ™‚

Un Ŕķiet, ka kubespray ir tikai Ansible, un viss ir skaidrs no pirmā acu uzmetiena, bet:

K8S vairāku klasteru ceļojums

Ceļojuma sākumā uzdevums bija palaist jaudas tikai AWS un virtualizācijā, bet pēc tam, kā tas bieži notiek, prasības mainījās.
 
K8S vairāku klasteru ceļojumsK8S vairāku klasteru ceļojums

Ņemot to vērā, kļuva skaidrs, ka mÅ«su vecais modelis apvienot resursus vienā orÄ·estrÄ“Å”anas sistēmā nebija piemērots gadÄ«jumā, ja klasteri atrodas ļoti attālināti un tos pārvalda dažādi pakalpojumu sniedzēji. 

Tālāk vairāk. Kad visas komandas strādā vienā klasterÄ«, dažādi servisi ar nepareizi uzstādÄ«tiem NodeSelectors varēja aizlidot uz citas komandas ā€œÄrzemjuā€ saimniekdatoru un tur izmantot resursus, un, ja tika uzlikts piesārņojums, nepārtraukti skanēja pieprasÄ«jumi, ka viens vai otrs pakalpojums nedarbojas, nav pareizi izplatÄ«ts cilvēka faktora dēļ. Vēl viena problēma bija izmaksu aprēķināŔana, Ä«paÅ”i ņemot vērā problēmas, kas saistÄ«tas ar pakalpojumu sadali pa mezgliem.

AtseviŔķs stāsts bija par tiesÄ«bu izsniegÅ”anu darbiniekiem: katra komanda vēlējās bÅ«t klastera ā€œgalvenāā€ un pilnÄ«bā to pārvaldÄ«t, kas var izraisÄ«t pilnÄ«gu sabrukumu, jo komandas bÅ«tÄ«bā ir viena no otras neatkarÄ«gas.

Ko darīt?

Ņemot vērā iepriekÅ” minēto un komandu vēlmes bÅ«t neatkarÄ«gākām, izdarÄ«jām vienkārÅ”u secinājumu: viena komanda - viens klasteris. 

Tātad mums ir otrs:

K8S vairāku klasteru ceļojums

Un tad treÅ”ais klasteris: 

K8S vairāku klasteru ceļojums

Tad sākām domāt: teiksim, ka pēc gada mÅ«su komandām bÅ«s vairāk par vienu klasteru? Piemēram, dažādos Ä£eogrāfiskos apgabalos vai dažādu pakalpojumu sniedzēju kontrolē? Un daži no viņiem vēlēsies ātri izvietot pagaidu kopu dažiem testiem. 

K8S vairāku klasteru ceļojums

Pilnas Kubernetes nāktu! Tas ir sava veida MultiKubernetes, izrādās. 

Tajā paŔā laikā mums visiem bÅ«s kaut kādā veidā jāuztur visas Ŕīs kopas, jāspēj viegli pārvaldÄ«t piekļuvi tiem, kā arÄ« izveidot jaunas un likvidēt vecās bez manuālas iejaukÅ”anās.

Ir pagājis kāds laiks kopÅ” mÅ«su ceļojuma sākuma Kubernetes pasaulē, un mēs nolēmām vēlreiz pārbaudÄ«t pieejamos risinājumus. IzrādÄ«jās, ka tas jau pastāv tirgÅ« - Rancher 2.2.

K8S vairāku klasteru ceļojums

MÅ«su pētÄ«juma pirmajā posmā Rancher Labs jau bija izlaidusi pirmo versiju 2, taču, lai gan to varēja ļoti ātri palielināt, palaižot konteineru bez ārējām atkarÄ«bām ar pāris parametriem vai izmantojot oficiālo HELM diagrammu, tas Ŕķita rupji. mums, un mēs nezinājām, vai varam paļauties uz Å”o lēmumu, vai tas tiks izstrādāts vai ātri atteikts. ArÄ« klastera = klikŔķu paradigma paŔā lietotāja saskarnē mums nederēja, un mēs negribējām bÅ«t saistÄ«ti ar RKE, jo tas ir diezgan Å”auri fokusēts rÄ«ks. 

Versijai Rancher 2.2 jau bija funkcionālāks izskats, un kopā ar iepriekŔējām tai bija vairākas interesantas funkcijas, piemēram, integrācija ar daudziem ārējiem pakalpojumu sniedzējiem, viens tiesÄ«bu un kubeconfig failu izplatÄ«Å”anas punkts, kubectl palaiÅ”ana. attēls ar jÅ«su tiesÄ«bām lietotāja saskarnē, ligzdotās nosaukumvietas jeb projekti. 

Ap Rancher 2 jau bija izveidota arī kopiena, un tās pārvaldībai tika izveidots pakalpojumu sniedzējs ar nosaukumu HashiCorp Terraform, kas mums palīdzēja visu apvienot.

Kas notika

Rezultātā mēs nonācām pie viena maza klastera, kurā darbojas Rancher, kas ir pieejams visiem pārējiem klasteriem, kā arÄ« daudziem ar to saistÄ«tiem klasteriem, no kuriem jebkuram piekļuvi var pieŔķirt vienkārÅ”i kā lietotāja pievienoÅ”anu ldap direktorijam neatkarÄ«gi no kur tas atrodas un kura pakalpojumu sniedzēja resursus tas izmanto.

Izmantojot gitlab-ci un Terraform, tika izveidota sistēma, kas ļauj izveidot jebkuras konfigurācijas klasteru mākoņpakalpojumos vai mÅ«su paÅ”u infrastruktÅ«rā un savienot tos ar Rancher. Tas viss tiek darÄ«ts IaC stilā, kur katru klasteru apraksta repozitorijs, un tā stāvoklis tiek versēts. Tajā paŔā laikā lielākā daļa moduļu ir savienoti no ārējām krātuvēm, tāpēc atliek tikai nodot mainÄ«gos vai aprakstÄ«t jÅ«su pielāgoto konfigurāciju gadÄ«jumiem, kas palÄ«dz samazināt koda atkārtoÅ”anās procentuālo daudzumu.

K8S vairāku klasteru ceļojums

Protams, mÅ«su ceļojums ne tuvu nav beidzies, un priekŔā vēl ir daudz interesantu uzdevumu, piemēram, viens darba punkts ar žurnāliem un jebkuru klasteru metriku, servisa tÄ«kls, gitopi kravu pārvaldÄ«bai vairākos klasteros un daudz kas cits. Mēs ceram, ka mÅ«su pieredze jums liksies interesanta! 

Rakstu sarakstÄ«juÅ”i A. Antipovs, A. GanuÅ”s, platformas inženieri. 

Avots: www.habr.com

Pievieno komentāru