Docker ist die Containerisierung meiner Wahl für eine neue Entwicklungs- und Testumgebung. Die Open-Source-Lösung bietet…
Docker: Die besten Tools zum Management von Containern
Im Docker-Installationsartikel wurde bereits erwähnt, dass es rund um Docker zwei Ansätze zu Orchestrierung gibt. Somit muss es zum Management dieser Ansätze auch unterschiedliche GUIs (Graphische User Interfaces) mit den entsprechenden Fachbegriffen geben. Vor der Wahl des Tools muss man sich also für eine Orchestrationstechnologie entscheiden: Kubernetes oder Swarm. Doch es gibt auch eine Ausnahme.
Tool zur Verwaltung ohne Orchestrierung: Kitematic & Docker Compose
Docker Compose
Natürlich kann man bei Docker über die Konsole und die Konfigurationsdateien alles „manuell“ einstellen. Außerdem gibt es in Docker Desktop eine kleine GUI, die einem zumindest die laufenden Container anzeigt. Wenn sie mit Docker Compose zu einer Multi-Container Application (Stack) zusammengefasst wurden, dann werden sie auch in Docker Desktop gruppiert und können gestartet und gestoppt werden.
Installationen via Docker Desktop sind nicht möglich. Es ist aber möglich das Command Line Interface (CLI) für den jeweiligen Container zu öffnen oder die Logs des Dienstes, Statistiken oder die Eigenschaften zu verwalten.
Docker Desktop stellt auch Swarms und Kubernetes Cluster dar, aber eine Verwaltung wie bei (Multi-)Containern ist nicht möglich.
Kitematic
Bevor es für Docker den Docker Desktop gab, konnte man für diese Verwaltung das Tool „Kitematic“ installieren. Das geht auch heute noch und bietet zusätzliche Feature. Kitematic kann bei Github.com heruntergeladen werden. Anschließend wird die Software ein Verzeichnis entpackt.
Kitematic stammt ebenfalls von Docker Inc. und bietet weitere Features. Das Projekt wird jedoch nur noch mit Security Fixes versorgt. Ob die „fehlenden“ Features noch übernommen werden bleibt abzuwarten. Wünschenswert wäre dies in jedem Fall. Kitematic bietet einen Login bei Docker und somit auch die Möglichkeit fertige Container direkt aus dem Docker Repository zu übernehmen. Was besonders für den Einstieg eine angenehme Lösung ist. So kann man Docker Containern ausprobieren ohne sich zuerst mit der Konsole beschäftigen zu müssen.
Auch hier ist die Verwaltung der einzelnen Container möglich. Die GUI sieht sogar ähnlich aus. Jedoch werden die Multi-Container (Stacks) nicht gruppiert. Dafür ist die Verwaltung der einzelnen Container eines Swarms genauso möglich wie bei Docker Compose. Zusätzlich bietet das Tool Möglichkeiten die Settings der Container in der GUI zu ändern.
In dieser Kategorie sei noch Dockstation genannt. Dieses wird jedoch seit 2019 nicht mehr gepflegt.
Alle drei: Docker Desktop, Dockstation und Kitematic sind Desktop-Applikationen.
Was ist Swarm?
Swarm wurde bereits erwähnt, doch was ist das und wie funktioniert das? Swarm ist eine Technologie zur Orchestrierung von Containern. Wird Swarm eingesetzt spricht man nicht mehr von Containern sondern von Tasks. Sie sind die kleinste Einheit und laufen in einem Service. Es können mehrere gleiche Tasks in einem Service laufen. So kann man ausfallsichere Systeme generieren.
Mehrere Services zusammen sind ein Stack. So ein Stack läuft auf einem Node. Ein Zusammenschluss von mehreren Nodes nennt man Schwarm. Dabei übernehmen einige Nodes die Rolle als Manager und andere als Worker. Worker sind für das Deployment der Tasks zuständig. Manager sind zusätzlich für die Pflege des Swarm zuständig. Sie beobachten, gleichen ab und reagieren auf Differenzen.
Um den Ausfall eines Managers zu kompensieren richtet man nicht nur einen Node als Manager ein. Ein Manager ist dabei der Leader. Fällt dieser aus, übernimmt ein anderer Manager diese Rolle. Fallen mehr als die Hälfte der Manager aus, dann ist zwar die Pflege nicht mehr möglich, aber die bestehenden Nodes arbeiten weiter. Die Manager kommunizieren via Raft-Log.
Wie man gut erkennen kann liegt hier eine Master-Slave-Architektur vor.
Was ist Kubernetes?
Kubernetes ist ebenfalls eine Technologie zur Orchestrierung von Containern. Auch Kubernetes ist eine Master-Slave-Architektur. Kubernetes entspringt der „Borg“-Applikation von Google. Später spendete Google Kubernetes an die Cloud Native Computing Foundation. Das Leistungsspektrum von Kubernetes („K8s“) ist sehr groß.
- automatisierte/r Container-Einrichtung und Rollout der Software
- Beim Deployment werden die Ressourcenanforderungen berücksichtigt
- automatische Skalierung des Containerbetriebs
- intelligente Erkennung von Netzwerkverbindungen und automatische Lastverteilung
- Bereitstellung von Redundanzen für hochverfügbare Systeme
- u.v.m.
Container werden bei Kubernetes in Pods gruppiert. Von einem Container bis vielen Containern ist pro Pod alles möglich. Mehrere Pods sind in einem Node zusammengefasst. Nodes können physikalische oder virtuelle Systeme sein. Mehrere Nodes ergeben einen Cluster. Innerhalb eines Clusters übernimmt ein Master die Verwaltung. Dazu stehen auf dem Master die Prozesse API-Server, etcd, Controller Manager und Scheduler zur Verfügung.
Im Gegensatz zum Swarm entscheidet bei Kubernetes der Master auf welchem Node welcher Pod mit welchen Containern läuft und kann sie bei Bedarf umverteilen. Auf den Nodes laufen die Prozesse: Kublet, Kube-Proxy und cAdvisor.
Kubernetes vs. Swarm – Welche Technologie zur Orchestrierung ist besser?
Die Antwort: Das kommt auf den Anwendungsfall an. – Wem das zu simpel war, hier etwas länger: Bei produktiven Umgebungen hängt die Wahl der Orchestrationstechologie von den Anforderungen eines Projektes ab. Kubernetes oder Swarm bieten diverse Vor- und Nachteile, die zum geeigneten Managementtool für den jeweiligen Anwendungsfall machen.
Der Einsatz von einer Technologie kann jedoch auch von dem Wissen des Administrators abhängen. Es macht wenig Sinn unter Zeitdruck eine neue Technologie zu erlernen, wenn eine andere Technologie die Anforderungen abdeckt und das Wissen bereits vorhanden ist.
Beide Technologie ersetzen manuelle Prozesse durch automatische Services, der Unterschied liegt in der Art und Weise der Bearbeitung und Administration. Beide Services arbeiten mit Redundanzen und laufen stabil und mit hoher Ausfallsicherheit. Bei beiden Technologien hängt der Grad der Sicherheit von der Konfiguration und den Ressourcen ab.
Auch bei einer Entwicklungsumgebung hängt die Wahl von dem Anwendungsfall ab. Docker Compose reicht für einfache Umgebungen für normale Websites völlig aus. Möchte man mit Deployment auf Produktivsysteme arbeiten, dann sollte man ggf. auf Swarm oder Kubernetes zurückgreifen. Soll das produktive System mit Swarm oder Kubernetes laufen, dann könnte es auch von Vorteil sein das Entwicklungssystem so zu strukturieren.
Tools zur Orchestrierung mit Swarm
Portainer
Portainer ist eine Container-Anwendung. Portainer läuft in einem einzelnen Container. Portainer kann als Community Edition kostenlos über die offizielle Website bezogen werden. Die Installation erfolgt via Konsole und unterscheidet sich lediglich von Linux zu Windows in der Syntax. Portainer kann als Server und Agent installiert werden.
Portainer – Funktionsumfang
- Zugriffsmöglichkeiten auf alle Nodes auf Lokal, Remote via TCP/IP, Remote via Agent und auf Microsoft Azure
- Dashboard mit Userverwaltung – via Extension sind Rollen und Registrierungen möglich
- Es können Container und Images verwaltet werden
- Die YAML-Dateien für die Images können z.B. direkt im Browser eingegeben werden
- Verwaltung von Services, Networks, Configs, Secrets
- Verwatung von Stacks und den Templates
- rudimentäres Monitoring
Swarmpit
Swarmpit kommt auch gleich als Swarm-Anwendung daher. In vier Services laufen die einzelnen Tasks. Nach der Installation, die Anleitung findet sich auf der offiziellen Homepage und findet ebenfalls in der Konsole statt, sieht man diese Technologie also sofort in Aktion.
Swarmpit – Funktionsumfang
- umfangreiches Monitoring
- Übersichtlicheres Menü
- Registrieverwaltung via Dockerhub, Registry V2, Amazon ECR, Azure ACR und Gitlab registry
- Network & Noteverwaltung, es können jedoch keine neuen Nodes angelegt werden
- Volumes-, Secrets- & Configverwaltung
- Stacks, Services und Tasks können angelegt und bearbeitet werden, es fehlen jedoch Steuerungselemente
- Images & Templates gibt es nicht, diese können nur aus Repositorys importiert werden
- Container außerhalb eines Swarm werden nicht angezeigt
Rancher 1.6
Die alten Versionen von Rancher unterstützen Swarm jedoch nur experimentell, während in allen Versionen Kubernetes unterstützt wird. Auch Rancher ist eine Webapplikation und läuft als Multi-Container in Docker. Die Installation erfolgt via Konsole und stellt anschließend einen Container zur Verfügung. Swarmpit und Portainer installieren anschließend sofort den jeweiligen Host als Node hinzu. Rancher Server in v1.6 tut dies nicht. Gerade für einen Anfänger gestaltet sich so der erste Anlauf ziemlich schwierig. Die GUI ist ebenfalls umständlicher. Viele Funktionen sind nicht implementiert und müssen manuell via Konsole ausgeführt werden. Auf jedem Host muss der Ranger-Agent installiert sein. Das Image ist mit 1.1 GB ziemlich groß.
Rancher 1.6 – Funktionsumfang
- Rancher bietet einen großen Katalog mit vielen fertigen Images der gängigsten Anwendungen wie WordPress, Sprak, Jenkins usw.
- umfangreiches Monitoring
- Diverse Tools für Logging und Monitoring (Prometheus) und Continous Integration / Deployment (Jenkins)
- Viele Clouds können angebunden werden
- Infrastructure- und Stackverwaltung
Tools zur Orchestrierung mit Kubernetes
Rancher 2.0
Rancher 2.0 – Rancher unterstützt seit langem Kubernetes. Auch die Version 2.0 ist eine Container-Anwendung. Die Installation ist auf der offiziellen Website beschrieben. Die Rancher-Installation funktionierte bei mir nur auf einer VM mit Ubuntu und aktiviertem Kubernetes. Ich habe aber auch nicht weiter gesucht, ob es eine Möglichkeit für Windows Hosts ohne Kubernetes gibt. Insgesamt ist die Installation komplexer als bei allen anderen Tools.
Rancher 2.0 – Funktionsumfang
- Produktkatalog mit vorkonfigurierten Applikationen
- Backup und Recovery Strategien
- Diverse Tools für Logging und Monitoring (Prometheus) und Continous Integration / Deployment (Jenkins)
- Viele Clouds können angebunden werden
- Infrastructure- und Stackverwaltung
- Usermanagement
- Pipelines
- Charts & diverse Apps
Kubernetes Dashboard
Das Kubernetes Dashboard kann nicht nur auf Docker Desktop verwendet werden sondern auch auf vielen anderen Containertechnologien mit Kubernetes wie k3s, IBM Cloud Private-CE und MicroK8s. Zur Installation muss zuerst Kubernetes in Docker Desktop aktiviert sein. Das geht entweder über die Konsole oder im Docker Desktop. Die Installation des Kubernetes Dashboard ist auf der offiziellen Website beschrieben. In meinen Augen ist diese die wohl umfangreichste GUI.
Kubernetes Dashboard – Funktionsumfang
- außerordentlich umfangreiches Monitoring, Monitoring und Debugging inkl. Loadbalancing
- Verwaltung von CronJobs, Deployments, Jobs und Daemon- & Stateful-Sets
- Verwalten von Nodes, Ports (inkl. Forwarding) und Clustern
- Übersichtliches Dashboard
- Deployment
- Anbindung externen und lokaler Nodes viele mit integrierter Bestellfunktion
Portainer for Kubernetes
Portainer for Kubernetes ist als Beta-Version erhältlich. Die Installation ist trotzdem schon auf der offiziellen Website beschrieben. Portainer for Kubernetes. Es ähnelt Portainer in Aussehen und Bedienung. Enthält jedoch typische Elemente für Kubentes. Statt Stacks, Services und Containern findet man deshalb Resource pools und Clusters. Applications ersetzen die Templates. Insgesamt fehlen für einen sinnvollen Einsatz noch viele Features, aber es ist ja auch eine Beta.
Portainer for Kubernetes – Funktionsumfang
- Verwaltung von Clustern & Ressourcepools
- Verwalten von Applicationen
- Anbindung diverser Clouds
- Application-Management
- Verwaltung von Volumes und Endpoints
- rudimentäres Monitoring
Für meine Zwecke wird Docker-Compose vorerst ausreichen. Somit werde keine Technologien wie Swarm oder Kubernetes eingesetzt. Jedoch werde ich Swarmpit, Kitematic, Docker-Desktop und Portainer installieren und Konfigurieren. So steht neben einer Test- und Entwicklungsumgebung auch ein Monitoring und diverse Verwaltungsfunktionen zur Verfügung, die die Arbeit einfach erleichtern. Da einige Tools einige Funktionen nicht besitzen (Löschen von Images bei Docker Desktop, fehlende Gruppierung bei Kitematic und schlechtere Settingsverwaltung bei allen Tools außer Kitematic), konnte ich mich bisher noch nicht für ein Tool entscheiden.