Esitlusorkester

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

Esitlusorkester

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 kasutada 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, iptables ainult ipv4 jaoks.

ipv6 NAT — see on docker-konteiner, 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 artikkel, 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.

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. 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 selline), 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

Tööriist 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 Telegrami gruppi, kus vĂ”ite alati kĂŒsida nĂ”u, aidata kolleegide ja lihtsalt arutada tootlikkuse uuringute ja muude teemade ĂŒle.

Allikas: habr.com

Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega veebisaitidele, VPS VDS serverid - ProHoster