A teljesítmény zenekara

Aligha lenne helytelen azt mondani, hogy az emberek legjobbjai
örömre lelnek a szenvedés révén.
Ludwig van Beethoven

A teljesítmény zenekara

Én Szergej vagyok, a Yandex.Pénz csapatában dolgozom, amely a teljesítménykutatásért felel. Szeretném elmesélni nektek történetünk kezdetét az orkestrálás használatának folyamatáról – arról, hogyan választottuk az eszközöket és mit vettünk figyelembe. Minden esemény a cikkben valós időben zajlik, így kedves olvasók, gyakorlatilag élő közvetítés keretében követhetitek a történéseket.

Miért van szükségünk karmesterre a csapatban?

Ki is az a karmester? A francia diriger szóból ered – irányítani, vezetni, felügyelni –, a zene világában ez a személy az, aki vezeti az együttes zenei gyakorlását és előadását. A mi esetünkben ezt a szerepet az orkestrációs és automatizálási rendszerek töltik be.

Szerepük semmiben sem különbözik a karmester szerepétől a zenében – a csapatnak azért van szüksége rájuk, hogy segítsenek, irányítsák és szervezzék a játékukat.

Általában a csapat rendelkezik egy bizonyos kapacitással – nevezzük őket szervereknek, amelyeken megvalósítják projektjeiket.

A szerverek beszerzésének és működtetésének megközelítése változatos. Íme néhány példa:

  • A csapat például kérdést intéz a működtetések csoportjához, hogy biztosítsanak számukra erőforrásokat bizonyos paraméterekkel.
  • A működtetési csoport a szükséges mennyiséget biztosítja számukra – cloud vagy bare metal (»meztelen vas«) – és vállalja, hogy azokat a megfelelő állapotban tartja az SLA szerint. A konfigurálást is ez a csoport végzi.
  • A csapat csak cloud vagy bare metal erőforrásokat kap a működtetési csoporttól, a konfigurálást saját maguk végzik.
  • A csapat saját magának »vásárolja« meg az erőforrásokat, és teljesen önállóan tartja karban/konfigurálja őket.

A csapatunkban olyan szerverek találhatók, amelyeket karban kell tartani – operációs rendszert frissíteni, új csomagokat telepíteni stb.

Számunkra két fő típust különítettünk el:

  • tankcsoport,
  • szolgáltató csoport.

A tankcsoport Yandex.Tankkal rendelkező hosztokból áll.

A szolgáltató csoport mindennel foglalkozik, ami a fenntartással kapcsolatos – ez különféle szolgáltatások a kiadási ciklus támogatásának, automatikus jelentések generálásának stb. biztosítása érdekében.

Egy idő után kényelmetlenné vált mindezt kézi módszerrel kezelni, ezért gondolkodni kezdtünk a folyamat automatizálásán, kezdve a szerverek "telepítésétől" egészen a belső szolgáltatásunk fejlesztéséig, kiadásáig és elindításáig.

Miért van szükség karmesterre, még ha a zenekar magától is tud játszani?

Először elsajátítottuk az Ansible-t, és elkezdtük "telepíteni" a bare metal szervereinket, hogy kevésbé legyünk függővé a rendszergazdáktól – ezzel mindenki nyer, új készségekre teszünk szert, és megszabadítjuk a rendszergazdákat egy résznyi munkától, amire nekik is mindig van elég dolguk. Törekszünk a fejlődésre, a szakmánkon kívüli tanulásra és a csapat autonómiájára, amennyire lehetséges.

A cégnél az Ansible-lal való munka már elegendő ideje be van állítva és szabályozva, ezért könnyen be tudtuk integrálni a megoldásunkat ebbe a folyamatba.

Jelenleg a hosztok telepítése három Ansible szerepből áll:

  • az első szerep telepíti az operációs rendszert,
  • a második végrehajtja az alap beállításokat a hoszton, például az LDAP-azonosítást
  • és a harmadik telepíti a Yandex.Tankot és a kapcsolódó függőségeket docker-konténerben.

Térjünk át azokkal a szolgáltatásokra, amelyeket a csapatunkon belül használunk.

Feladatainkhoz egyenlő arányban használjuk a Kotlin-t és a Python-t, valamint egy kicsit a Golang-ot is. Annak érdekében, hogy egységesítsük a szolgáltatásaink fejlesztését és telepítését, úgy döntöttünk, hogy docker-konténerekbe csomagoljuk őket. Ez lehetőséget ad a programozási nyelv szabad megválasztására, miközben egy egységes alkalmazásforma létrehozását is szabályozza.

Kis megjegyzés az ipv6-ról a Dockerben

Néhány szolgáltatás, amellyel kapcsolatba lépünk, csak ipv6-on érhető el, ezért meg kellett értenünk, hogyan lehet ipv6-ot létrehozni a konténerek számára.

A Docker hivatalos weboldalán található ipv6 dokumentáció szerint az ipv6 engedélyezéséhez paramétereket kell hozzáadni a daemon.json fájlhoz:

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

Eközben a szolgáltatónak ki kell adnia egy ipv6 alhálózatot, amelyet a fixed-cidr-v6-ban kell megadnod.
Azonban mi egy másik megoldást választottunk – ipv6 NAT-ot, és ez az oka:

  • Jelenleg a Docker-t nem lehet használni csak ipv6-tal.
  • A globálisan irányítható címek megléte minden egyes konténerben azt jelenti, hogy minden port (akár publikálatlan) elérhetővé válik mindenki számára, ha nem végeznek el további szűrést.
  • userland proxy a portok publikálásához, iptables csak ipv4-hez.

ipv6 NAT – ez a docker-konténer, amely automatikusan kezeli az ip6tables szabályait és azokat módosítja új konténer hozzáadásakor.

Ahhoz, hogy ez a megoldás megfelelően működjön, még számos manipulációt el kellett végezni. Kötelező inicializálni az ip6table_nat-ot a rendszerben. A telepített modul megléte nem garantálja, hogy az indításkor a modul betöltődik a kernelbe. Ezzel akkor találkoztunk, amikor ezt a hibát kaptuk egy NAT konténer indításakor egy friss hoston:

2019/01/22 14:59:54 fut: [/sbin/ip6tables -t filter -N DOCKER --wait]: kilépési állapot 3: modprobe: nem lehet megváltoztatni a könyvtárat ' /lib/modules': Nincs ilyen fájl vagy könyvtár
ip6tables v1.6.2: nem lehet inicializálni az ip6tables táblát `filter': A tábla nem létezik (lehet, hogy szükséged van insmod-ra?)

A probléma megoldódott, miután hozzáadtuk az Ansible szerepkörhöz az inicializálást a modprobe modullal és az OS indításakor a lineinfile segítségével:

- név: ip6table_nat modul hozzáadása
 modprobe:
   név: ip6table_nat
   állapot: jelen
- név: ip6table_nat hozzáadása a rendszerindításhoz
 lineinfile:
   útvonal: /etc/modules
   sor: 'ip6table_nat'

Egyébként a Habr-on van egy jó cikk, amely röviden és világosan leírja az ipv6 működésének különböző módszereinek előnyeit és hátrányait a dockeren belül.

De térjünk vissza az elején feltett kérdésünkhöz:
Miért van szükség karmesterre, még ha a zenekar magától is tud játszani?

Most mindenki tudja, hogyan kell játszani a csapatunkban:

  • a szerverek 'beöntési' folyamata elkészült,
  • a szolgáltatások fejlesztése és telepítése egységesítve van.

Felmerül a jogos kérdés — hogyan lehet hatékonyan és a lehető legautomatikusabban telepíteni, frissíteni, ellenőrizni a szolgáltatásainkat docker konténerekben?

Bár a zenekar minden tagja tudja a saját részét, eltérhet az eredeti elképzeléstől. Itt jutunk el ahhoz, hogy karmester nélkül a zenekarunk nem tud hatékonyan próbálni és összhangban játszani. A karmester felelős az előadás minden paraméteréért, hogy minden egy közös tempóval és hangulattal legyen összehangolva.

Hogyan szerezhetünk jó karmestert minimális befektetéssel?

A zenekarokkal kapcsolatos téma a piacon jól kifejlődött. De először beszéljünk azokról az segédeszközökről, amelyek segíthetnek a karmesternek.

Consul — egy rendszer, amely két fő funkciót biztosít:

  • szolgáltatások felfedezése (service discovery),
  • elOsztott kulcs-érték tároló.

A mi zenekarunkban a Consul fog felelni a szolgáltatások regisztrálásáért és a konfigurációik tárolásáért. Két lehetőség van a regisztrációra:

  • Aktív — amikor a szolgáltatás saját magát regisztrálja HTTP API használatával;
  • Passzív — a szolgáltatást manuálisan kell bejegyezni.

A Vault egy tároló, amely standardizálja és egységesíti a titkok — például jelszavak és tanúsítványok — biztonságos tárolását és kezelését.
Íme az előnyök, amelyeket ezzel az eszközzel nyerhetünk:

  • Egyetlen titok létrehozási és tárolási központ, amely lehetővé teszi a titkok életciklusának kezelését HTTP API-n keresztül.
  • A Transit Secrets Engine lehetővé teszi az adatok titkosítását és visszafejtését anélkül, hogy azokat tárolnánk. Lehetőség arra, hogy az adatokat titkosítva küldjük el védtelen kommunikációs csatornákon.
  • Kényelmesen beállítható hozzáférési irányelvek.
  • A titkokhoz való hozzáférés auditálása.
  • Lehetőség saját CA (Tanúsítványhatóság) létrehozására, amely lehetővé teszi az önaláírású tanúsítványok kezelését a saját infrastruktúrán belül.

Figyelembe véve minden követelményünket, két lehetőség vált be a vezérlő szerepére: a Kubernetes és a Nomad.

Kubernetes

Már mennyi cikk és könyv született róla (itt például, sok mondat hangzott el, így röviden összefoglalom — ez egy univerzális kombájn, amely szinte mindenre képes. Az ára — hogy a Kubernetes klaszterének beállítása és fenntartása nem mindig egyszerű.

A Nomad

Eszköz a HashiCorp-tól, a fent említett consul és vault gyártójától.

A Nomad egyszerűbbnek tűnt az installálás és beállítás szempontjából, mint a Kubernetes. Egyetlen bináris fájl működik szerverként és kliensként is. Ráadásul a Nomad lefedi mindazokat a feladatokat, amelyeket meg szeretnénk oldani: klaszterkezelés, gyors ütemező és multináci támogatás. Továbbá a consul és vault használatával szorosabb integrációt kapunk a szolgáltatásaink orchestration-jához.

Jelenleg folyamatban van:

  • szerverek előkészítése a Consul telepítésére,
  • a Consulba bekerül a nomad klaszter konfigurációja, amellyel a nomad automatikusan telepítve lesz,
  • párhuzamosan telepítjük a vaultot a titkok tárolására.

Kérdés a teremben — érdemes-e vezérlőért folyamodnunk az ilyen feladatokhoz, vagy az orchestration jól működik nélküle? Mondjátok el a véleményeteket a megjegyzésekben.

Iratkozzatok fel a blogunkra, és tartsatok velünk — hamarosan beszámolunk arról, hogy sikerült-e beállítanunk a nomad klasztert a kívánt módon.

Látogassatok el a barátságos telegram-csatornánkra,ahol mindig kérhettek tanácsot, segíthettek kollégáknak és egyszerűen beszélgethettek a teljesítménykutatásokról és más témákról.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster