Programovanie

RancherOS: Jednoduchší Linux pre milovníkov Dockeru

Rovnako ako rôzne distribúcie serverov a počítačov so systémom Linux, aj distribúcie systému Linux orientované na kontajnery kombinujú rôzne projekty a komponenty a vytvárajú tak kompletnú kontajnerovú infraštruktúru. Tieto distribúcie vo všeobecnosti kombinujú minimálne jadro OS, rámec orchestrácie a ekosystém kontajnerových služieb. Aplikácia RancherOS sa hodí nielen do formy, ale do jadra zaberá minimálne jadro a paradigma kontajnera.

RancherOS je platforma pre kontajnerovú infraštruktúru, ktorá spúšťa Docker priamo nad jadrom Linuxu so zníženou stopou (20 MB). Rancherovo prevzatie minimalistického operačného systému je jedinečné v tom, že aj proces inicializácie je kontajner služby Dockerized. Rovnako tradičné služby na úrovni systému, ako napríklad NTP a DNS, boli nahradené kontajnerovanými ekvivalentmi.

Minimálne operačné systémy majú vo výrobe niekoľko výhod. Odstránenie nepotrebných balíkov a knižníc umožňuje rýchlejšie zavedenie systému, ľahšiu správu verzií a menšiu plochu útoku, čo znamená menej bezpečnostných opráv. RancherOS posúva „aktualizácie“ o krok ďalej a distribuuje všetky systémové služby ako kontajnery Docker. Aktualizácia zabezpečenia jednoducho znamená stiahnutie nového obrázka a reštartovanie kontajnera, čo je proces, ktorý trvá iba pár sekúnd a služba nemá žiadne výpadky.

Ako OS navrhnutý pre kontajnery bude RancherOS ťažko rozpoznateľný pre niekoho, kto pochádza z tradičného prostredia Unixu. Zachovaná je iba malá podmnožina jadra - všetko ostatné sa deje v kontajneroch. Ale ak poznáte Dockera, budete sa v RancherOS cítiť ako doma.

Navrhnuté pre Docker

Aby ste pochopili dizajn systému RancherOS, musíte si uvedomiť, že tradičné systémy Unix sú konfigurované zriedka a aplikácie sú navrstvené na stabilný základný obraz. V kontajnerovej infraštruktúre je OS v istom zmysle jednorazový a pravdepodobne sa bude často meniť. Aj keď na konfiguráciu a údržbu hostiteľov kontajnerov môžete použiť nástroj ako Ansible, SaltStack, Puppet alebo Chef, pri bežnom použití je jednoduchšie použiť rovnaké API pre OS ako v prípade kontajnerov a spustiť novú inštanciu kontajnera. OS.

RancherOS teda odstraňuje všetko, čo nie je nevyhnutné pre spustenie Dockeru a hostiteľských agentov pre platformy na správu kontajnerov, ako sú Rancher alebo Kubernetes. RancherOS je v skutočnosti taký minimálny, že sú podporovaní iba dvaja používatelia: root a rancher. Aby sme pochopili tento dizajn, je najlepšie začať s ilustráciou architektúry systému:

Rančer

RancherOS bol kontajnerovaný do tej miery, že dokonca aj proces init, PID 1, z ktorého sú vytvorené všetky ostatné procesy, je Dockerovým démonom. Aj keď sa to javí ako malý detail, nahradenie tradičného systému init, ako je Sysvinit alebo Systemd, procesom Dockerized init, je jednou z hlavných funkcií RancherOS, pretože čistým spôsobom prekonáva niektoré nekompatibility v architektúrach systémov Systemd a Docker. Aj keď vývojári Systemdu dosahujú pokrok v riešení týchto nekompatibilít, dizajn RancherOS zaisťuje nulové problémy tu, teraz i v budúcnosti, aj keď za cenu riadenia vecí trochu inak.

RancherOS prevádzkuje dvoch démonov Dockeru, System Docker a User Docker. Všetky služby na úrovni systému, ako napríklad konzola, správa zariadení, NTP a DHCP, sú spravované serverom system-docker príkaz, zatiaľ čo pracovné zaťaženia kontajnera sa riadia tradičným spôsobom docker príkaz. Tieto príkazy sú identické, s výnimkou typov kontajnerov, na ktorých môžu pracovať. Ak teda chcete zistiť, aké služby na úrovni systému sú spustené, zadajte príkaz system-docker ps.

Ak tak urobíte, všimnete si, že názvy úplne vpravo - Syslog, NTP, Udev atď. - sú všetko systémové služby systému Linux. Zastavenie, spustenie a aktualizácia systémovej služby sa rieši rovnako ako v prípade iného kontajnera pomocou Docker API.

Upozorňujeme tiež, že kontajner systémových služieb s názvom docker, ktorý spúšťa System Docker, je samostatným démonom Docker na správu kontajnerov používateľov. Toto je dôležité oddelenie privilégií. Pretože všetky používateľské kontajnery bežia vo vnútri kontajnera User Docker, odstránenie všetkých používateľských kontajnerov napríklad nespustí systémové kontajnery so službami RancherOS.

Zadaním môžete vidieť, aké pracovné zaťaženia sú v kontajneroch používateľov, rovnako ako by to bolo normálne v prípade Dockeru docker ps. Aj shell je kontajner (ten, ktorý sa volá konzola), takže si môžete zvoliť, ktorý z nich chcete spustiť. Momentálne dostupné škrupiny sú BusyBox (predvolené), Alpine, CentOS, Debian, Fedora a Ubuntu.

Pretože systémové služby sú kontajnery, správa balíkov neexistuje. Ak chcete inovovať službu, jednoducho zastavíte starý kontajner, stiahnete novú verziu a reštartujete službu, a to všetko pomocou rovnakého Docker API.

Inštalácia a konfigurácia RancherOS

Prvá vec, ktorú musí tradičný správca Unixu urobiť, je prestať myslieť na „viacužívateľský OS“ a začať uvažovať o „infraštruktúrnej platforme“. RancherOS je navrhnutý tak, aby bol poskytovaný v rôznych prostrediach - vrátane bare metal, virtuálnych strojov a mnohých cloudov vrátane AWS a Google - predvídateľným automatizovaným spôsobom.

Inštaloval som na virtuálny stroj pomocou ISO obrazu a pri základnej inštalácii som nenarazil na žiadne problémy. Nie sú k dispozícii žiadne možnosti ani konfiguračné obrazovky. Spustíte operačný systém (ktorý vás automaticky prihlási), nastavíte diskovú oblasť pre RANCHER_STATE a potom reštartujete a konfigurujete.

Ak sa pozriete do konfiguračného adresára / etc, uvidíte, že neexistujú žiadne súbory / etc / rc, ani oveľa viac, a to, čo sa tam nachádza, sa nezmení pomocou textového editora. RancherOS má ekvivalent troch úrovní spustenia v tradičnom zmysle, ktoré zodpovedajú System Docker, User Docker a Container. Konfigurácia sa vykonáva pomocou bootcmd, ktorý beží pred System Docker, a runcmd, ktorý beží v System Docker a vykonáva sa pred spustením User Docker.

RancherOS je konfigurovaný dvoma spôsobmi: ručne pomocou ros config príkazu a pri štarte pomocou konfiguračného súboru cloudovej konfigurácie. Spočiatku som to považoval za trochu nepríjemné, najmä ak ste nikdy nepoužívali cloud-config (nápoveda: na úvodné nastavenie použite editor s povolením YAML, ako napríklad Emacs a Tramp Mode). Akonáhle som bol schopný SSH do stroja, bolo to relatívne jednoduché ros config aby som získal konfiguráciu, ktorú som chcel, a vypísal zodpovedajúci cloudový konfiguračný súbor YAML, ktorý sa prejaví pri ďalšom reštarte. Pretože bootovanie je rýchle, je tu aj rýchly vývojový cyklus.

Všetko, čo chcete nakonfigurovať, je možné vykonať pomocou súboru YAML alebo ros config vrátane načítania modulov jadra, konfigurácie TLS a parametrov ladenia jadra. Bolo by pekné mať spôsob, ako aspoň čiastočne zachovať existujúce investície do nástrojov na správu konfigurácií ako SaltStack a Puppet, ktoré by uľahčili prechod na kontajnerové platformy. Zdá sa, že SaltStack’s Reactor je pre tento prípad použitia dobrý. Väčšina ľudí sa v súčasnosti bude učiť úplne nový spôsob riadenia konfigurácií strojov. Väčšina správcov kontajnerov použije webové používateľské rozhranie správy kontajnerov Rancher, takže na tejto úrovni je táto úloha pravdepodobne ľahšia.

Úložisko a sieťové pripojenie RancherOS

Už som spomenul, že inštalujete RancherOS zadaním zariadenia na ukladanie trvalého stavu. Vo väčšine situácií je to jediný disk, ktorý RancherOS použije. Pretože všetky služby bežia v kontajneroch Docker, budú na trvalé ukladanie používať zväzky Docker, čo zhruba odzrkadľuje architektúru systému. Systémové zväzky poskytujú trvalé úložisko pre systémové kontajnery, užívateľské zväzky pre služby konzoly a zväzkové príkazy pre binárne súbory používané systémovými službami. Veľký počet zväzkov a služieb znamená, že: namontovať príkaz moc nepomôže: je tu celá stránka s nepochopiteľným výstupom. Prial by som si, aby to dokumentácia vysvetlila o niečo lepšie, pretože vytrvalosť je kriticky dôležitá téma, ktorej je potrebné porozumieť.

Rancher podporuje živé snímky a zálohovanie zväzkov Docker, čo umožňuje používateľom zálohovať stavové kontajnery a stavové služby. Toto nie je súčasťou RancherOS, ale je to súčasť funkcie Convoy systému správy kontajnerov Rancher. Pomocou aplikácie Convoy môžete robiť snímky zväzkov, postupne zálohovať snímky do obchodov s objektmi, ako je Amazon S3, a obnovovať zväzky na bežiacich hostiteľoch.

Súborový systém ZFS je podporovaný, ale nemal som možnosť vyskúšať to. Vzhľadom na stav dokumentácie a obmedzenie, že zpool je možné namontovať iba na / mnt, by som pred použitím vo výrobe odporučil dôkladné otestovanie.

V RancherOS môžete vykonať všetku obvyklú sieťovú konfiguráciu, ale pomocou konfiguračných súborov YAML alebo ros príkazy. Sieťové nastavenia žijú v priestore názvov rancher.network.interfaces, kde konfigurujete napríklad DHCP, brány, MTU atď. Rovnakým spôsobom je možné nakonfigurovať aj viac sieťových kariet, bonding, bridges a VLANS. DNS sa nachádza v kľúčovom priestore rancher.networks.dns. Kým si zvyknete na mapovanie priestoru názvov, počítajte s tým, že sa budete trochu prehrabávať.

Vylepšenia a staršie verzie RancherOS

Inovácie a downgrady na mieste môžu byť ťažko jednoduchšie. Budete musieť upgradovať (alebo downgradovať) dva systémy: OS a Docker engine. Správa oboch je jednoduchá a ich použitie trvá len pár sekúnd ros príkaz. Všetko, čo musíte urobiť, je vybrať verziu operačného systému, ktorú chcete spustiť, a reštartovať počítač. Prial by som si, aby všetky upgrady a downgrady systému Unix prebehli tak hladko. Napríklad zníženie verzie z 1.0.1 na 1.0.0 trvalo menej ako minútu:

Rančer

Pekný. Ak chcete prepnúť motory Docker, môžete to urobiť rovnako ľahko:

docker-1.11.2

RancherOS je malý pekný operačný systém. Jeho prístupy k konfigurácii systému a správe balíkov budú nové a odlišné od tradičných správcov systému a dokumentácia nie je vždy taká, aká by mohla byť. Ak však poznáte Docker, viete väčšinu toho, čo potrebujete na spustenie RancherOS.

Nové plemeno kontajnerov dospieva a výrobné nasadenie kontajnerov je skutočnou možnosťou pre tých, ktorí si ho čoskoro osvoja. RancherOS uľahčuje budovanie infraštruktúry hostenia kontajnerov, ale sú potrebné nové zručnosti.