Spektaklio orkestras

Vargu ar būtų neteisinga sakyti, kad geriausias iš vyrų
rasti džiaugsmą per kančią.
Liudvikas van Bethovenas

Spektaklio orkestras

Aš esu Sergejus, dirbu „Yandex.Money“ veiklos tyrimų komandoje. Noriu papasakoti istorijos pradžią apie mūsų kelią į orkestravimą – kaip rinkomės instrumentus ir į ką atsižvelgėme. Visi įvykiai iš straipsnio vyksta realiu laiku, todėl jūs, mieli skaitytojai, beveik gyvai stebite situacijos raidą.

Kodėl mūsų komandai reikia dirigento?

Kas yra dirigentas? Iš fr. diriger – vadovauti, vadovauti, vadovauti – muzikos pasaulyje – tai žmogus, vadovaujantis ansamblio muzikos mokymuisi ir atlikimui. Mūsų atveju šią vietą užima orkestravimo ir automatikos sistemos.

Jų vaidmuo niekuo nesiskiria nuo dirigento vaidmens muzikoje – jie reikalingi norint padėti komandai, vadovauti ir organizuoti jo grojimą.

Paprastai komanda turi tam tikrą pajėgumų rinkinį – pavadinkime juos serveriais –, kuriuose jie įgyvendina savo projektus.

Šių serverių įsigijimo ir valdymo metodas yra įvairus. Keli pavyzdžiai:

  • Komanda pateikia užklausą, pavyzdžiui, operacijų grupei, kad suteiktų jai išteklius su tam tikrais parametrais.
  • Operacijų komanda aprūpina juos reikiamu kiekiu – debesies ar pliko metalo – ir įsipareigoja prižiūrėti tinkamos būklės pagal SLA. Sąranką taip pat atlieka operacijų komanda.
  • Komanda iš operacijų grupės gauna tik debesies arba pliko metalo išteklius ir ją konfigūruoja pati.
  • Komanda pati „perka“ išteklius ir juos prižiūri/sukuria visiškai savarankiškai.

Mūsų komanda naudoja serverius, kuriuos reikia palaikyti – atnaujinti OS, diegti naujus paketus ir pan.

Mes juos suskirstėme į du pagrindinius tipus:

  • tankų grupė,
  • paslaugų grupė.

Tankų grupę sudaro šeimininkai su Yandex.Tank.

Į paslaugų grupę įeina viskas, kas susiję su priežiūra – tai įvairios paslaugos, skirtos palaikyti išleidimo ciklą, generuoti automatines ataskaitas ir pan.

Vienu metu visa tai tapo nepatogu valdyti rankiniu būdu ir galvojome apie viso proceso automatizavimą, pradedant nuo serverių „įkrovimo“ ir baigiant mūsų vidinės paslaugos kūrimu, išleidimu ir paleidimu.

Kam reikalingas dirigentas, net jei pats orkestras gali groti?

Iš pradžių įvaldėme Ansible ir pradėjome „pilti“ savo pliko metalo serverius, kad būtume mažiau priklausomi nuo sistemos administratorių – čia visi laimi, įgyjame naujų įgūdžių ir atleidžiame administratorius nuo kai kurių darbų, kurių jiems visada užtenka be mūsų. . Stengiamės kuo labiau tobulėti už savo specialybės ir komandos savarankiškumo.

Įmonėje darbas su Ansible buvo konfigūruojamas ir reguliuojamas gana ilgą laiką, todėl į šį procesą nesunkiai integravome savo sprendimą.

Šiuo metu pagrindinį fondą sudaro trys Ansible vaidmenys:

  • pirmasis vaidmuo įdiegia OS,
  • antroji paleidžia pagrindinius pagrindinio kompiuterio nustatymus, pvz., LDAP autorizaciją,
  • o trečiasis įdiegia „Yandex.Tank“ ir susijusias priklausomybes dokerio konteineryje.

Pereikime prie paslaugų, kurias naudojame komandoje.

Savo užduotims mes vienodai naudojame Kotlin ir Python ir šiek tiek daugiau Golang. Siekdami suvienodinti savo paslaugų kūrimą ir diegimą, nusprendėme jas supakuoti į „Docker“ konteinerius. Tai suteikia jums laisvę pasirinkti programavimo kalbą ir tuo pat metu reguliuoja vienodą jūsų programos pristatymo formatą.

Maža pastaba apie ipv6 programoje Docker

Kai kurios paslaugos, su kuriomis bendraujame, pasiekiamos tik per ipv6, todėl turėjome išsiaiškinti, kaip sukurti ipv6 konteineriams.

Remiantis ipv6 dokumentacija oficialioje „Docker“ svetainėje, ipv6 įgalinamas pridedant parametrus prie daemon.json:

{
  "ipv6": true,
  "fixed-cidr-v6": "2001:db8:1::/64"
}

Tokiu atveju teikėjas turi išduoti ipv6 potinklį, kuriame užsiregistruosite fixed-cidr-v6.
Tačiau pasirinkome kitą variantą – ipv6 NAT, ir štai kodėl:

  • Dabar dokas negali naudotis tik su ipv6.
  • Jei kiekviename konteineryje yra globaliai nukreipiamas adresas, tai reiškia, kad visi prievadai (net ir nepaskelbti) yra prieinami visiems, nebent būtų atliktas papildomas filtravimas.
  • „Userland“ tarpinis serveris, skirtas publikavimo prievadams, iptables tik ipv4.

ipv6 NAT yra dokerio konteineris, kuri pati tvarko taisykles ip6tables ir redaguoja jas pridedant naują konteinerį.

Kad šis sprendimas veiktų tinkamai, reikėjo atlikti daugybę kitų manipuliacijų. Būtinai inicijuokite ip6table_nat sistemoje. Sistemoje įdiegto modulio buvimas negarantuoja, kad modulis bus įkeltas į branduolį paleidžiant. Su tuo susidūrėme, kai gavome šią klaidą paleisdami konteinerį su NAT naujame pagrindiniame kompiuteryje:

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?)

Problema buvo išspręsta pridėjus inicijavimą prie Ansible vaidmens naudojant modprobe modulį ir įkėlus jį paleidžiant OS naudojant 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'

Beje, stebulėje yra geras straipsnis, kuriame trumpai ir aiškiai aprašomi vieno ar kito ipv6 paleidimo docker programoje privalumai ir trūkumai.

Bet grįžkime prie pradžioje užduoto klausimo:
Kam reikalingas dirigentas, net jei pats orkestras gali groti?

Dabar visi įsivaizduoja, kaip žaisti mūsų komandoje:

  • sukurtas serverių „pilimo“ procesas,
  • paslaugų kūrimas ir diegimas yra vieningi.

Kyla pagrįstas klausimas – kaip efektyviai ir maksimaliai automatiškai diegti, atnaujinti ir valdyti savo paslaugas Docker konteineriuose?

Nepaisant to, kad kiekvienas orkestrantas žino savo partiją, jis gali susipainioti ir nukrypti nuo pirminės idėjos. Čia darome išvadą, kad be dirigento mūsų orkestras nerepetuos efektyviai ir negros nuosekliai. Dirigentas atsakingas už visus atlikimo parametrus, užtikrindamas, kad viską vienytų vienas tempas ir nuotaika.

Kaip gauti gerą laidininką su minimaliomis investicijomis?

Orkestravimo tema yra gana gerai išplėtota rinkoje. Bet pirmiausia pakalbėkime apie pagalbines priemones, kurios gali padėti dirigentui.

konsulas - sistema, kuri atlieka dvi pagrindines funkcijas:

  • paslaugos atradimas,
  • paskirstyta rakto vertės saugykla.

Mūsų orkestre konsulas bus atsakingas už paslaugų registravimą ir jų konfigūracijų saugojimą. Yra dvi registracijos parinktys:

  • Aktyvus yra tada, kai paslauga užsiregistruoja naudodama HTTP API;
  • Pasyvus – paslauga turi būti registruojama rankiniu būdu.

Vault yra saugykla, kuri standartizuoja ir suvienodina saugų paslapčių – slaptažodžių, sertifikatų – saugojimą ir tvarkymą.
Štai privalumai, kuriuos gausime naudodami šį įrankį:

  • Vienas centras paslapčių kūrimo ir saugojimo bei jų gyvavimo ciklo valdymo naudojant HTTP API.
  • Transit Secrets Engine – duomenų šifravimas ir iššifravimas jų neišsaugant. Galimybė perduoti duomenis šifruota forma nesaugiais ryšio kanalais.
  • Prieigos politika, kurią lengva konfigūruoti.
  • Prieigos prie paslapčių auditas.
  • Galimybė sukurti savo CA (sertifikavimo įstaigą), kad galėtumėte valdyti savarankiškai pasirašytus sertifikatus jūsų infrastruktūroje.

Atsižvelgiant į visus mūsų reikalavimus, dirigento vaidmeniui tiko du variantai - Kubernetes ir Nomad.

Kubernetes

Kiek straipsnių ir knygų jau parašyta apie jį (čia tokiaPavyzdžiui), yra pranešimų, kuriuos parašysiu trumpai - tai universalus kombainas, galintis beveik viską. Kaina už tai yra ta, kad sukurti ir prižiūrėti grupę Kubernetes ne visada lengva.

klajoklių

Įrankis iš HashiCorp, įmonės, žinomos dėl aukščiau minėto konsulo ir saugyklos.

Mes nustatėme, kad „Nomad“ yra gana lengviau įdiegti ir konfigūruoti nei „Kubernetes“. Vienas dvejetainis failas veikia tiek serverio, tiek kliento režimu. Tuo pačiu metu Nomad apima visą sąrašą užduočių, kurias norime išspręsti: klasterių valdymą, greitą planavimo priemonę, kelių duomenų centrų palaikymą. Be to, naudodamiesi konsulu ir saugykla, mes gauname glaudesnę integraciją savo paslaugų teikimui.

Kas šiuo metu vyksta:

  • paruošti serveriai konsului dislokuoti,
  • klajoklių klasterio konfigūracija bus įvesta į Consul, kurios pagalba klajoklis turėtų būti automatiškai dislokuotas,
  • Lygiagrečiai įdiegsime saugyklą paslaptims saugoti.

Klausimas publikai: ar verta tokioms užduotims samdyti dirigentą, ar orkestrui be jo sekasi? Pasakykite mums komentaruose, ką manote apie tai.

Prenumeruokite mūsų tinklaraštį ir palaikykite ryšį – netrukus papasakosime, kas galiausiai nutiko ir ar sukonfigūravome klajoklių grupę taip, kaip norėjome.

Užsukite į mūsų jaukią telegramos pokalbis, kur visada galite paklausti patarimo, padėti kolegoms ir tiesiog pabendrauti apie produktyvumo tyrimus ir kt.

Šaltinis: www.habr.com

Pirkite patikimą prieglobą svetainėms su DDoS apsauga, VPS VDS serveriais 🔥 Įsigykite patikimą svetainių talpinimą su DDoS apsauga, VPS VDS serveriais | ProHoster