RancherOS: Ein einfacheres Linux für Docker-Liebhaber

Wie die verschiedenen Linux-Server- und Desktop-Distributionen kombinieren auch die containerorientierten Linux-Distributionen verschiedene Projekte und Komponenten, um eine vollständige Container-Infrastruktur aufzubauen. Diese Distributionen kombinieren im Allgemeinen einen minimalen Betriebssystemkern, ein Orchestrierungsframework und ein Ökosystem von Containerdiensten. RancherOS passt nicht nur in die Form, sondern bringt den minimalen Kernel und das Container-Paradigma auf die Spitze.

RancherOS ist eine Container-Infrastrukturplattform, auf der Docker direkt auf einem Linux-Kernel mit reduziertem Platzbedarf (20 MB) ausgeführt wird. Ranchers Einstellung zu einem minimalistischen Betriebssystem ist insofern einzigartig, als selbst der Init-Prozess ein Docker-Servicecontainer ist. Ebenso wurden herkömmliche Dienste auf Systemebene wie NTP und DNS durch containerisierte Äquivalente ersetzt.

Minimale Betriebssysteme haben mehrere Vorteile in der Produktion. Das Entfernen unnötiger Pakete und Bibliotheken ermöglicht ein schnelleres Booten, eine einfachere Versionsverwaltung und eine kleinere Angriffsfläche, was weniger Sicherheitspatches bedeutet. RancherOS geht noch einen Schritt weiter und verteilt alle Systemdienste als Docker-Container. Ein Sicherheitsupdate bedeutet einfach, ein neues Image herunterzuladen und den Container neu zu starten. Dieser Vorgang dauert nur wenige Sekunden, ohne dass der Dienst ausfällt.

Als Betriebssystem für Container ist RancherOS für Personen mit einem traditionellen Unix-Hintergrund kaum erkennbar. Es bleibt nur eine kleine Teilmenge des Kernels erhalten - alles andere erfolgt in Containern. Wenn Sie jedoch mit Docker vertraut sind, werden Sie sich in RancherOS wie zu Hause fühlen.

Entwickelt für Docker

Um das RancherOS-Design zu verstehen, müssen Sie daran erinnern, dass herkömmliche Unix-Systeme nur selten konfiguriert werden und Anwendungen auf einem stabilen Basis-Image liegen. In einer Containerinfrastruktur ist das Betriebssystem in gewisser Weise verfügbar und wird wahrscheinlich häufig geändert. Obwohl Sie ein Tool wie Ansible, SaltStack, Puppet oder Chef zum Konfigurieren und Verwalten von Container-Hosts verwenden können, ist es bei der Ausführung im Maßstab einfacher, dieselbe API für das Betriebssystem zu verwenden wie für Container und eine neue Instanz von zu starten Betriebssystem.

Somit entfernt das RancherOS alles außer dem Nötigsten für die Ausführung von Docker- und Hosting-Agenten für Container-Management-Plattformen wie Rancher oder Kubernetes. Tatsächlich ist RancherOS so minimal, dass nur zwei Benutzer unterstützt werden: root und rancher. Um dieses Design zu verstehen, beginnen Sie am besten mit einer Darstellung der Systemarchitektur:

Rancher

RancherOS wurde so weit containerisiert, dass selbst der Init-Prozess PID 1, aus dem alle anderen Prozesse hervorgehen, ein Docker-Daemon ist. Obwohl es scheinbar ein kleines Detail ist, ist das Ersetzen des herkömmlichen Init-Systems wie Sysvinit oder Systemd durch einen Docker-Init-Prozess eines der Hauptmerkmale von RancherOS, da einige der Inkompatibilitäten in den Architekturen von Systemd und Docker auf saubere Weise überwunden werden. Obwohl die Systemd-Entwickler Fortschritte bei der Behebung dieser Inkompatibilitäten erzielen, stellt das RancherOS-Design hier, jetzt und in Zukunft keine Probleme sicher, wenn auch auf Kosten einer etwas anderen Verwaltung.

RancherOS führt zwei Docker-Daemons aus, den System Docker und den User Docker. Alle Dienste auf Systemebene wie Konsole, Geräteverwaltung, NTP und DHCP werden vom system-dockerBefehl verwaltet, während die Container-Workloads mit dem herkömmlichen dockerBefehl verwaltet werden. Diese Befehle sind bis auf die Containertypen, mit denen sie arbeiten können, identisch. Wenn Sie also sehen möchten, welche Dienste auf Systemebene ausgeführt werden, geben Sie Folgendes ein system-docker ps.

Wenn Sie dies tun, werden Sie feststellen, dass die Namen ganz rechts - Syslog, NTP, Udev usw. - alle Linux-Systemdienste sind. Das Stoppen, Starten und Aktualisieren eines Systemdienstes erfolgt wie bei jedem anderen Container mithilfe der Docker-API.

Beachten Sie auch, dass der Systemdienstcontainer Docker, der von System Docker gestartet wird, ein separater Docker-Daemon zum Verwalten von Benutzercontainern ist. Dies ist eine wichtige Trennung von Privilegien. Da alle Benutzercontainer im User Docker-Container ausgeführt werden, werden durch das Löschen aller Benutzercontainer beispielsweise die Systemcontainer, in denen RancherOS-Dienste ausgeführt werden, nicht heruntergefahren.

Durch Eingabe können Sie sehen, wie hoch die Workloads der Benutzercontainer sind, wie Sie es normalerweise mit Docker tun würden docker ps. Sogar die Shell ist ein Container (die Konsole), sodass Sie auswählen können, welchen Sie ausführen möchten. Die derzeit verfügbaren Shells sind BusyBox (Standardeinstellung), Alpine, CentOS, Debian, Fedora und Ubuntu.

Da Systemdienste Container sind, gibt es keine Paketverwaltung. Um einen Dienst zu aktualisieren, stoppen Sie einfach den alten Container, ziehen eine neue Version und starten den Dienst neu, wobei alle dieselbe Docker-API verwenden.

Installation und Konfiguration von RancherOS

Das erste, was ein traditioneller Unix-Administrator tun muss, ist, nicht mehr an „Mehrbenutzer-Betriebssysteme“ zu denken und an „Infrastrukturplattform“ zu denken. RancherOS wurde entwickelt, um in einer Vielzahl von Umgebungen - einschließlich Bare Metal, virtueller Maschine und einer Reihe von Clouds, einschließlich AWS und Google - auf vorhersehbare, automatisierte Weise bereitgestellt zu werden.

Ich habe mit dem ISO-Image auf einer virtuellen Maschine installiert und bin bei der Basisinstallation auf keine Probleme gestoßen. Es gibt keine Optionen oder Konfigurationsbildschirme. Sie starten das Betriebssystem (das Sie automatisch anmeldet), legen eine Festplattenpartition für RANCHER_STATE fest und starten und konfigurieren neu.

Wenn Sie sich das Konfigurationsverzeichnis / etc ansehen, werden Sie feststellen, dass es keine / etc / rc-Dateien oder vieles mehr gibt und was dort vorhanden ist, wird mit einem Texteditor nicht geändert. RancherOS entspricht drei Ausführungsstufen im herkömmlichen Sinne, die System Docker, User Docker und Container entsprechen. Die Konfiguration erfolgt durch bootcmd, das vor dem System Docker ausgeführt wird und runcmddas im System Docker ausgeführt wird und vor dem Start des User Docker ausgeführt wird.

RancherOS wird auf zwei Arten konfiguriert: manuell mithilfe des ros configBefehls und beim Booten mithilfe einer Cloud-Konfigurationskonfigurationsdatei. Ich fand das anfangs etwas fummelig, besonders wenn Sie noch nie die Cloud-Konfiguration verwendet haben (Hinweis: Verwenden Sie für die Ersteinrichtung einen YAML-fähigen Editor wie Emacs und Tramp Mode). Sobald ich in der Lage war, SSH auf dem Computer zu installieren, war es relativ einfach ros config, die gewünschte Konfiguration abzurufen und die entsprechende Cloud-Konfigurations-YAML-Datei zu schreiben, die beim nächsten Neustart wirksam wird. Da das Booten schnell ist, ist auch hier der Entwicklungszyklus schnell.

Alles, was Sie konfigurieren möchten, kann entweder mit der YAML-Datei oder ros configeinschließlich des Ladens von Kernelmodulen, der TLS-Konfiguration und der Kernel-Optimierungsparameter ausgeführt werden. Es wäre schön, eine Möglichkeit zu haben, bestehende Investitionen in Konfigurationsmanagement-Tools wie SaltStack und Puppet zumindest teilweise beizubehalten, um den Übergang zu Containerplattformen zu erleichtern. Der Reaktor von SaltStack scheint für diesen Anwendungsfall gut zu sein. So wie es jetzt ist, werden die meisten Leute eine völlig neue Art der Verwaltung von Maschinenkonfigurationen lernen. Die meisten Containeradministratoren verwenden die Web-Benutzeroberfläche für die Rancher-Containerverwaltung, sodass diese Aufgabe auf dieser Ebene wahrscheinlich einfacher ist.

RancherOS Speicherung und Vernetzung

Ich habe bereits erwähnt, dass Sie RancherOS installieren, indem Sie ein Gerät angeben, auf dem der dauerhafte Status gespeichert werden soll. In den meisten Situationen ist dies die einzige Festplatte, die RancherOS verwendet. Da alle Dienste in Docker-Containern ausgeführt werden, verwenden sie Docker-Volumes für die dauerhafte Speicherung, was in etwa der Systemarchitektur entspricht. Systemvolumes bieten dauerhaften Speicher für Systemcontainer, Benutzervolumes für Konsolendienste und Befehlsvolumes für Binärdateien, die von Systemdiensten verwendet werden. Aufgrund der großen Anzahl von Volumes und Diensten ist der mountBefehl keine große Hilfe: Es gibt eine ganze Seite mit unverständlichen Ausgaben. Ich wünschte, die Dokumentation würde dies etwas besser erklären, da Beharrlichkeit ein kritisch wichtiges Thema ist, um es zu verstehen.

Rancher unterstützt Live-Snapshots und die Sicherung von Docker-Volumes, sodass Benutzer Stateful Container und Stateful Services sichern können. Dies ist nicht in RancherOS enthalten, ist jedoch Teil der Convoy-Funktion des Rancher-Containerverwaltungssystems. Mit Convoy können Sie Snapshots von Volumes erstellen, Snapshots schrittweise in Objektspeichern wie Amazon S3 sichern und Volumes auf laufenden Hosts wiederherstellen.

Das ZFS-Dateisystem wird unterstützt, aber ich hatte keine Gelegenheit, es zu versuchen. Angesichts des Standes der Dokumentation und der Einschränkung, dass der zpool nur auf / mnt montiert werden kann, würde ich gründliche Tests empfehlen, bevor Sie diesen in der Produktion verwenden.

Sie können alle üblichen Netzwerkkonfigurationen in RancherOS durchführen, jedoch YAML-Konfigurationsdateien oder ros-Befehle verwenden. Die Netzwerkeinstellungen befinden sich im Namespace rancher.network.interfaces, in dem Sie DHCP, Gateways, MTUs usw. konfigurieren können. Mehrere Netzwerkkarten, Verbindungen, Bridges und VLANs können auf dieselbe Weise konfiguriert werden. DNS befindet sich im Schlüsselbereich rancher.networks.dns. Erwarten Sie, bis Sie sich an die Namespace-Zuordnungen gewöhnt haben, ein wenig herumzuwühlen.

RancherOS Upgrades und Downgrades

In-Place-Upgrades und Downgrades könnten kaum einfacher sein. Sie müssen zwei Systeme aktualisieren (oder downgraden): das Betriebssystem und die Docker-Engine. Beides zu verwalten ist einfach und dauert nur wenige Sekunden, wenn Sie den rosBefehl verwenden. Sie müssen lediglich die Version des Betriebssystems auswählen, das Sie ausführen und neu starten möchten. Ich wünschte, alle Unix-Upgrades und Downgrades würden so reibungslos verlaufen. Das Downgrade von 1.0.1 auf 1.0.0 dauerte beispielsweise weniger als eine Minute:

Rancher

Nett. Wenn Sie Docker-Engines wechseln möchten, können Sie dies genauso einfach tun:

ros engine switch docker-1.11.2

RancherOS ist ein nettes kleines Betriebssystem. Die Ansätze zur Systemkonfiguration und Paketverwaltung sind neu und unterscheiden sich von herkömmlichen Systemadministratoren, und die Dokumentation ist nicht immer so, wie sie sein könnte. Wenn Sie Docker kennen, wissen Sie am meisten, was Sie zum Ausführen von RancherOS benötigen.

Die neue Generation von Containern erreicht ihre Reife und der Einsatz von Containern in der Produktion ist eine echte Möglichkeit für Early Adopters. Mit RancherOS ist es einfach, eine Container-Hosting-Infrastruktur aufzubauen, es sind jedoch neue Kenntnisse erforderlich.