Teško da bi bilo pogrešno reći da je najbolji od muškaraca
pronaći radost kroz patnju.
Ludwig van Beethoven

Ja sam Sergej, radim u Yandex.Moneyu u timu za istraživanje performansi. Želim vam ispričati početak priče o našem putu do korištenja orkestracije - kako smo birali instrumente i o čemu smo vodili računa. Svi događaji iz članka odvijaju se u realnom vremenu, pa vi, poštovani čitatelji, gotovo uživo pratite razvoj situacije.
Zašto trebamo dirigenta u našem timu?
Tko je dirigent? Od fr. diriger - upravljati, usmjeravati, voditi - u svijetu glazbe - to je osoba koja je voditelj učenja i izvođenja ansambl glazbe. U našem slučaju ovo mjesto zauzimaju sustavi orkestracije i automatizacije.
Njihova se uloga ne razlikuje od uloge dirigenta u glazbi - potrebni su da pomognu ekipi, usmjeravaju i organiziraju njezinu igru.
U pravilu, tim ima određeni skup kapaciteta - nazovimo ih poslužiteljima - na kojima implementira svoje projekte.
Pristup dobivanju i upravljanju ovim poslužiteljima je različit. Nekoliko primjera:
- Tim upućuje zahtjev, na primjer, operativnoj grupi da im se osiguraju resursi s određenim parametrima.
- Operativni tim im osigurava potrebnu količinu - cloud ili bare metal - i obvezuje se održavati ih u ispravnom stanju prema SLA. Postavljanje također provodi operativni tim.
- Tim od operativne grupe prima samo resurse u oblaku ili goli metal i samostalno ih konfigurira.
- Tim sam “kupuje” resurse i potpuno ih samostalno održava/postavlja.
Naš tim koristi poslužitelje koji trebaju biti podržani - ažuriranje OS-a, instaliranje novih paketa itd.
Za sebe smo ih podijelili u dvije glavne vrste:
- tenkovska grupa,
- servisna grupa.
Skupina spremnika sastoji se od hostova s Yandex.Tank.
Grupa usluga uključuje sve što se odnosi na održavanje - to su razne usluge za pružanje podrške za ciklus izdavanja, generiranje automatskih izvješća itd.
U jednom trenutku je sve to postalo nezgodno za ručno upravljanje i razmišljali smo o automatizaciji cijelog procesa, počevši od “učitavanja” servera pa sve do razvoja, puštanja i pokretanja naše interne usluge.
Zašto je potreban dirigent, čak i ako sam orkestar može svirati?
Za početak smo savladali Ansible i počeli “lijevati” svoje bare metal servere kako bismo što manje ovisili o administratorima sustava - tu su svi na dobitku, stječemo nove vještine i rasterećujemo administratore dijela posla kojeg uvijek imaju dovoljno i bez nas . Nastojimo se razvijati izvan naše specijalnosti i timske autonomije što je više moguće.
U tvrtki je rad s Ansibleom već dosta dugo konfiguriran i reguliran, tako da smo naše rješenje lako integrirali u ovaj proces.
Trenutačno se skup domaćina sastoji od tri Ansible uloge:
- prva uloga instalira OS,
- drugi pokreće osnovne postavke za host, LDAP autorizaciju, na primjer,
- a treći instalira Yandex.Tank i povezane ovisnosti u docker kontejner.
Prijeđimo na usluge koje koristimo unutar tima.
Za svoje zadatke podjednako koristimo Kotlin i Python, a malo više Golang. Kako bismo objedinili razvoj i implementaciju naših usluga, odlučili smo ih pakirati u Docker spremnike. To vam daje slobodu odabira programskog jezika i u isto vrijeme regulira jedinstveni format isporuke za vašu aplikaciju.
Mala napomena o ipv6 u Dockeru
Neke od usluga s kojima komuniciramo dostupne su samo putem ipv6, pa smo morali smisliti kako napraviti ipv6 za spremnike.
Prema ipv6 dokumentaciji na službenoj Docker web stranici, ipv6 je omogućen dodavanjem parametara u daemon.json:
{
"ipv6": true,
"fixed-cidr-v6": "2001:db8:1::/64"
}U tom slučaju pružatelj mora izdati ipv6 podmrežu u koju ćete se registrirati fixed-cidr-v6.
No, mi smo odabrali drugu opciju - ipv6 NAT, a evo i zašto:
- Sada doker samo sa ipv6.
- Imati globalno usmjerivačku adresu u svakom spremniku znači da su svi priključci (čak i neobjavljeni) izloženi svima osim ako se ne izvrši dodatno filtriranje.
- proxy korisničkog područja za objavljivanje portova, .
ipv6 NAT je , koji sam upravlja pravilima u ip6tables i uređuje ih prilikom dodavanja novog spremnika.
Kako bi ovo rješenje radilo ispravno, bilo je potrebno napraviti niz drugih manipulacija. Svakako inicijalizirajte ip6table_nat na sustavu. Prisutnost modula instaliranog na sustavu ne jamči da će modul biti učitan u kernel pri pokretanju. Na ovo smo naišli kada smo primili ovu pogrešku prilikom pokretanja spremnika s NAT-om na novom hostu:
2019/01/22 14:59:54 running [/sbin/ip6tables -t filter -N DOCKER --wait]: exit status 3: modprobe: can't change directory to '/lib/modules': No such file or directory
ip6tables v1.6.2: can't initialize ip6tables table `filter': Table does not exist (do you need to insmod?)Problem je riješen nakon dodavanja inicijalizacije Ansible ulozi pomoću modprobe modula i učitavanja pri pokretanju OS-a pomoću lineinfile:
- name: Add ip6table_nat module
modprobe:
name: ip6table_nat
state: present
- name: Add ip6table_nat to boot
lineinfile:
path: /etc/modules
line: 'ip6table_nat'Usput, ima jedan dobar na čvorištu , koji ukratko i jasno opisuje prednosti i nedostatke jedne ili druge metode za pokretanje ipv6 u dockeru.
Ali vratimo se na naše pitanje postavljeno na početku:
Zašto je potreban dirigent, čak i ako sam orkestar može svirati?
Sada svi zamišljaju kako igrati u našem timu:
- kreiran je proces "lijevanja" servera,
- razvoj i implementacija usluga su objedinjeni.
Postavlja se razumno pitanje: kako implementirati, ažurirati i kontrolirati naše usluge u Docker spremnicima učinkovito i što je moguće automatski?
Unatoč činjenici da svaki član orkestra zna svoju ulogu, može se zbuniti i odstupiti od izvorne ideje. Tu dolazimo do zaključka da bez dirigenta naš orkestar neće učinkovito vježbati i svirati koherentno. Dirigent je odgovoran za sve parametre izvedbe, brinući se da sve bude objedinjeno jedinstvenim tempom i raspoloženjem.
Kako uz minimalna ulaganja doći do dobrog dirigenta?
Tema orkestracije dosta je razvijena na tržištu. Ali prvo, razgovarajmo o pomoćnim alatima koji mogu pomoći dirigentu.
- sustav koji pruža dvije glavne funkcije:
- otkrivanje usluge,
- distribuirana pohrana ključ-vrijednosti.
U našem orkestru, Consul će biti odgovoran za registraciju usluga i pohranjivanje njihovih konfiguracija. Postoje dvije mogućnosti registracije:
- Aktivan je kada se usluga registrira pomoću HTTP API-ja;
- Pasivno - uslugu je potrebno ručno registrirati.
Vault je repozitorij koji standardizira i objedinjuje sigurnu pohranu i rukovanje tajnama – lozinkama, certifikatima.
Ovo su prednosti koje ćemo dobiti korištenjem ovog alata:
- Jedinstveni centar za stvaranje i pohranu tajni i upravljanje njihovim životnim ciklusom pomoću HTTP API-ja.
- Transit Secrets Engine - enkripcija i dešifriranje podataka bez spremanja. Mogućnost prijenosa podataka u šifriranom obliku preko nezaštićenih komunikacijskih kanala.
- Pravila pristupa koja se lako konfiguriraju.
- Revizija pristupa tajnama.
- Mogućnost stvaranja vlastitog CA (Certificate Authority) za upravljanje samopotpisanim certifikatima unutar vaše infrastrukture.
S obzirom na sve naše zahtjeve, za ulogu dirigenta bile su prikladne dvije opcije - Kubernetes i Nomad.
Kubernetes
Koliko je već članaka i knjiga o njemu napisano (ovdje , na primjer), postoje izvješća koja ću ukratko napisati - ovo je univerzalni kombajn koji može učiniti gotovo sve. Cijena za to je da postavljanje i održavanje klastera na Kubernetesu nije uvijek jednostavno.
nomad
iz HashiCorpa, tvrtke poznate po gore spomenutom konzulu i trezoru.
Utvrdili smo da je Nomad prilično lakši za instalaciju i konfiguraciju od Kubernetesa. Jedna binarna datoteka radi i u poslužiteljskom i u klijentskom načinu rada. U isto vrijeme, Nomad pokriva cijeli popis zadataka koje želimo da rješava: upravljanje klasterom, brzi planer, podrška za multidatacentre. Osim toga, kada koristimo konzul i trezor, dobivamo čvršću integraciju za orkestriranje naših usluga.
Što je trenutno u tijeku:
- pripremljeni poslužitelji za implementaciju Consula,
- konfiguracija nomad klastera bit će unesena u Consul uz pomoć koje bi se nomad trebao automatski implementirati,
- Paralelno ćemo instalirati trezor za pohranu tajni.
Pitanje za publiku: isplati li se za takve zadatke angažirati dirigenta ili se orkestar dobro snalazi i bez njega? Recite nam u komentarima što mislite o ovome.
Pretplatite se na naš blog i ostanite u kontaktu – uskoro ćemo vam reći što se na kraju dogodilo i jesmo li konfigurirali nomad klaster onako kako smo htjeli.
Dođite u naš cozy , gdje uvijek možete zatražiti savjet, pomoći kolegama i samo razgovarati o istraživanju produktivnosti i više.
Izvor: www.habr.com
