VÀhe on tÔenÀoline, et oleks vale öelda, et parimad inimesed
leidnud rÔÔmu kannatuste kaudu.
Ludwig van Beethoven

Mina olen Sergei, töötan Yandex.Money's jĂ”udlusuuringute meeskonnas. Soovin rÀÀkida teile loo algusest meie teekonnast orkestreerimise kasutusele vĂ”tmisel â kuidas me valisime tööriistu ja mida me seejuures arvesse vĂ”tsime. KĂ”ik artikliesitatud sĂŒndmused toimuvad reaalajas, seega, kallid lugejad, saate jĂ€lgida olukorra arengut peaaegu otse-eetris.
Miks meil on tiimis dirigent?
Kes on siis dirigent? Prantsuse keelest diriger â juhtima, suunama, korraldama â muusika maailmas on see inimene, kes juhib ansambli muusika harjutamist ja esitust. Meie puhul on selle asemel sĂŒsteemid orkestreerimise ja automatiseerimise.
Nende roll ei erine muusika dirigendi rollist â nad on vajalikud, et aidata meeskonda, suunata ja korraldada nende mĂ€ngu.
Tavaliselt on meeskonnal teatud vĂ”imekuste kogu â nimetame neid serveriteks, millel nad oma projekte ellu viivad.
LÀhenemised nende serverite hankimisele ja kasutamisele on erinevad. Siin on mÔned nÀited:
- Meeskond esitab taotluse, nÀiteks ekspluatatsioonigruppile, et anda neile ressursse teatud parameetritega.
- Ekspluatatsioonigrupp pakub neile vajalikku hulka â cloud vĂ”i bare metal (âpuhta raudvaraâ) â ja kohustub neid SLA kohaselt hooldama. Konfiguratsioon tehakse samuti ekspluatatsioonigruppi kuuluvate isikute poolt.
- Meeskond saab ekspluatatsioonigruppilt ainult cloud vÔi bare metal ressursse, konfiguratsiooni teevad nad ise.
- Meeskond ise âostabâ ressursid ja hooldab/konfigureerib need tĂ€ielikult iseseisvalt.
Meie meeskonnas kasutatakse servereid, mida tuleb hooldada â operatsioonisĂŒsteemi vĂ€rskendamine, uute pakettide installimine jne.
Oleme need jaganud kahte pÔhiliiki:
- tankigrupi,
- teenindusgrupi.
Tankigrupp koosneb hostidest Yandex.Tankiga.
Teenindusgrupp sisaldab kĂ”ike, mis on seotud hooldusega â see on erinevad teenused, mis toetavad vĂ€ljaande elutsĂŒklit, automaatsete raportite genereerimist jne.
Ăhel hetkel muutus selle kĂ”ik kĂ€sitsi haldamine ebamugavaks ja me mĂ”tlesime protsessi automatiseerimisele, alustades serverite 'tĂ€itmisest' ja lĂ”petades meie siseteenuse arendamise, ĂŒlesseadmise ja kĂ€ivitamisega.
Miks on dirigent vajalik, isegi kui orkester oskab ise mÀngida?
Alguses Ă”ppisime Ansible'i ja alustasime oma bare metal serverite 'tĂ€itmist', et olla vĂ€hem sĂ”ltuvad sĂŒsteemiadministraatoritest â see toob kasu kĂ”igile, me saame uusi oskusi ja vabastame administraatoreid osa töödest, millega neil on niigi palju tegemist. Me pĂŒĂŒdleme arengu poole oma spetsialiteedist vĂ€ljaspool ja tĂ€helepanu sujuvusele meeskonnas, kuivĂ”rd see on vĂ”imalik.
Meie ettevÔttes on Ansible'i kasutamine juba piisavalt kaua seadistatud ja reguleeritud, seega suutsime kergesti oma lahenduse sellesse protsessi integreerida.
Praegu koosneb hostide tÀitmine kolmest Ansible'i rollist:
- esimene roll ĂŒtleb operatsioonisĂŒsteemi installima;
- teine rakendab hosti pÔhiseaded, nÀiteks LDAP-autentimise;
- ja kolmas installib Yandex.Tanki docker-konteinerisse ja sellega seotud sÔltuvused.
Liigume edasi teenustele, mida me meeskonnas kasutame.
Oma ĂŒlesannete jaoks kasutame vĂ”rdselt Kotlin'i ja Python'it, ning natuke ka Golang'i. Et ĂŒhte moodi teha arendust ja meie teenuste juurutamist, otsustasime pakkida need docker-konteineritesse. See annab programmeerimiskeele valikul vabaduse ja samal ajal reguleerib meie rakenduse ĂŒhtset tarnimisvormi.
VÀike mÀrkus ipv6 kohta Docker'is
MÔned teenused, millega me suhtleme, on kÀttesaadavad ainult ipv6 kaudu, seega pidime vÀlja selgitama, kuidas konteineritele ipv6 seadistada.
Dokumentatsiooni kohaselt ipv6 ametlikul Docker'i veebilehel, lĂŒlitatakse ipv6 sisse, lisades valikud daemon.json faili:
{
"ipv6": true,
"fixed-cidr-v6": "2001:db8:1::/64"
}Sellega peab teenusepakkuja andma ipv6 alamvÔrgu, mille sa kirjutad fixed-cidr-v6.
Kuid me valisime teise variandi â ipv6 NAT, ja siin on miks:
- Praegu ei saa Docker'it ainult ipv6.
- Iga konteineri globaalne marsruuteerimise aadress tÀhendab, et kÔik portid (isegi avaldatud) on kÀttesaadavad kÔigile, kui tÀiendavat filtreerimist ei tehta.
- userland proxy portide avaldamiseks, .
ipv6 NAT â see on , mis juhendab ise ip6tables reegleid ja muudab neid uue konteineri lisamisel.
Kuna see lahendus pidi Ă”igesti töötama, tuli teha veel mitmeid toiminguid. Oluline on sĂŒsteemis initsialiseerida ip6table_nat. Mooduli olemasolu sĂŒsteemis ei garanteeri, et kĂ€ivitamisel laaditakse moodul kerneli. Me kohtusime selle probleemiga, kui saime sellise vea konteineri kĂ€ivitamisel NAT-iga vĂ€rskes hostis:
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, lisades Ansible'i rolli initsialiseerimise modprobe mooduliga ja laadimise kÀivitamise ajal lineinfile abil:
- name: Lisada ip6table_nat moodul
modprobe:
name: ip6table_nat
state: present
- name: Lisada ip6table_nat kÀivitamisele
lineinfile:
path: /etc/modules
line: 'ip6table_nat'Muide, Habr's on hea , mis selgelt ja lĂŒhidalt kirjeldab eri meetodite eeliseid ja puudusi ipv6 töötamiseks dockeris.
Kuid naaseme meie algse kĂŒsimuse juurde:
Miks on dirigent vajalik, isegi kui orkester oskab ise mÀngida?
NĂŒĂŒd on kĂ”ik teadlikud, kuidas meie meeskonnas mĂ€ngida:
- serverite «sisetamise» protsess on loodud,
- teenuste arendamine ja juurutamine on ĂŒhtlustatud.
Tuleb mĂ”istlik kĂŒsimus â kuidas tĂ”husalt ja vĂ”imalikult automatiseeritult juurutada, uuendada ja hallata meie teenuseid docker-konteinerites?
Kuigi iga orkestri liige teab oma osa, vĂ”ib ta eksida ja kaugemale minna algsest ideest. Siin jĂ”uamegi arusaamale, et ilma dirigendita ei saa meie orkester tĂ”husalt harjutada ja harmooniliselt mĂ€ngida. Dirigent vastutab kĂ”ikide esitusparameetrite eest, et kĂ”ik oleks ĂŒhise tempo ja meeleoluga ĂŒhendatud.
Kuidas saada head dirigenti minimaalse investeeringuga?
Orkestreerimise teema on turul piisavalt hÀsti arenenud. Kuid alustame 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. On kaks registreerimise vÔimalust:
- Aktiivne â see on, kui teenus registreerib end ise, kasutades HTTP API-d;
- Passiivne â teenus tuleb registreerida kĂ€sitsi.
Vault on turvaline salvestuslahendus, mis standardiseerib ja ĂŒhtlustab saladuste â paroolide, sertifikaatide â turvalist hoidmist ja töötlemist.
Siin on eelised, mida me selle tööriista kasutamisel saavutame:
- Ăhtne saladuste loomise ja salvestamise keskus, nende elutsĂŒkli haldamine HTTP API kaudu.
- Transit Secrets Engine â andmete krĂŒpteerimine ja dekrĂŒpteerimine ilma nende salvestamiseta. VĂ”imalus edastada andmeid krĂŒpteeritud kujul kaitsmata sidekanalitel.
- Lihtsalt seadistatavad juurdepÀÀsu poliitikad.
- Saladuste juurdepÀÀsu auditeerimine.
- VÔimalus luua oma CA (Certificate Authority), et hallata enda allkirjastatud sertifikaate oma infrastruktuuris.
Kuna arvestasime kĂ”iki meie nĂ”udeid, sobis dirigendiks kaks varianti â Kubernetes ja Nomad.
Kubernetes
Kui palju sellest on juba kirjutatud artikleid ja raamatuid (nĂ€iteks ), rÀÀgitud ettekandeid, et ma kirjutan lĂŒhidalt â see on universaalne kombain, mis suudab peaaegu kĂ”ike. Hind selle eest on see, et Kubernetes'e klastrite seadistamine ja haldamine ei ole alati lihtne.
Nomad
on HashiCorpi toode, ettevÔtte, mis on tuntud eelnevalt mainitud consul'i ja vault'i poolest.
Nomad tundus meile paigaldamise ja seadistamise osas piisavalt lihtne vĂ”rreldes Kubernetesega. Ăks binaarfail töötab nii serveri kui ka kliendi reĆŸiimis. Samuti katab Nomad kĂ”ik ĂŒlesanded, mida me soovime, et ta lahendaks: klastrihalduse, kiire planeerimise, multidatacenter toe. Pluss, kasutades consul'i ja vault'i, saame tihedama integreerimise meie teenuste orkestreerimiseks.
Praegu töös on:
- valmistatud serverid Consuli juurutamiseks,
- Consuli salvestatakse Nomadi klastri konfiguratsioon, mille abil peaks nomad automaatselt juurutama,
- samaaegselt seadistame vault'i saladuste talletamiseks.
KĂŒsimus saali â kas on mĂ”tet sellisteks ĂŒlesanneteks dirigent luua vĂ”i toimib orkestreerimine ka ilma selleta hĂ€sti? Jagage kommentaarides, mida te sellest arvate.
Liituge meie blogiga ja pĂŒsige kursis â peagi rÀÀgime, kuidas meil lĂ€ks ja kas me suutsime Nomadi klastrit seadistada nii nagu soovisime.
Tulge meie mĂ”nusasse , kus vĂ”ite alati kĂŒsida nĂ”u, aidata kolleegide ja lihtsalt arutada tootlikkuse uuringute ja muude teemade ĂŒle.
Allikas: habr.com
