Orchestrální výkon

Těžko by se dalo říct, že ti nejlepší mezi námi
nacházejí radost prostřednictvím utrpení.
Ludwig van Beethoven

Orchestrální výkon

Jsem Sergey, pracuji v Yandex.Money na týmu pro výkonová zkoumání. Chci vám vyprávět začátek příběhu o naší cestě k využití orchestrace — jak jsme vybírali nástroje a co jsme při tom zohledňovali. Všechny události v článku probíhají v reálném čase, takže vy, drazí čtenáři, sledujete vývoj situace téměř v přímém přenosu.

Proč potřebujeme dirigenta v týmu?

Kdo vlastně je dirigent? Z francouzského diriger — řídit, směřovat, vést — ve světě hudby je to osoba, vedoucí přípravy a výkonu souborové hudby. V našem případě tuto roli hrají systémy orchestrace a automatizace.

Jejich úloha se nijak neliší od role dirigenta v hudbě — jsou potřební, aby pomáhali týmu, směřovali a organizovali jeho hru.

Obvykle má tým určitou sadu kapacit — nazvěme je servery, na kterých realizují své projekty.

Přístup k získání a provozování těchto serverů je různorodý. Několik příkladů:

  • Tým podá žádost, například k provozní skupině, o poskytnutí zdrojů s určitými parametry.
  • Provozní skupina jim poskytne potřebné množství — cloud nebo bare metal („holé železo“) — a zavazuje se je udržovat v patřičném stavu podle SLA. Nastavení provádí také provozní skupina.
  • Tým obdrží pouze zdroje cloud nebo bare metal od provozní skupiny, nastavení provádí vlastními silami.
  • Tým si sám „nakupuje“ zdroje a kompletně je udržuje/nastavuje sám.

V našem týmu se používají servery, které je třeba udržovat — aktualizovat OS, instalovat nové balíčky atd.

Pro sebe jsme je rozlišili do dvou hlavních typů:

  • tanková skupina,
  • servisní skupina.

Tanková skupina se skládá z hostitelů s Yandex.Tankem.

Servisní skupina zahrnuje vše, co souvisí s údržbou — to jsou různé služby na podporu životního cyklu vydání, generování automatických reportů atd.

V jednom okamžiku se stalo nepohodlné spravovat to všechno ručně, a tak jsme začali přemýšlet o automatizaci celého procesu, počínaje „naléváním“ serverů a konče vývojem, nasazením a spuštěním našeho interního servisu.

Proč je dirigent potřebný, i když orchestr umí hrát sám?

Nejprve jsme se naučili Ansible a začali „nalévat“ naše servery bare metal, abychom byli méně závislí na systémových administrátorech — zde vyhráváme všichni, získáváme nové dovednosti a osvobozujeme administrátory od části práce, které mají vždy dost. Snažíme se o rozvoj mimo naši specializaci a týmu co nejvíce autonomie.

V naší společnosti je práce s Ansible již dávno nastavena a regulována, takže jsme snadno začlenili naše řešení do tohoto procesu.

Dnes se nalévání hostitelů skládá ze tří rolí Ansible:

  • první role instaluje operační systém,
  • druhá provádí základní nastavení pro hostitele, například LDAP autorizaci,
  • a třetí instalační skript do docker kontejneru Yandex.Tank a související závislosti.

Přejděme k službám, které uvnitř týmu používáme.

Pro naše úkoly používáme srovnatelně Kotlin a Python, a také o něco málo Golang. Abychom sjednotili vývoj a nasazení našich služeb, rozhodli jsme se je balit do docker kontejnerů. To poskytuje svobodu volby programovacího jazyka a zároveň reguluje jednotný formát dodání našeho aplikace.

Malá poznámka o ipv6 v Dockeru

Část služeb, se kterými interagujeme, je dostupná pouze přes ipv6, a proto jsme se museli naučit, jak udělat ipv6 pro kontejnery.

Podle dokumentace k ipv6 na oficiálních stránkách Dockeru se ipv6 aktivuje přidáním parametrů do daemon.json:

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

Přičemž poskytovatel musí vydat podsíť ipv6, kterou zapíšete do fixed-cidr-v6.
My jsme si však vybrali jinou možnost — ipv6 NAT, a to z následujících důvodů:

  • Nyní docker nelze používat pouze s ipv6.
  • Přítomnost globálně směrovatelné adresy v každém kontejneru znamená, že všechny porty (i nepublikované) jsou dostupné všem, pokud neprobíhá dodatečná filtraci.
  • use-userland proxy pro publikaci portů, iptables pouze pro ipv4.

ipv6 NAT je docker kontejner, který sám spravuje pravidla v ip6tables a upravuje je při přidání nového kontejneru.

Aby toto řešení správně fungovalo, bylo nezbytné provést ještě řadu dalších manipulací. Je nutné inicializovat ip6table_nat v systému. Pouhá přítomnost nainstalovaného modulu v systému nezaručuje jeho načtení do jádra při spuštění. S tím jsme se setkali, když jsme při spuštění kontejneru s NAT na novém hostu obdrželi tuto chybu:

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

Problém byl vyřešen po přidání inicializace do role Ansible pomocí modulu modprobe a načtení při startu OS pomocí lineinfile:

- name: Přidat modul ip6table_nat
 modprobe:
   name: ip6table_nat
   state: present
- name: Přidat ip6table_nat do boot
 lineinfile:
   path: /etc/modules
   line: 'ip6table_nat'

Mimochodem, na Habr je dobrý neaktuální statistika, který stručně a jasně popisuje výhody a nevýhody různých metod pro práci s ipv6 v dockeru.

Ale vraťme se k naší otázce, kterou jsme položili na začátku:
Proč je dirigent potřebný, i když orchestr umí hrát sám?

Teď už si všichni představují, jak hrát v našem týmu:

  • proces „nalévání“ serverů je vytvořen,
  • vývoj a nasazení služeb je unified.

Vzniká opodstatněná otázka — jak efektivně a maximálně automatizovaně nasazovat, aktualizovat, monitorovat naše služby v docker kontejnerech?

I když každý člen orchestru zná svou partii, může se splést, odstoupit od původní myšlenky. Zde se dostáváme k tomu, že bez dirigenta náš orchestr nebude efektivně zkoušet a hrát v synchronizaci. Dirigent odpovídá za všechny parametry provedení, za to, aby vše bylo spojeno jednotným tempem a náladou.

Jak s minimálními náklady získat dobrého dirigenta?

Téma orchestrace je na trhu dostatečně rozvinuté. Ale nejprve si promluvíme o pomocných nástrojích, které mohou dirigentovi pomoci.

Consul — systém, který poskytuje dvě hlavní funkce:

  • objevování služeb (service discovery),
  • distribuované úložiště klíč-hodnota.

V našem orchestru bude Consul odpovědný za registraci služeb a ukládání jejich konfigurací. Existují dvě možnosti registrace:

  • Aktivní — to je, když se služba registruje sama pomocí HTTP API;
  • Pasivní — službu je nutné zapsat ručně.

Vault — je úložiště, které standardizuje a unifikuje bezpečné uchovávání a práci s tajemstvími — hesla, certifikáty.
Zde jsou výhody, které získáme používáním tohoto nástroje:

  • Jednotné centrum pro vytváření a uchovávání tajemství, správa jejich životního cyklu prostřednictvím HTTP API.
  • Transit Secrets Engine — šifrování-dešifrování dat bez jejich uchovávání. Možnost přenosu dat zašifrovaně po nezabezpečených komunikačních kanálech.
  • Politiky přístupu, které lze pohodlně nastavit.
  • Audit přístupu k tajemstvím.
  • Možnost vytvoření vlastní CA (Certifikační autority) pro správu vlastních podepsaných certifikátů uvnitř vlastní infrastruktury.

Celkově odpovídají dvě varianty — Kubernetes a Nomad — našim požadavkům na roli dirigenta.

Kubernetes

Kolik článků a knih o něm již bylo napsáno (tady takové, například), bylo řečeno ve zprávách, že napíšu stručně — je to univerzální kombajn, který umí prakticky vše. Cena za to — ne vždy jednoduché nastavení a podpora klastru na Kubernetes.

Nomad

Náklad od HashiCorp, společnosti známé zmiňovanými consul a vault.

Nomad nám přišel dost jednoduchý na instalaci a nastavení, ve srovnání s Kubernetes. Jeden binární soubor funguje jak v režimu serveru, tak klienta. Nomad pokrývá celý seznam úloh, které chceme, aby vyřešil: správa klastru, rychlý plánovač, podpora pro multidatacentra. Navíc použitím consul a vault získáváme těsnější integraci pro orchestrace našich služeb.

Co se nyní připravuje:

  • připravili jsme servery pro nasazení Consul,
  • konfigurace clustru nomad bude zanesena do Consul, prostřednictvím které by měl být nomad nasazen automaticky,
  • současně budeme instalovat vault pro uchovávání tajemství.

Otázka do diskuze — má smysl mít dirigenta pro takové úkoly, nebo je orchestrace bez něj v pořádku? Napište v komentářích, co si o tom myslíte.

Přihlaste se k našemu blogu a zůstaňte v obraze — brzy vám řekneme, co se nakonec stalo, a jestli jsme nastavili klastr nomad tak, jak jsme chtěli.

Navštivte náš útulný telegramový chat, kde vždy můžete požádat o radu, pomoci kolegům a prostě si popovídat o výzkumu výkonu a nejen o tom.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster