E vështirë të thuash se njerëzit më të mirë
gjejnë gëzim përmes vuajtjes.
Ludwig van Beethoven

UnĂ« jam Sergey, punoj nĂ« Yandex.Money nĂ« ekipin e kĂ«rkimeve pĂ«r performancĂ«n. DĂ«shiroj t'ju bĂ«j tĂ« ditur fillimin e historisĂ« sonĂ« rreth pĂ«rdorimit tĂ« orkestrimit â si zgjodhĂ«m mjetet dhe çfarĂ« kemi marrĂ« parasysh. TĂ« gjitha ngjarjet e artikullit ndodhin nĂ« kohĂ« reale, kĂ«shtu qĂ« ju, tĂ« dashur lexues, ndihmoni tĂ« ndiqni zhvillimin e situatĂ«s pothuajse nĂ« kohĂ« reale.
Përse na nevojitet një dirigjent në ekip?
Kush Ă«shtĂ« dirigjenti? Nga fr. diriger â drejto, udhĂ«heq â nĂ« botĂ«n e muzikĂ«s, ai Ă«shtĂ« personi qĂ« drejton provat dhe ekzekutimin e muzikĂ«s ansamblore. NĂ« rastin tonĂ«, kĂ«tĂ« rol e kanĂ« sistemet e orkestrimit dhe automatizimit.
Roli i tyre nuk ndryshon nga ai i dirigjentit nĂ« muzikĂ« â ata janĂ« tĂ« nevojshĂ«m pĂ«r tĂ« ndihmuar ekipin, pĂ«r tĂ« drejtuar dhe organizuar performancĂ«n e tij.
Zakonisht, ekipi ka njĂ« grup tĂ« caktuar kapacitetesh â le tĂ« i quajmĂ« servera, nĂ« tĂ« cilat ata zbatojnĂ« projektet e tyre.
Prerja dhe përdorimi i këtyre serverëve janë të larmishme. Disa shembuj:
- Ekipi bën një kërkesë, p.sh., në grupin e operacioneve, për t'u ofruar resurse me parametra të caktuar.
- Grupi i operacioneve ju siguron numrin e nevojshĂ«m â cloud ose bare metal ("harduer i papĂ«rpunuar") â dhe angazhohet pĂ«r ta mbajtur atĂ« nĂ« gjendje tĂ« mirĂ« sipas SLA. Konfigurimi gjithashtu bĂ«het nga grupi i operacioneve.
- Ekipi merr vetëm resurset cloud ose bare metal nga grupi i operacioneve, konfigurimin e bën vetë.
- Ekipi vetĂ« âblenâ resurset dhe i mbĂ«shtet / konfigurimin plotĂ«sisht tĂ« pavarur.
NĂ« ekipin tonĂ« pĂ«rdoren serverĂ« qĂ« duhet tĂ« mbahen â pĂ«r tĂ« pĂ«rditĂ«suar OS-nĂ«, pĂ«r tĂ« instaluar paketa tĂ« reja, etj.
Për vete, ne i ndajmë ato në dy lloje kryesore:
- grupi tankist,
- grupi shërbyes.
Grupi tankist përbëhet nga hoste me Yandex.Tank.
Grupi shĂ«rbyes pĂ«rfshin gjithçka qĂ« lidhet me shĂ«rbimin â kĂ«to janĂ« shĂ«rbime tĂ« ndryshme pĂ«r sigurimin e mbĂ«shtetjes nĂ« ciklin e lĂ«shimit, gjenerimin e raporteve automatike etj.
Në një moment, u bë e pamundur të menaxhohej gjithçka manualisht, dhe ne filluam të mendojmë për automatizimin e të gjithë procesit, duke filluar nga "llogaritja" e serverëve dhe deri te zhvillimi, publikimi dhe lançimi i shërbimit tonë të brendshëm.
PĂ«rse nevojitet njĂ« ĐŽĐžŃОжŃŃ, edhe pse orkestri e di si tĂ« luajĂ« vetĂ«?
SĂ« pari, ne e mĂ«suam Ansible dhe filluam tĂ« "llogarisim" serverĂ«t tanĂ« bare metal, pĂ«r tĂ« qenĂ« mĂ« pak tĂ« varur nga administratorĂ«t sistemorĂ« â kĂ«tu tĂ« gjithĂ« fitojnĂ«, ne fitojmĂ« aftĂ«si tĂ« reja dhe i lirujem administratorĂ«t nga njĂ« pjesĂ« e punĂ«s, pĂ«r tĂ« cilĂ«n ata gjithmonĂ« kanĂ« mjaft angazhime. Ne i jemi pĂ«rkushtuar zhvillimit jashtĂ« specialitetit tonĂ« dhe autonomisĂ« sĂ« ekipit, sa mĂ« shumĂ« qĂ« Ă«shtĂ« e mundur.
Në kompani, puna me Ansible është e vendosur dhe e rregulluar prej një kohe të gjatë, prandaj ne e integruam lehtësisht zgjidhjen tonë në këtë proces.
Tani llogaritja e hosteve përbëhet nga tre role Ansible:
- rola e parë installon OS-in,
- rola e dytë përcjell parametrat bazë për hostin, si për shembull, autorizimin LDAP,
- dhe rola e tretë instalon Yandex.Tank në konteinerin docker dhe varësitë përkatëse.
Të kalojmë te shërbimet që ne përdorim brenda ekipit.
Për nevojat tona, ne përdorim në mënyrë të barabartë Kotlin dhe Python, dhe pak Golang. Për të unifikuar zhvillimin dhe aktivizimin e shërbimeve tona, ne vendosëm ti paketojmë ato në konteinerët docker. Kjo na jep lirinë e zgjedhjes së gjuhës së programimit dhe njëkohësisht rregullon një format të njëjtë të dorëzimit të aplikacionit tonë.
Një shënim i vogël për ipv6 në Docker
Disa shërbime me të cilat ne bashkëveprojmë janë të disponueshme vetëm përmes ipv6, prandaj na u desh të kuptojmë se si të krijojmë ipv6 për konteinerët.
Sipas dokumentacionit për ipv6 në faqen zyrtare të Dockerit, ipv6 aktivizohet duke shtuar parametrat në daemon.json:
{
"ipv6": true,
"fixed-cidr-v6": "2001:db8:1::/64"
}Në këtë rast, ofruesi duhet të japë një nënrrjetë ipv6, të cilën do ta shkruani në fixed-cidr-v6.
MegjithatĂ«, ne zgjodhĂ«m njĂ« version tjetĂ«r â ipv6 NAT, dhe ja pse:
- Tani docker vetëm me ipv6.
- Prania e një adrese globalisht e routeable në çdo konteiner do të thotë që të gjitha portet (edhe ato të pa publikuara) bëhen të aksesueshme për të gjithë, përveç nëse ndodhet ndonjë filtrimi të mëtejshëm.
- proksy userland për publikimin e porteve, .
ipv6 NAT â Ă«shtĂ« , i cili vetĂ« menaxhon rregullat nĂ« ip6tables dhe i redakton ato kur shtohet njĂ« kontejner i ri.
Për të bërë që ky zgjidhje të funksionojë siç duhet, ishte e nevojshme të bëheshin disa manipulime të tjera. Sigurisht, duhet të inicializohet ip6table_nat në sistem. Prania e modulit të instaluar në sistem nuk garanton që kur fillon, moduli do të ngarkohet në bërthamë. Ne u përballëm me këtë kur morëm një gabim të tillë gjatë nisjes së kontejnerit me NAT në një host të ri:
2019/01/22 14:59:54 duke ekzekutuar [/sbin/ip6tables -t filter -N DOCKER --wait]: statusi i daljes 3: modprobe: nuk mund të ndryshojë direktorinë në '/lib/modules': Nuk ka një dosje të tillë
ip6tables v1.6.2: nuk mund të inicializojë tabelën ip6tables `filter': Tabela nuk ekziston (po e nevojitet insmod?)Problemi u zgjidh pas shtimit në rolin e Ansible të inicializimit përmes modulit modprobe dhe ngarkimit gjatë fillimit të OS me lineinfile:
- emri: Shto modulin ip6table_nat
modprobe:
emri: ip6table_nat
gjendja: e pranishme
- emri: Shto ip6table_nat në nisje
lineinfile:
rruga: /etc/modules
rreshti: 'ip6table_nat'Përveç kësaj, në Habra ka një të mirë , e cila përshkruan shkurtimisht dhe qartë avantazhet dhe disavantazhet e mënyrave të ndryshme për të punuar me ipv6 në docker.
Por, le të kthehemi tek pyetja jonë, e cila u bë në fillim:
PĂ«rse nevojitet njĂ« ĐŽĐžŃОжŃŃ, edhe pse orkestri e di si tĂ« luajĂ« vetĂ«?
Tani gjithkush e kupton se si të luajë në ekipin tonë:
- procesi i 'mbushjes' të serverëve është krijuar,
- zhvillimi dhe deployment-i i shërbimeve janë unifikuar.
Shtrin një pyetje të arsyeshme - si të bëjmë që të deployojmë, azhurnojmë dhe kontrollojmë shërbimet tona në kontejnerët docker në mënyrë të efektshme dhe maksimalisht të automatizuar?
Pavarësisht nga fakti se secili pjesëmarrës në orkestër e di pjesën e tij, ai mund të devijojë, të largohet nga ideja fillestare. Këtu arrijmë te pikë e cila thotë se pa një dirigjent, orkestri ynë nuk do të stërvitet efektivisht dhe nuk do të luajë në mënyrë të harmonishme. Dirigjenti përgjigjet për të gjithë parametrat e interpretimit, për të siguruar që gjithçka të jetë e bashkuar me një ritëm dhe humor të zakonshëm.
Si të marrim një dirigjent të mirë me investime minimale?
Tema e orkestrimit është mjaft e zhvilluar në treg. Por fillimisht le të flasim për mjetet ndihmëse që mund ta ndihmojnë dirigjentin.
â njĂ« sistem qĂ« ofron dy funksione kryesore:
- zbërthimi i shërbimeve (service discovery),
- depozita e shpërndarë e çelësit-vlerë.
Në orkestrën tonë, Consul do të përgjigjet për regjistrimin e shërbimeve dhe ruajtjen e konfigurimeve të tyre. Ka dy opsione për regjistrim:
- Aktiv - është kur shërbimi regjistron veten duke përdorur API-në HTTP;
- Pasiv - shërbimi duhet të shkruhet manualisht.
Vault Ă«shtĂ« njĂ« depo qĂ« standardizon dhe unifikon ruajtjen e sigurt dhe punĂ«n me sekrete â fjalĂ«kalime, certifikata.
Ja avantazhet që do të marrim duke përdorur këtë mjet:
- Një qendër e vetme për krijimin dhe ruajtjen e sekreteve, menaxhimin e ciklit të tyre të jetës nëpërmjet HTTP API.
- Transit Secrets Engine â enkriptimi dhe dekriptimi i tĂ« dhĂ«nave pa i ruajtur ato. MundĂ«sia pĂ«r tĂ« transmetuar tĂ« dhĂ«na nĂ« formĂ« tĂ« koduar pĂ«rmes kanaleve tĂ« paprojektuara.
- Politikat e qasjes, të cilat janë të lehta për t'u konfiguruar.
- Auditimi i qasjes në sekrete.
- Mundësia për të krijuar një CA (Autoritet të Certifikimit) të vetin për të menaxhuar certifikatat e nënshkruara vetë brenda infrastrukturës së tij.
Duke marrë parasysh të gjitha kërkesat tona, dy mundësi për rolin e dirigjentit ishin Kubernetes dhe Nomad.
Kubernetes
Sa shumĂ« artikuj dhe libra janĂ« shkruar pĂ«r tĂ« (kĂ«tu , pĂ«r shembull), janĂ« bĂ«rĂ« prezantime, sa do ta shkruaj shkurt â Ă«shtĂ« njĂ« kombinator universal qĂ« mund tĂ« bĂ«jĂ« praktikisht gjithçka. Ămimi pĂ«r kĂ«tĂ« â nuk janĂ« gjithmonĂ« lehtĂ«sira nĂ« konfigurimin dhe mbĂ«shtetje e klasterit nĂ« Kubernetes.
Nomad
nga HashiCorp, një kompani e njohur për consul dhe vault të përmendura më lart.
Nomad na duket mjaft i thjeshtë për t'u instaluar dhe konfiguruar, më shumë se Kubernetes. Një skedë binare punon si në modin server ashtu edhe në atë klienti. Në të njëjtën kohë, Nomad mbulon të gjithë listën e detyrave që duam që ai të zgjidhë: menaxhimin e klasterit, një planifikues të shpejtë, mbështetje për multidatacenter. Plus, me përdorimin e consul dhe vault ne marrim një integrim më të ngushtë për orkestrimin e shërbimeve tona.
ĂfarĂ« Ă«shtĂ« nĂ« punĂ« tani:
- përgatitëm serverët për shpërndarjen e Consul,
- në Consul do të përfshihet konfigurimi i klasterit nomad, me ndihmën e të cilit nomad do të duhet të shpërndahet automatikisht,
- në të njëjtën kohë do të instalojmë vault për ruajtjen e sekreteve.
Pyetja nĂ« sallĂ« â a duhet tĂ« thĂ«rrasĂ« njĂ« dirigjent pĂ«r kĂ«to detyra apo orkestrimin e bĂ«jmĂ« mirĂ« edhe pa tĂ«? Na trego nĂ« komente çfarĂ« mendon pĂ«r kĂ«tĂ«.
Bashkohu me blogun tonĂ« dhe qĂ«ndro nĂ« kontakt â sĂ« shpejti do tĂ« tregojmĂ« se çfarĂ« dolĂ«n nĂ« fund, dhe nĂ«se e konfiguruam klasterin nomad ashtu siç e dĂ«shironim.
Vijni në bisedën tonë të ngrohtë , ku gjithmonë mund të kërkoni këshilla, të ndihmoni kolegët dhe thjesht të komunikoni mbi temën e kërkimeve të performancës dhe jo vetëm.
Burimi: habr.com
