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

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 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 .
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 , 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.
â 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 , 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
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 , kus saate alati kĂŒsida nĂ”u, aidata kolleegidel ja lihtsalt arutada jĂ”udlusuuringute teemasid ning mitte ainult.
Allikas: habr.com
