Esituse orkester

VÀidetavalt ei oleks vale öelda, et parimad inimesed
leiavad rÔÔmu lÀbi kannatuste.
Ludwig van Beethoven

Esituse orkester

Mina olen Sergei, töötan Yandex.Money's jĂ”udlusuuringute meeskonnas. Tahaksin rÀÀkida teile loo meie teekonnast orkestreerimise kasutamise poole — kuidas me valisime tööriistu ja mida arvesse vĂ”tsime. KĂ”ik artiklis kirjeldatud sĂŒndmused toimuvad reaalajas, seega, kallid lugejad, jĂ€lgite olukorra arengut praktiliselt otse-eetris.

Miks on meil meeskonnas dirigeerija?

Kes on dirigeerija? Prantsuse sĂ”nast diriger — juhtima, suunama, juhtima — muusikamaailmas on see inimene, kes juhib ansamblimuusika harjutamist ja esitamist. Meie puhul tĂ€idavad seda rolli orkestreerimise ja automatiseerimise sĂŒsteemid.

Nende roll ei erine muusikas dirigeerija rollist — nad on vajalikud, et aidata meeskonda, suunata ja korraldada nende mĂ€ngu.

Tavaliselt omab meeskond teatud komplekti vĂ”imekusi — nimetame neid serveriteks, millel nad oma projekte ellu viivad.

LÀhteviis nende serverite saamiseks ja kasutamiseks on erinev. Siin on mÔned nÀited:

  • Meeskond esitab taotluse nĂ€iteks ekspluatrohvale grupile, et saada neilt ressursse, millel on kindlad parameetrid.
  • Ekspluateerimise grupp tagab vajaliku hulga — cloud vĂ”i bare metal ("paljas raud") — ja kohustub neid hooldama vastavalt SLA-le. Seadistamine toimub samuti ekspluateerimise grupi poolt.
  • Meeskond saab ainult cloud vĂ”i bare metal ressursse ekspluateerimise grupilt, seadistamine toimub nende enda jĂ”ududega.
  • Meeskond "soetab" ressursid iseseisvalt ja hooldab/seadistab need tĂ€ielikult iseseisvalt.

Meie meeskonnas kasutatakse servereid, mida tuleb hooldada — uuendada OS-i, installida uusi pakette jne.

Oleme need jaganud kahte pÔhiliiki:

  • tankigrupp,
  • teenindusgrupp.

Tankigrupp koosneb serveritest, milles on Yandex.Tank.

Teenindusgrupp sisaldab kĂ”ike, mis on seotud teenindamisega — need on erinevad teenused, mis toetavad vĂ€ljaandmise tsĂŒklit, genereerivad automaatseid aruandeid jne.

Ühel hetkel muutus selle kĂ”igega kĂ€sitsi hallata ja mĂ”tlesime automatiseerimisele, alates serverite 'tĂ€itmisest' kuni meie siseteenuse arendamise, paigaldamise ja kĂ€ivitamiseni.

Miks on vajalik dirigent, isegi kui orkester oskab ise mÀngida?

KĂŒsimuse lihtsustamiseks Ă”ppisime Ansible'i ja hakkasime 'tĂ€itma' meie kettaseadmeid, et olla vĂ€hem sĂ”ltuvad sĂŒsteemiadministraatoritest - see on kĂ”igile kasulik, me saame uusi oskusi ja vabastame administraatoreid osast tööst, millega neil on alati piisavalt tegemist. Me pĂŒĂŒdleme arengu poole vĂ€ljaspool oma eriala ja meeskonna autonoomiat, niipalju kui see on vĂ”imalik.

EttevÔttes on Ansible'i kasutamine juba ammu kehtestatud ja reguleeritud, seega suutsime oma lahenduse hÔlpsasti sellesse protsessi integreerida.

Praegu koosneb hostide tÀitmine kolmest Ansible'i rollist:

  • esimene roll installib operatsioonisĂŒsteemi,
  • teine rakendab hosti pĂ”hinĂ€htused, nagu LDAP-autorit.
  • ja kolmas paigaldab Docker-konteinerisse Yandex.Tanki ja sellega seotud sĂ”ltuvused.

Liigume teenuste juurde, mida me meeskonnas kasutame.

Oma ĂŒlesannete jaoks kasutame me vĂ”rdselt Kotlinit ja Pythoni ning veidi ka Golangi. Meie teenuste arenduse ja juurutamise ĂŒhtlustamiseks otsustasime need pakendada docker-konteineritesse. See annab programmeerimiskeele valiku vabaduse ning reguleerib samas rakenduse tarnimise ĂŒhtset formaati.

MÔned mÀrkused ipv6 kohta Dockeris

Osa teenustest, millega me suhtleme, on saadaval ainult ipv6 kaudu, seetÔttu pidime vÀlja selgitama, kuidas aktiivselt ipv6 vÔimaldada konteinerites.

Docker ametlike ipv6 dokumentide kohaselt aktiveeritakse ipv6, lisades parameetreid daemon.json faili:

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

Sel juhul peab teenusepakkuja andma ipv6 alamvÔrgu, mille kirjutate fixed-cidr-v6.
Kuid me valisime teise variandi — ipv6 NAT, ja siin on pĂ”hjused:

  • Praegu ei saa dockerit kasutada ainult ipv6. Iga konteineri globaalne suunatav aadress tĂ€hendab, et kĂ”ik portid (isegi mittetĂ€iendatud) on kĂ”ikidele avatud, kui ei rakendata tĂ€iendavat filtreerimist.
  • userland proxy portide avalikustamiseks,
  • iptables ainult ipv4 jaoks ipv6 NAT — see on.

docker-konteiner docker-konteiner, mis haldavad ip6tables reegleid iseseisvalt ja toimetavad neist uusi konteine lisades.

Selle lahenduse Ă”igeks toimimiseks oli vajalik teha veel mitmeid toiminguid. Oluline on algatada ip6table_nat sĂŒsteemis. Isegi kui moodul on sĂŒsteemis installitud, ei garanteeri see, et see laaditakse tuuma kĂ€ivitamisel. Kohtasime seda, kui saime jĂ€rgmist tĂ”rget, kĂ€ivitades konteineri NAT-iga uuel hostil:

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

Probleem lahendati pÀrast Ansible'i rolli lisamist koos algatamisega modprobe'i mooduli abil ja os. kÀivitamisel lineinfile abil:

- name: Lisa ip6table_nat moodul
 modprobe:
   name: ip6table_nat
   state: present
- name: Lisa ip6table_nat kÀivitamiseks
 lineinfile:
   path: /etc/modules
   line: 'ip6table_nat'

Muide, Habr'is on hea artikkel, mis lĂŒhidalt ja selgelt kirjeldab erinevate ipv6 töötamise meetodite eeliseid ja puudusi Docker'is.

Aga naaseme meie algse kĂŒsimuse juurde:
Miks on vajalik dirigent, isegi kui orkester oskab ise mÀngida?

NĂŒĂŒd kĂ”ik mĂ”istavad, kuidas meie meeskonnas mĂ€ngida:

  • serverite „veetmine“ protsess on loodud,
  • teenuste arendamine ja juurutamine on ĂŒhtlustatud.

TĂ”statub mĂ”istlik kĂŒsimus — kuidas efektiivselt ja vĂ”imalikult automatiselt juurutada, uuendada ja hallata meie teenuseid Docker-konteinerites?

Kuigi iga orkestri liige teab oma osa, vĂ”ib ta siiski eksida ja eemalduda algsest ideest. Siinkohal jĂ”uamegi jĂ€reldusele, et ilma dirigendita ei suuda meie orkester tĂ”husalt harjutada ja harmooniliselt mĂ€ngida. Dirigent vastutab kĂ”igi esitusparameetrite eest, et kĂ”ik kulgeks ĂŒhtse tempo ja meeleoluga.

Kuidas investeerida vÔimalikult vÀhe ja leida hea dirigent?

Orkestreerimise teema on turul hÀsti arenenud. Kuid kÔigepealt rÀÀgime abivahenditest, mis vÔivad dirigendile kasuks tulla.

Consul — sĂŒsteem, mis pakub kahte pĂ”hifunktsiooni:

  • teenuste avastamine (service discovery),
  • jaotatud vĂ”tme-vÀÀrtuse salvestamine.

Meie orkestris vastutab Consul teenuste registreerimise ja nende konfiguratsioonide salvestamise eest. Registreerimiseks on kaks varianti:

  • Aktiivne — see on siis, kui teenus registreerib end ise, kasutades HTTP API-d;
  • Passiivne – teenust tuleb kĂ€sitsi seadistada.

Vault on hoiuruum, mis standardiseerib ja ĂŒhtlustab turvalise sĂ€ilitamise ja töötamise saladustega – paroolid, sertifikaadid.
Siin on mÔned eelised, mida sellest tööriistast kasutamisel saame:

  • Üks sisu loomise ja saladuste sĂ€ilitamise keskus, mis haldab nende elutsĂŒklit lĂ€bi HTTP API.
  • Transit Secrets Engine – andmete krĂŒpteerimine ja dekrĂŒpteerimine ilma nende salvestamiseta. VĂ”imalus edastada andmeid krĂŒpteeritud kujul kaitsmata sidekanalite kaudu.
  • Kergesti seadistatavad juurdepÀÀsupoliitikad.
  • Saladustele juurdepÀÀsu audit.
  • VĂ”imalus luua oma CA (Certificate Authority) enda infrastruktuuris iseaegsete sertifikaatide haldamiseks.

Kuna kĂ”ik meie nĂ”uded arvesse vĂ”ttes on kaks varianti dirigeerijaks sobivad – Kubernetes ja Nomad.

Kubernetes

Kui palju artikleid ja raamatuid on juba selle kohta kirjutatud (siin selline, nĂ€iteks), on peetud kĂ”nesid, seega kirjutan lĂŒhidalt – see on universaalne masin, mis suudab praktiliselt kĂ”ike. Tasuda tuleb selle eest – mitte alati lihtne seadistamine ja Kubernetes'i klastri toetamine.

Nomad

Tööriista HashiCorpil, ettevĂ”ttel, mis on tuntud ĂŒlalmainitud consul ja vault'i poolest.

Nomad tundus meile oluliselt lihtsamini paigaldatav ja seadistatav kui Kubernetes. Üks binaarfail töötab nii serveri kui ka kliendi reĆŸiimis. Samuti katab Nomad kĂ”ik meie soovitud ĂŒlesanded: klastrihaldus, kiire planeerimine ja mitme andmekeskuse tugi. Pluss, kui kasutame Consulit ja Vaulti, saame tihedama integratsiooni meie teenuste orkestreerimiseks.

Praegu on töös:

  • serverite ettevalmistamine Consuli juurutamiseks,
  • Consulisse lisatakse nomadi klastrikonfiguratsioon, mille abil nomad tuleb automaatselt juurutada,
  • samal ajal hakkame installima Vaulti saladuste hoidmiseks.

KĂŒsimus pĂ€evakorras — kas on mĂ”ttekas luua orkestrator selliste ĂŒlesannete jaoks vĂ”i saab ka ilma selleta hĂ€sti hakkama? Jagage oma mĂ”tteid kommentaarides.

Liituge meie blogiga ja pĂŒsige kursis — varsti rÀÀgime, kuidas kĂ”ik vĂ€lja kukkus ja kas me seadistasime nomadi klastri nii, nagu tahtsime.

KĂŒlastage meie hubast Telegrami chatti, kus saate alati kĂŒsida nĂ”u, aidata kolleegidel ja lihtsalt arutada jĂ”udlusuuringute teemasid ning mitte ainult.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster