RancherOS: un Linux più semplice per gli amanti di Docker

Come le varie distribuzioni desktop e server Linux, le distribuzioni Linux orientate ai contenitori mescolano e abbinano vari progetti e componenti per costruire un'infrastruttura di contenitori completa. Queste distribuzioni generalmente combinano un kernel del sistema operativo minimo, un framework di orchestrazione e un ecosistema di servizi container. RancherOS non solo si adatta allo stampo, ma porta il kernel minimo e il paradigma del contenitore agli estremi.

RancherOS è una piattaforma di infrastruttura di container che esegue Docker direttamente su un kernel Linux a ingombro ridotto (20 MB). La visione di Rancher di un sistema operativo minimalista è unica in quanto anche il processo di inizializzazione è un contenitore di servizi Dockerized. Allo stesso modo, i servizi tradizionali a livello di sistema, come NTP e DNS, sono stati sostituiti con equivalenti containerizzati.

I sistemi operativi minimi hanno diversi vantaggi nella produzione. La rimozione di pacchetti e librerie non necessari rende l'avvio più veloce, la gestione delle versioni più semplice e una superficie di attacco più piccola, il che significa meno patch di sicurezza. RancherOS fa un ulteriore passo avanti con gli "aggiornamenti" e distribuisce tutti i servizi di sistema come contenitori Docker. Un aggiornamento della sicurezza significa semplicemente scaricare una nuova immagine e riavviare il contenitore, un processo che richiede solo pochi secondi senza tempi di inattività per il servizio.

Essendo un sistema operativo progettato per i contenitori, RancherOS sarà difficilmente riconoscibile da qualcuno che proviene da un background Unix tradizionale. Viene conservato solo un piccolo sottoinsieme del kernel, tutto il resto viene eseguito in contenitori. Ma se hai familiarità con Docker, ti sentirai come a casa in RancherOS.

Progettato per Docker

Per comprendere il design di RancherOS, è necessario ricordare che i sistemi Unix tradizionali sono configurati di rado, con le applicazioni stratificate sopra un'immagine di base stabile. In un'infrastruttura container, il sistema operativo è in un certo senso usa e getta e probabilmente verrà modificato spesso. Sebbene sia possibile utilizzare uno strumento come Ansible, SaltStack, Puppet o Chef per configurare e mantenere gli host del contenitore, quando si esegue su larga scala è più semplice utilizzare la stessa API per il sistema operativo come per i contenitori e avviare una nuova istanza del OS.

Pertanto, RancherOS elimina tutto tranne gli elementi essenziali per l'esecuzione di Docker e gli agenti di hosting per piattaforme di gestione dei container come Rancher o Kubernetes. In effetti RancherOS è così minimo che sono supportati solo due utenti: root e rancher. Per comprendere questo progetto, è meglio iniziare con un'illustrazione dell'architettura del sistema:

Rancher

RancherOS è stato containerizzato al punto che anche il processo di inizializzazione, PID 1, da cui vengono generati tutti gli altri processi, è un demone Docker. Sebbene apparentemente un piccolo dettaglio, la sostituzione del tradizionale sistema di inizializzazione come Sysvinit o Systemd con un processo di inizializzazione Dockerizzato è una delle caratteristiche principali di RancherOS, in quanto supera alcune delle incompatibilità nelle architetture di Systemd e Docker in modo pulito. Sebbene i progressi nella risoluzione di queste incompatibilità siano stati fatti dagli sviluppatori di Systemd, il design di RancherOS garantisce zero problemi qui, ora e in futuro, anche se a costo di gestire le cose in modo leggermente diverso.

RancherOS esegue due daemon Docker, Docker di sistema e Docker utente. Tutti i servizi a livello di sistema come la console, la gestione dei dispositivi, NTP e DHCP sono gestiti dal system-dockercomando, mentre i carichi di lavoro del contenitore sono gestiti con il dockercomando tradizionale . Questi comandi sono identici, ad eccezione dei tipi di contenitori su cui possono operare. Quindi, se vuoi vedere quali servizi a livello di sistema sono in esecuzione, devi inserire system-docker ps.

Se lo fai, noterai che i nomi all'estrema destra - Syslog, NTP, Udev, ecc. - sono tutti servizi di sistema Linux. L'arresto, l'avvio e l'aggiornamento di un servizio di sistema vengono gestiti allo stesso modo di qualsiasi altro contenitore, utilizzando l'API Docker.

Si noti inoltre che il contenitore dei servizi di sistema denominato docker, avviato da System Docker, è un demone Docker separato per la gestione dei contenitori utente. Questa è un'importante separazione dei privilegi. Poiché tutti i contenitori utente vengono eseguiti all'interno del contenitore Docker utente, l'eliminazione di tutti i contenitori utente, ad esempio, non interromperà i contenitori di sistema che eseguono servizi RancherOS.

Puoi vedere quali sono i carichi di lavoro del container utente proprio come faresti normalmente con Docker, inserendo docker ps. Anche la shell è un contenitore (quello chiamato console), quindi puoi scegliere quale vuoi eseguire. Le shell attualmente disponibili sono BusyBox (l'impostazione predefinita), Alpine, CentOS, Debian, Fedora e Ubuntu.

Poiché i servizi di sistema sono contenitori, non esiste una gestione dei pacchetti. Per aggiornare un servizio, è sufficiente arrestare il vecchio contenitore, eseguire il pull di una nuova versione e riavviare il servizio, tutto utilizzando la stessa API Docker.

Installazione e configurazione di RancherOS

La prima cosa che un amministratore Unix tradizionale deve fare è smettere di pensare "sistema operativo multiutente" e iniziare a pensare "piattaforma infrastrutturale". RancherOS è progettato per essere fornito in una varietà di ambienti, inclusi bare metal, macchine virtuali e una serie di cloud tra cui AWS e Google, in modo prevedibile e automatizzato.

Ho installato su una macchina virtuale utilizzando l'immagine ISO e non ho riscontrato alcun problema nell'installazione di base. Non ci sono opzioni o schermate di configurazione. Avvia il sistema operativo (che ti fa accedere automaticamente), imposta una partizione del disco per RANCHER_STATE, quindi riavvia e configura.

Se dai un'occhiata alla directory di configurazione, / etc, vedrai che non ci sono file / etc / rc, o molto altro, e quello che c'è non viene modificato con un editor di testo. RancherOS ha l'equivalente di tre livelli di esecuzione nel senso tradizionale che corrispondono a System Docker, User Docker e Container. La configurazione viene eseguita da bootcmd, che viene eseguito prima di System Docker e runcmd, che viene eseguito in System Docker, viene eseguito prima dell'avvio di Docker utente.

RancherOS è configurato in due modi: manualmente utilizzando il ros configcomando e all'avvio utilizzando un file di configurazione cloud-config. All'inizio l'ho trovato un po 'complicato, specialmente se non hai mai usato cloud-config (suggerimento: usa un editor compatibile con YAML, come Emacs e Tramp Mode, per la configurazione iniziale). Una volta che sono stato in grado di eseguire SSH nella macchina, è stato relativamente facile da usare ros configottenere la configurazione che volevo e scrivere il corrispondente file YAML di configurazione cloud per avere effetto al riavvio successivo. Poiché l'avvio è veloce, anche il ciclo di sviluppo qui è veloce.

Tutto ciò che si desidera configurare può essere eseguito con il file YAML o ros configincluso il caricamento dei moduli del kernel, la configurazione TLS e i parametri di ottimizzazione del kernel. Sarebbe bello avere un modo per preservare gli investimenti esistenti in strumenti di gestione della configurazione come SaltStack e Puppet, almeno parzialmente, per facilitare la transizione alle piattaforme container. Il reattore di SaltStack sembra che sarebbe buono per questo caso d'uso. Allo stato attuale, la maggior parte delle persone imparerà un modo completamente nuovo di gestire le configurazioni delle macchine. La maggior parte degli amministratori di contenitori utilizzerà l'interfaccia utente Web di gestione dei contenitori Rancher, quindi questa attività è probabilmente più semplice a quel livello.

Archiviazione e rete RancherOS

Ho accennato in precedenza che si installa RancherOS specificando un dispositivo per memorizzare lo stato persistente. Nella maggior parte delle situazioni, questo è l'unico disco che RancherOS utilizzerà. Poiché tutti i servizi vengono eseguiti in container Docker, utilizzeranno i volumi Docker per l'archiviazione persistente, rispecchiando all'incirca l'architettura del sistema. I volumi di sistema forniscono memoria persistente per contenitori di sistema, volumi utente per i servizi della console e volumi di comandi per i file binari utilizzati dai servizi di sistema. Il gran numero di volumi e servizi significa che il mountcomando non sarà di grande aiuto: c'è una pagina intera di output incomprensibile. Vorrei che la documentazione spiegasse questo un po 'meglio, perché la persistenza è un argomento di fondamentale importanza da comprendere.

Rancher supporta istantanee live e backup dei volumi Docker, consentendo agli utenti di eseguire il backup di container e servizi stateful. Questo non è incluso in RancherOS, ma fa parte della funzione Convoy del sistema di gestione dei container Rancher. Utilizzando Convoy è possibile acquisire snapshot di volumi, eseguire il backup incrementale di snapshot in archivi di oggetti come Amazon S3 e ripristinare i volumi su host in esecuzione.

Il file system ZFS è supportato, ma non ho avuto l'opportunità di provarlo. Dato lo stato della documentazione e la restrizione per cui zpool può essere montato solo su / mnt, consiglierei un test approfondito prima di utilizzarlo in produzione.

Puoi fare tutte le normali configurazioni di rete in RancherOS, ma usando i file di configurazione oi roscomandi YAML . Le impostazioni di rete risiedono nello spazio dei nomi rancher.network.interfaces, dove configuri DHCP, gateway, MTU, ecc. Più NIC, bonding, bridge e VLAN possono essere configurati allo stesso modo. Il DNS si trova nel keyspace rancher.networks.dns. Fino a quando non ti sarai abituato alle mappature dello spazio dei nomi, aspettati di scavare un po '.

Aggiornamenti e downgrade di RancherOS

Aggiornamenti e downgrade sul posto difficilmente potrebbero essere più facili. Sarà necessario aggiornare (o eseguire il downgrade) due sistemi: il sistema operativo e il motore Docker. Gestire entrambi è facile e richiede solo pochi secondi usando, hai indovinato, il roscomando. Tutto quello che devi fare è selezionare la versione del sistema operativo che desideri eseguire e riavviare. Vorrei che tutti gli aggiornamenti e il downgrade di Unix andassero così bene. Ad esempio, il downgrade da 1.0.1 a 1.0.0 ha richiesto meno di un minuto:

Rancher

Bello. Se vuoi cambiare motore Docker, puoi farlo altrettanto facilmente:

ros engine switch docker-1.11.2

RancherOS è un bel sistema operativo. I suoi approcci alla configurazione del sistema e alla gestione dei pacchetti saranno nuovi e diversi dagli amministratori di sistema tradizionali e la documentazione non è sempre quella che potrebbe essere. Ma se conosci Docker, sai la maggior parte di ciò che ti serve per eseguire RancherOS.

La nuova generazione di contenitori sta raggiungendo la maturità e l'implementazione della produzione di contenitori è una vera possibilità per i primi utenti. RancherOS semplifica la creazione di un'infrastruttura di hosting di container, ma sono necessarie nuove competenze.