Izvedba orkestra

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

Izvedba orkestra

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 ne može koristiti 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, iptables samo za ipv4.

ipv6 NAT je docker kontejner, 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 članak, 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.

Konzul - 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 takav, 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

Oruđe 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 telegram chat, gdje uvijek možete zatražiti savjet, pomoći kolegama i samo razgovarati o istraživanju produktivnosti i više.

Izvor: www.habr.com

Kupite pouzdan hosting za stranice s DDoS zaštitom, VPS VDS poslužiteljima 🔥 Kupite pouzdan web hosting sa DDoS zaštitom, VPS VDS servere | ProHoster