- CoreOS – moderní clusterovaný OS pro datová centra (1) – Úvod a instalace
- CoreOS – moderní clusterovaný OS pro datová centra (2) – Etcd, distribuovaný state
- CoreOS – moderní clusterovaný OS pro datová centra (3) – Etcd a konzistence
- CoreOS – moderní clusterovaný OS pro datová centra (4) – Fleet
- CoreOS – moderní clusterovaný OS pro datová centra (5) – pokročilý Fleet
- CoreOS – moderní clusterovaný OS pro datová centra (6) – je to Docker orchestrátor?
Architektura a hlavní vlastnosti
Nativní OS postavený na kontejnerech
CoreOS vznikl jako moderní Linux OS pro prostředí postavená na kontejnerech (Docker je přímo základní součástí OS, neinstaluje se). Základní myšlenkou je, že všechny vaše služby a aplikace neběží přímo v samotném OS, ale vždy v kontejneru (tedy mají explicitně definované návaznosti, které jsou součástí image kontejneru). Dále využívá principu oddělení konfigurace a vůbec celého stavu systému od OS i file systémů – využívá Etcd, distribuvanou Key-Value databázi, ve které se tyto informace udržují.
CoreOS může běžet v jedné instanci, ale jeho hlavní síla spočívá v clusteru. Nativní clustering je určitě jeho hlavním přínosem a tomu odpovídají i instalační možnosti. Při startování si OS načítá informace, které mu umožní se ihned začlenit do clusteru – typicky přes user-data cloud init soubory, které mu poskytne samotné prostředí (OpenStack, Vagrant a mnohé další).
Výsledkem je skupina operačních systémů, které se chovají jako jeden jediný. Tak například iniciační systém systemd, který známe z běžných OS, je tady k dispozici pro celý cluster. Typické architektury jsou:
Service discovery a sdílení stavu přes Etcd napříč clusterem
Tým CoreOS vyvinul distribuovanou Key-Value databázi Etcd, která je napsaná v jazyce Go a používaná i mimo CoreOS (například přední Platform-as-a-Service software Cloud Foundry včetně Helion ditribuce nebo kontejnerová orchestrace Kubernetes na ní staví). Jedná se o plně redundantní distribuovaný systém, kam si mohou aplikace zapisovat a sdílet informace o svém stavu a používat je například k objevování služeb, členů load-balancing clusterů apod. Díky možnosti využít striktně konzistentních volání a time-to-live vlastností se Etcd používá i pro volbu master člena aplikačních clusterů. Etcd je nativní součástí CoreOS a používá se pro samotný cluster systému a je současně k dispozici službám a aplikacím v kontejnerech pro sdílení stavu a informací.
Řízení spouštěných služeb přes Fleet napříč clusterem
Klasický Linux OS využívá iniciačního procesu jako je systemd. Ten slouží ke spouštění procesů a jejich životního cyklu. Systemd může například automaticky restartovat služby, které selžou. CoreOS vyvinul Fleet – iniciační systém pro celý cluster. V případě CoreOS jde nejčastěji o služby a aplikace ve formě Docker kontejneru. Fleet dokáže například spustit jednotlivou službu (typicky Docker kontejner) v clusteru – nemusíte řešit, na kterém konkrétním nodu se tak stane. Pokud node havaruje nebo je nutná jeho aktualizace (a restart), Fleet zajistí spuštění kontejneru na jiném nodu. Fleet podporuje i spuštění více instancí aplikace/kontejneru. Definujete kolik instancí (třeba web serveru) potřebujete a Fleet je spustí principem anti-affinity (tedy co nejdál od sebe – v jiných zónách dostupnosti nebo alespoň na jiných CoreOS hostitelých). Pokud některé instance společně s node zemřou, Fleet jejich počet sám doplní na požadovaný.
Tento princip je ideální kombinovat s Etcd pro discovery služeb. Tak například instance web serveru informace o sobě zaznamenají do Etcd, z kterého si může load-balancer přečíst na jaké adresy má balancovat uživatelský provoz.
Automatické a vratné aktualizace
Klasický Linux OS používá instalaci komponent správou balíčků (yum, apt-get). CoreOS volí jiný přístup. Základní OS je malý (něco málo přes 100MB) a bootuje velmi rychle. Klíčové ale je, že root partition je přísně read only a updatuje se pouze jako celek. Update jednotlivých balíčků může teoreticky uvést systém do nějakých mezistavů, při selhání je obtížné vrátit se zpět na začátek a vzniká složitý strom návazností. CoreOS využívá dvě root partition – aktivní a neaktivní. Aktualizace se nikdy nevrtá v aktivní partition, ale přepisuje tu nekativní. Při restartu CoreOS jednoduše tyto prohodí a nabootuje z nové. Protože celý OS je připraven CoreOS týmem, je vždy konzistentní a dobře otestovaný (neexistuje milion různých stavů daných kombinacemi balíčků). Současně se v případě potíží můžete jednoduše vrátit do původního stavu – stačí nabootovat z příslušné partition. CoreOS stahuje aktualizace automaticky a sám je instaluje na neaktivní partition (můžete si ovšem vybrat “channel”, tedy zda chcete aktualizace pouze v rámci stabilní větve nebo beta nebo alpha). Následně automaticky restartujte nody v clusteru, ale tak, že vždy otáčí jen jednu instanci najednou, takže služby mohou být pohodlně zajištěny ostatními nody v clusteru. Technicky se používá Omaha – open source verze aktualizačního procesu Google, který používají třeba u ChromeOS, Chrome, Earth apod.
Na tomto místě je zajímavé srovnání s dříve popisovaným (a novějším, tedy ne ještě tak používaným a prozkoušeným) RancherOS. CoreOS je malý nedělitelný OS, který se updatuje jako celek a nemá balíčky. RancherOS je ještě minimalističtější s tím, že non-kernel části systému běží v systémové instanci Dockeru (což umožňuje jejich bezpečné aktualizace bez vzniku provázaností) a teprve v něm běží uživatelský Docker pro vaše služby a aplikace. Oba přístupy jsou v tomto odlišné, ale mají stejný cíl – moderní OS pro svět kontejnerů. CoreOS je dál co se týče reálných zkušeností, ověřenosti a nativního clusteringu, koncept RancherOS je nový, ale rozhodně zajímavý.
CoreOS samotný je tedy updatován vždy jako celek. Samotné aplikace (třeba váš web server nebo databáze) nemají přímou návaznost na OS – v CoreOS se tohle všechno provozuje jako Docker kontejner, tedy artefakt, ve kterém jsou všechny jeho potřebné návaznosti. Update OS tak není provázaný s vaší aplikací – nevzniká riziko.
Konfigurační hodnoty systému nejsou v souborech (klasická instalace balíčků obnáší často aktualizace konfiguračních souborů), ale v Etcd (ditribuovaném Key-Value store). I tyto tedy nejsou svázané s vlastním OS a jeho aktualizací.
Instalace ve vašem notebooku
Pro účely seznámení s CoreOS si vytvoříme na notebooku malý 3-nodový cluster s využitím Vagrant a VirtualBox hypervisorem. Fungovat vám bude jak v prostředí Linux, tak Windows. Pokud jedete ve Windows, doporučuji si ještě zařídit git CLI pro Windows, případně curl (ale to není nutné).
Naklonujte si nejnovější Vagrant předpis a skočte do staženého adresáře.
git clone https://github.com/coreos/coreos-vagrant.git cd coreos-vagrant
Pro úvodní discovery (jak se naše nody najdou a zformují svoje vlastní Etcd) doporučuji využít cloudovou službu (ale není to nutné, můžete discovery provést přes vlastní globální Etcd instanci). Tato slouží jen pro sestavení clusteru, pak už cluster bude mít svojí vlastní Etcd databázi.
Získejte ID (URL) v cloudové službě (je to vlastně Etcd na Internetu) – jděte na stránku webovým prohlížečem nebo použijte cURL. Vrátí se vám URL pro discovery.
curl https://discovery.etcd.io/new https://discovery.etcd.io/64ffd8873ba61368f9663d01b8462326
V adresáři se nachází dva předvyplněné soubory s příponou .sample. Nejprve nakopírujte soubor config.rb.sample do souboru config.rb a změňte nastavení počtu instancí na 3 a odkomentujte update_channel na alpha verze (pro testování používejme nejnovější verze CoreOS).
v config.rb: $num_instances=3 $update_channel='alpha'
Nakopírujte soubor user-data.sample do souboru user-data a změňte v něm řádek s discovery za URL, kterou jste získali dříve.
coreos: etcd2: discovery: https://discovery.etcd.io/64ffd8873ba61368f9663d01b8462326
Vagrant stáhne příslušné image, nastaví síť a nastartujte 3 nody, které se automaticky začlení do clusteru.
Ověřte, že jsou vidět.
vagrant status Current machine states: core-01 running (virtualbox) core-02 running (virtualbox) core-03 running (virtualbox) This environment represents multiple VMs. The VMs are all listed above with their current state. For more information about a specific VM, run `vagrant status NAME`.
Vagrant vytvořil i všechny potřebné SSH klíče, takže nalogovat se do VM můžete velmi jednoduše.
vagrant ssh core-01 Last login: Tue Mar 29 06:28:34 2016 from 10.0.2.2 CoreOS alpha (1000.0.0) core@core-01 ~ $
Tím máme pro dnešek hotovo – máme funkčí CoreOS cluster. V příštích dílech začneme zkoušet některé jeho vlastnosti.