Programování

RancherOS: Jednodušší Linux pro milovníky Dockeru

Stejně jako různé distribuce serverů a stolních počítačů se systémem Linux i kontejnerově orientované distribuce Linuxu kombinují různé projekty a komponenty a vytvářejí tak kompletní infrastrukturu kontejnerů. Tyto distribuce obecně kombinují minimální jádro OS, rámec orchestrace a ekosystém kontejnerových služeb. RancherOS se hodí nejen do formy, ale zabírá extrémní jádro a paradigma kontejneru.

RancherOS je platforma pro infrastrukturu kontejnerů, na které běží Docker přímo nad jádrem Linuxu se sníženou stopou (20 MB). Rancherovo převzetí minimalistického OS je jedinečné v tom, že i proces init je kontejner služby Dockerized. Stejně tak byly tradiční služby na úrovni systému, jako je NTP a DNS, nahrazeny kontejnerovými ekvivalenty.

Minimální operační systémy mají ve výrobě několik výhod. Odebrání nepotřebných balíčků a knihoven umožňuje rychlejší zavedení, snazší správu verzí a menší útočnou plochu, což znamená méně bezpečnostních oprav. RancherOS posouvá „aktualizace“ o krok dále a distribuuje všechny systémové služby jako kontejnery Dockeru. Aktualizace zabezpečení jednoduše znamená stažení nového obrazu a restartování kontejneru, což je proces, který trvá jen několik sekund bez výpadku služby.

Jako OS určený pro kontejnery bude RancherOS těžko rozpoznatelný pro někoho, kdo pochází z tradičního unixového prostředí. Zachována je pouze malá podmnožina jádra - vše ostatní se děje v kontejnerech. Pokud ale Dockera znáte, budete se v RancherOS cítit jako doma.

Určeno pro Docker

Abyste pochopili design RancherOS, musíte si vzpomenout, že tradiční unixové systémy jsou konfigurovány zřídka, s aplikacemi navrstvenými na stabilní základní obraz. V kontejnerové infrastruktuře je operační systém v jistém smyslu jednorázový a pravděpodobně se bude často měnit. Přestože ke konfiguraci a údržbě hostitelů kontejnerů můžete použít nástroj jako Ansible, SaltStack, Puppet nebo Chef, při běhu v měřítku je snazší použít stejné API pro OS jako pro kontejnery a spustit novou instanci OS.

RancherOS tedy zbavuje vše kromě základů pro provoz Dockeru a hostování agentů pro platformy pro správu kontejnerů, jako je Rancher nebo Kubernetes. RancherOS je ve skutečnosti tak minimální, že jsou podporováni pouze dva uživatelé: root a rancher. Abychom pochopili tento design, je nejlepší začít s ilustrací architektury systému:

Farmář

RancherOS byl kontejnerizován do té míry, že i proces init, PID 1, ze kterého jsou vytvořeny všechny ostatní procesy, je Dockerovým démonem. Ačkoli se zdá být malý detail, nahrazení tradičního systému init, jako je Sysvinit nebo Systemd, procesem Dockerized init, je jednou ze základních funkcí RancherOS, protože čistým způsobem překonává některé nekompatibility v architekturách Systemd a Docker. Ačkoli vývojáři Systemd dělají pokrok v řešení těchto nekompatibilit, design RancherOS zajišťuje nulové problémy zde, nyní i v budoucnu, i když za cenu správy věcí trochu jinak.

RancherOS provozuje dva démony Dockeru, System Docker a User Docker. Všechny služby na úrovni systému, jako je konzole, správa zařízení, NTP a DHCP, jsou spravovány serverem systémový dok příkaz, zatímco pracovní vytížení kontejneru jsou spravována tradičním přístavní dělník příkaz. Tyto příkazy jsou identické, s výjimkou typů kontejnerů, na kterých mohou pracovat. Pokud tedy chcete zjistit, jaké služby na úrovni systému jsou spuštěny, zadali byste system-docker ps.

Pokud tak učiníte, všimnete si, že jména zcela vpravo - Syslog, NTP, Udev atd. - jsou všechny systémové služby Linux. Zastavení, spuštění a aktualizace systémové služby se řeší stejným způsobem jako u jakéhokoli jiného kontejneru pomocí Docker API.

Všimněte si také, že kontejner systémových služeb s názvem docker, který spouští System Docker, je samostatným démonem Dockeru pro správu uživatelských kontejnerů. Toto je důležité oddělení privilegií. Protože všechny kontejnery uživatelů běží uvnitř kontejneru User Docker, odstranění všech kontejnerů uživatelů například nesníží systémové kontejnery se službami RancherOS.

Zadáním můžete zjistit, jaké jsou pracovní zátěže kontejnerů uživatelů, stejně jako obvykle s Dockerem docker ps. Dokonce i shell je kontejner (ten s názvem konzole), takže si můžete vybrat, který z nich chcete spustit. Aktuálně dostupné skořápky jsou BusyBox (výchozí), Alpine, CentOS, Debian, Fedora a Ubuntu.

Protože systémové služby jsou kontejnery, neexistuje žádná správa balíčků. Chcete-li upgradovat službu, jednoduše zastavte starý kontejner, vytáhněte novou verzi a restartujte službu, to vše pomocí stejného Docker API.

Instalace a konfigurace RancherOS

První věc, kterou musí tradiční správce Unixu udělat, je přestat myslet na „víceuživatelský OS“ a začít myslet na „infrastrukturní platformu“. RancherOS je navržen tak, aby byl poskytován v různých prostředích - včetně bare metal, virtuálních strojů a řady cloudů včetně AWS a Google - předvídatelným automatizovaným způsobem.

Nainstaloval jsem na virtuální stroj pomocí obrazu ISO a v základní instalaci jsem nenarazil na žádné problémy. Nejsou k dispozici žádné možnosti ani konfigurační obrazovky. Spustíte operační systém (který vás automaticky přihlásí), nastavíte diskový oddíl pro RANCHER_STATE a poté restartujete a nakonfigurujete.

Pokud se podíváte na konfigurační adresář, / etc, uvidíte, že neexistují žádné soubory / etc / rc, ani nic jiného, ​​a co je tam, se nezmění pomocí textového editoru. RancherOS má ekvivalent tří úrovní běhu v tradičním smyslu, které odpovídají System Docker, User Docker a Container. Konfiguraci provádí bootcmd, který běží před System Docker, a runcmd, který běží v System Docker a provádí se před spuštěním User Docker.

RancherOS je konfigurován dvěma způsoby: ručně pomocí ros config příkaz a při spuštění pomocí konfiguračního souboru cloudové konfigurace. Zpočátku jsem to našel trochu fiddly, zvláště pokud jste nikdy nepoužívali cloud-config (nápověda: pro počáteční nastavení použijte editor s vědomím YAML, jako je Emacs a Tramp Mode). Jakmile jsem byl schopen SSH do stroje, bylo to relativně snadné ros config získat konfiguraci, kterou jsem chtěl, a zapsat odpovídající soubor YAML cloud-config, aby se projevil při příštím restartu. Protože bootování je rychlé, je vývojový cyklus také rychlý.

Cokoli chcete konfigurovat, lze provést pomocí souboru YAML nebo ros config včetně načítání modulů jádra, konfigurace TLS a parametrů ladění jádra. Bylo by hezké mít způsob, jak alespoň částečně zachovat stávající investice do nástrojů pro správu konfigurace, jako jsou SaltStack a Puppet, aby se usnadnil přechod na kontejnerové platformy. Reaktor SaltStack se zdá být pro tento případ použití dobrý. V současné době se většina lidí naučí zcela nový způsob správy konfigurací strojů. Většina správců kontejnerů bude používat webové uživatelské rozhraní správy kontejnerů Rancher, takže na této úrovni je tento úkol pravděpodobně jednodušší.

Úložiště a sítě RancherOS

Již jsem zmínil, že instalujete RancherOS zadáním zařízení pro ukládání trvalého stavu. Ve většině situací je to jediný disk, který RancherOS použije. Protože všechny služby běží v kontejnerech Docker, budou používat svazky Docker pro trvalé úložiště, což zhruba zrcadlí architekturu systému. Systémové svazky poskytují trvalé úložiště pro systémové kontejnery, uživatelské svazky pro služby konzoly a svazky příkazů pro binární soubory používané systémovými službami. Velký počet svazků a služeb znamená, že připojit příkaz moc nepomůže: je tu celá stránka s nepochopitelným výstupem. Přál bych si, aby to dokumentace vysvětlila trochu lépe, protože vytrvalost je kriticky důležité téma, kterému je třeba porozumět.

Rancher podporuje živé snímky a zálohování svazků Dockeru, což umožňuje uživatelům zálohovat stavové kontejnery a stavové služby. To není součástí RancherOS, ale je to součást funkce Convoy systému správy kontejnerů Rancher. Pomocí služby Convoy můžete pořizovat snímky svazků, postupně zálohovat snímky do obchodů objektů, jako je Amazon S3, a obnovit svazky na běžících hostitelích.

Systém souborů ZFS je podporován, ale neměl jsem příležitost to zkusit. Vzhledem ke stavu dokumentace a omezení, že zpool lze připojit pouze na / mnt, doporučil bych před použitím ve výrobě důkladné testování.

Veškerou obvyklou síťovou konfiguraci můžete provést v RancherOS, ale pomocí konfiguračních souborů YAML nebo ros příkazy. Síťová nastavení žijí v oboru názvů rancher.network.interfaces, kde konfigurujete například DHCP, brány, MTU atd. Stejným způsobem lze konfigurovat více síťových karet, propojení, mosty a VLANS. DNS je v klíčovém prostoru rancher.networks.dns. Dokud si zvyknete na mapování oboru názvů, očekávejte, že se budete trochu rýpat.

Upgrady a downgrady RancherOS

Místní upgrady a downgrady by stěží mohly být jednodušší. Budete muset upgradovat (nebo downgrade) dva systémy: OS a Docker engine. Správa obou je snadná a její použití trvá pouhé sekundy, uhádli jste ros příkaz. Vše, co musíte udělat, je vybrat verzi operačního systému, kterou chcete spustit, a restartovat. Přál bych si, aby všechny upgrady a downgrady Unix probíhaly tak hladce. Například přechod z verze 1.0.1 na verzi 1.0.0 trval méně než minutu:

Farmář

Pěkný. Chcete-li přepnout motory Docker, můžete to udělat stejně snadno:

docker pro vypínač motoru ros-1.11.2

RancherOS je pěkný malý operační systém. Jeho přístupy ke konfiguraci systému a správě balíčků budou nové a odlišné od tradičních správců systému a dokumentace není vždy taková, jaká může být. Ale pokud znáte Dockera, víte většinu toho, co ke spuštění RancherOS potřebujete.

Nové plemeno kontejnerů dosahuje zralosti a výrobní nasazení kontejnerů je skutečnou možností pro ty, kdo si ho brzy osvojili. RancherOS usnadňuje budování infrastruktury hostování kontejnerů, ale jsou nutné nové dovednosti.