Operačních systémů optimalizovaných pro hostování kontejnerů je víc, ale RancherOS jde dál – v kontejneru má i sám sebe. A taky používá Docker v Docker – čtěte dál.
OS navržené pro kontejnery
V čem hostovat vaše kontejnery? Je pochopitelně možné použít klasický OS jako je Ubuntu nebo CentOS a v něm provozovat Docker (nebo vzít Windows Server 2016 a nasadit Windows kontejnery). Hostitel ale v takovém případě obsahuje spoustu věcí, které tam nejsou potřeba – je moc velký a méně efektivní. Navíc možná potřebujete atomické updaty, možnost rollbacku a podobné moderní záležitosti – v zásadě každý OS balíček chcete izolovaný, samostatně updatovatelný. Nejen z těchto důvodů vznikají OS optimalizované pro kontejnery. I Microsoft nanoserver se tak vejde do 512MB disku a ostatní se pohybují mezi 100-200MB. Jeden ale zašel ještě dál a radikálně změnil koncept (a má 20MB), ale o tom až později. Jaké jsou tedy nejzajímavější OS navržené pro hostování kontejnerů?
Microsoft Nanoserver
V připravovaných Windows 2016 se Microsoft pustil do objevování kontejnerů. Už před lety vznikla varianta Windows Core jako menší řešení pro servery. V příští verzi se osekává dál a vzniká nanoserver. Aktuálně, pokud správně chápu, běží pouze jako Hyper-V VM (tedy má sice 512 MB, ale zatím neumí běžet na bare metal a nemá drivery).
CoreOS
Tento OS je myslím v zásadě zakladatelem směru. Kromě své optimalizace na kontejnery (a také svým vlastním kontejnerovým řešením Rocket, které konkuruje Docker formátu – nicméně CoreOS nativně podporuje i Docker a společně pracují na novém standardizovaném formátu) přinesl zajímavé clusterovací vlastnosti, kdy tento OS hned po narození sestavuje clustery (je to přímo základní nativní funkcí OS). Tento tým přinesl světu middleware aplikace, které nachází velké uplatnění i mimo tento OS (například etcd, distribuovaný systém pro service discovery, se používá v řadě systémů jako je Docker Swarm, Cloud Foundry, Kubernetes a dalších).
Project Atomic
RedHat chce využít důvěry existujících zákazníků, odladěnosti a stability klasického OS a nabídnout jeho verzi optimalizovanou pro kontejnery – Atomic. Jednou ze zajímavých novinek je nahrazení klasického package manageru yum za rpm-ostree, která má právě ony atomické vlastnosti.
Ubuntu Snappy
Další tradiční Linux hráč kromě optimalizované malé image přichází se Snappy – každá OS služba nebo balíček má svůj read-only file system a je do jisté míry izolovaná od ostatních. Místo apt-get tak používáte nástroj snappy.
VMware Photon
VMware připravuje Photon, svého hostitele kontejnerů. Nebylo by na něm nic extra zajímavého, kdyby neměl Lightwave – integraci autentizace a autorizace (LDAP, Kerberos, SAML, OAuth) se světem kontejnerů – a to stojí za pozornost.
RancherOS
Jeden OS to ale všechno posunul dál. RancherOS provozuje všechno v kontejnerech, takže atomicita, izolace a upgradovatelnost jeho koponent je přímo v srdci tohoto OS jako dědictví z Dockeru. RancherOS je malý (instalační iso má 20MB) Linux kernel a všechno ostatní jsou kontejnery – i konzole nebo NTP klient.
Jak to funguje? Po startu kernelu (kdy obvykle přichází ke slovu systemd nebo něco podobného) spouští RancherOS Docker (říká mu system-docker). Všechno ostatní už jsou kontejnery – konzole, syslog, nastavení sítě, ACPI… prostě všechno. Takhle vypadá výpis běžících systémových kontejnerů:
[rancher@rancher ~]$ sudo system-docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 91abcde2a8d4 rancher/os-console:v0.4.3 "/usr/sbin/entry.sh /" 6 minutes ago Up 6 minutes console a1bb1f486d20 rancher/os-docker:v0.4.3 "/usr/sbin/entry.sh /" 11 minutes ago Up 6 minutes docker 06630970f37f rancher/os-ntp:v0.4.3 "/usr/sbin/entry.sh /" 11 minutes ago Up 6 minutes ntp 359bf6513e71 rancher/os-network:v0.4.3 "/usr/sbin/entry.sh n" 11 minutes ago Up 7 minutes network adf08461c6d8 rancher/os-udev:v0.4.3 "/usr/sbin/entry.sh /" 11 minutes ago Up 7 minutes udev 462c79207539 rancher/os-acpid:v0.4.3 "/usr/sbin/entry.sh /" 11 minutes ago Up 7 minutes acpid 4708b83ca241 rancher/os-syslog:v0.4.3 "/usr/sbin/entry.sh /" 11 minutes ago Up 7 minutes syslog
Chcete další systémový proces? Spusťte kontejner. Chcete jinou verzi? Kontejner. Není to dokonalé?
A teď ještě jeden bombónek. Proč je to system-docker a proč ve spuštěných kontejnerech vidíme podezřelý rancher/os-docker? System-docker instance je určena jen systémovým procesům (abyste náhodou příkazem docker rm nevymazali celý OS), vaše kontejnery poběží v jiné Docker instanci. Přesně tak – tento Docker běží uvnitř System-docker! Nemusíte se bát o výkon, nezapomínejme, že na rozdíl od hypervisoru, kde se simuluje hardware (a nested virtualizace má dramatické výkonnostní problémy), tak tady mluvíme o stromech procesů (takže výkon není ovlivněn).
[rancher@rancher ~]$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 22f0d1079a85 hello-world "/hello" 22 seconds ago Exited (0) 22 seconds ago naughty_goldstine