Der lise Blog:
Einsichten, Ansichten, Aussichten

Cloud-Farming mit Rancher

Docker stellt isolierte Container bereit, Kubernetes fügt diese zu einer Umgebung zusammen und Rancher verwaltet die unterschiedlichen Umgebungen. Wir zeigen, wie man die optimale Plattform für seinen Zweck konfiguriert.

Mitte des Jahres 2014 befand sich der Begriff „Cloud Computing" erstmals in der Talsohle des „Gartner Hype Cycles". Der Wirbel um die neue Technologie hatte sich gelegt, manch eine Erwartung wurde enttäuscht und es galt, das ein oder andere Hindernis zu überwinden. Heute – fast vier Jahre später – haben sich die Ansätze, die hinter der Cloud-Technologie stehen, weiterentwickelt und haben ihren Weg in den Alltag gefunden.

Auch wenn manche Medien immer noch hartnäckig von „der Cloud" sprechen, könnten die damit gemeinten Ökosysteme nicht unterschiedlicher sein. Allein der Blick in die größten verfügbaren Cloud-Lösungen (Microsoft Azure, Amazon Web Services, Google Cloud Platform, Telekom Cloud) zeigt, die mit der Technik einhergehende Qual der Wahl.

Aber welche Plattform ist die beste für meinen Zweck? Welcher Anbieter hat die besten Konditionen? Wer hat die meisten Features? Und nicht zuletzt: Was will der Kunde? Man muss sich also frühzeitig für eine Plattform entscheiden, um zu vermeiden, für mehrere Plattformen schulen und entwickeln zu müssen. Auch wenn sich damit der Aufbau von parallelen/redundanten Strukturen vermeiden lässt, birgt es jedoch auch das Risiko, sich zu stark an einen Anbieter zu binden.

Docker: der kleinste gemeinsame Nenner

Neben all den Unterschieden im Cloud-Geschäft gibt es jedoch meist eine Gemeinsamkeit – Docker! Das Tool hat sich mittlerweile als quasi Industriestandard für die Bereitstellung von virtualisierten Containern durchgesetzt. Da Docker von Haus aus nur Werkzeuge für die Verwaltung von reinen Containern mitbringt, hat das Entwicklerteam mit „Docker Swarm" nachgelegt, um auch die Verwaltung von ganzen Clustern zu ermöglichen. Leider konnte die Erweiterung den ursprünglichen Erfolg nicht wiederholen und wurde durch Kubernetes – aus dem Hause Google – überholt.

Kubernetes ist ebenfalls ein Werkzeug zur Bereitstellung und Verwaltung von Clustern, bietet jedoch den Vorteil, flexibler und (theoretisch) nicht an Docker Container gebunden zu sein. So ist das Aufsetzen einer Anwendungsumgebung, inklusive Load-Balancing, Skalierung, benötigte Datenbanken und Services – nur noch ein Yaml-File entfernt (Stichwort: „Infrastructure as code"). Kubernetes füllt also die von Docker Swarm hinterlassene Leere und erfreut sich mittlerweile großer Beliebtheit und guter Unterstützung seitens der etablierten Cloud-Provider.

Und, was macht Rancher?

Zusammengefasst: Docker fungiert als Container-Bereitsteller, während Kubernetes diese in Clustern bündelt und eine vom Anbieter weitgehend unabhängige Verwaltung ermöglicht. Wozu braucht es also noch ein weiteres Tool? Rancher schließt die letzte verbliebene Lücke in der Integration von Cloud-Umgebungen. So lassen sich mit Rancher beispielsweise die auf Azure deployte Produktions-Cloud, die bei Amazon laufende Staging-, sowie die lokal „on premises" gehostete Test-Umgebung in einem Tool verwalten.

Will ich auch!

Neben einigen Stolpersteinchen, die sich einem unter Umständen in den Weg legen könnten, ist der Weg zu einer laufenden Rancher Instanz relativ geradlinig. Und so geht's:

Wichtig: Der Host sollte über eine statische IP-Adresse und einen DNS-Namen verfügen, um später auch problemlos erreichbar zu sein.

1. Swap deaktivieren

Wir beginnen den Prozess also mit einer frischen CentOS 7 Installation, die bereits über eine statische IP-Adresse verfügt. Wurde während des Installationsprozesses eine swap-Partition erstellt, muss diese zuerst deaktiviert werden. Das Vorgehen hierzu, ist an dieser Stelle ausführlich beschrieben, weswegen ich gerne darauf verweisen möchte.

Wichtig ist hierbei lediglich, dass die Partition permanent deaktiviert wird, da Kubernetes ansonsten, nach dem nächsten Neustart, nicht mehr richtig funktionieren würde.

2. SELinux deaktivieren

Leider versteht sich Kubernetes nicht optimal mit SELinux, weswegen wir dieses kurzerhand über eine Anpassung der /etc/selinux/config-Datei deaktivieren. Dazu wird die Zeile

 

SELINUX=[...]

 

in

 

SELINUX=disabled

 

abändern und das System neu starten.

3. Docker installieren

Docker ist – abhängig von der Downrate – schnell installiert. Ein

 

yum install -y docker

 

genügt. Das standardmäßige CentOS-Repository bietet dankenswerter Weise auch gleich die passende Docker-Version an. Um den Docker auch standardmäßig mit jedem Systemstart anlaufen zu lassen, wird der entsprechende Service mittels systemctl aktiviert.

 

systemctl enable docker

 

Um den nächsten Neustart nicht abwarten zu müssen, lässt sich Docker über den folgenden Befehl sofort starten:

 

systemctl start docker

 

4. Rancher-Container starten

Rancher wird äußerst komfortabel über ein Docker-Image bereitgestellt. Es lohnt sich jedoch den auf der Projekt-Webseite angegebenen Befehl, für die eigenen Bedürfnisse anzupassen.

Die erste lohnenswerte Anpassung ist ein Volume-Mapping des Konfigurationsverzeichnisses. Rancher nutzt dazu das /var/lib/rancher-Verzeichnis innerhalb des Containers. Damit dessen Inhalte auch nach einer Neuerstellung des Containers erhalten bleiben, lässt sich das Verzeichnis über ein entsprechendes Docker-Argument (-v PFAD_AUF_HOST:/var/lib/rancher) auf ein Verzeichnis des Hosts mappen.

Rancher bringt eine Konfigurationsoberfläche mit sich, die standardmäßig über Port 80 (Http) und 443 (Https) bereitgestellt wird. Die Nutzung der üblichen Protokoll-Ports ermöglicht zwar einen unkomplizierten Zugriff auf die Verwaltungsoberfläche, führt jedoch zu einem späteren Port-Konflikt mit deployten Anwendungen. Enthalten diese ebenfalls eine Weboberfläche, die über den Ingress-Mechanismus zugreifbar gemacht werden sollen, benötigt dieser ebenfalls eine Bindung an diese Ports.

Die Ports für die Verwaltungsoberfläche können daher, über ein benutzerdefiniertes Mapping, umgelegt werden (-p HOST_HTTP_PORT:80 und -p HOST_HTTPS_PORT:443). In unserem Beispiel haben wir die Ports, durch das Voranstellen einer Acht, auf 880 (HTTP) und 8443 (HTTPS) gelegt. Der vollständige Befehl lautet dann:

 

docker run -d --restart=unless-stopped \

    -p 8443:443 \

    -p 880:80 \

    -v /host/rancher:/var/lib/rancher \

    rancher/rancher:v2.0.6

 

5. Web-Oberfläche verfügbar machen

Damit die Administrationsoberfläche auch von außerhalb erreichbar ist, müssen die entsprechenden Ports (880/tcp und 8443/tcp) in der Firewall freigegeben werden. Um einen Wildwuchs an Portfreigaben zu vermeiden, legt der folgende Befehl eine neue Service-Definition mit dem Namen „rancher-admin" an, welcher die beiden Ports anschließend zugeordnet werden. Zu guter Letzt wird der definierte Service für die aktuelle Zone (in diesem Fall ist das „public") freigeschalten und die Firewall-Konfiguration neu geladen.

 

firewall-cmd --permanent --new-service=rancher-admin

firewall-cmd --permanent --service=rancher-admin --add-port=880/tcp

firewall-cmd --permanent --service=rancher-admin --add-port=8443/tcp

firewall-cmd --permanent --zone=public --add-service=rancher-admin

firewall-cmd --reload

 

   

6. Initiale Konfiguration

Besucht man die Weboberfläche (unter HOST_ADDRESS) zum ersten Mal, wird man von Rancher dazu aufgefordert ein initiales Administrator-Passwort zu vergeben.

Hat man diesen Schritt abgeschlossen, muss nun eine Server-URL angegeben bzw. die automatisiert ermittelte Adresse bestätigt werden.

Wichtig ist hierbei insbesondere der Hinweis, dass die Adresse von jeder Umgebung aus, in der ein Cluster betrieben werden soll, erreichbar sein muss. Ansonsten hätten die Cluster-Nodes keine Möglichkeit, mit der API zu kommunizieren.

7. Erstes „on premise" Cluster einrichten

Wie ein neu gebautes Haus, sieht auch die Rancher-Oberfläche erstmal etwas leer und karg aus.

Um sie mit etwas Leben (in Form eines ersten Clusters) zu füllen, benötigt es nicht viel mehr als einen Klick auf den „Add Cluster"-Button.

Dort wählt man unter der Überschrift „From my own existing nodes", die Option „Custom" und vergibt einen Namen für das zu erstellende Cluster.

Sieht man von einer Anpassung der Detail-Optionen – die für ein erstes Walkthrough nicht relevant sind – ab, können im nächsten Schritt die benötigten Docker-Befehle generiert werden.

Der schwarze Kasten enthält hierbei den Docker-Befehl, der zum Start eines passenden Cluster-Nodes benötigt wird. Die Detail-Einstellungen finden sich – wie in Rancher üblich – weiter unterhalb.

In diesem Beispiel wird ein Node erzeugt, der alle Cluster-Rollen gleichzeitig ausfüllt. In produktiven Clustern können die Rollen jedoch auch auf mehrere Nodes verteilt werden.

Der generierte Docker-Befehl kann nun sehr bequem auf jedem geeigneten Host ausgeführt werden. „Geeignet" bedeutet in diesem Fall, dass er die im Befehl angegebene Server-Adresse erreichen können und selbstverständlich über eine Docker-Installation verfügen muss. In Version 2.0.X unterstützt Rancher lediglich Linux-Nodes, der Support von Windows-Systemen ist jedoch für Version 2.1 – welches laut Roadmap im Q3 2018 erscheinen soll – vorgesehen.

Sobald die durch den Befehl erzeugten Docker-Container erfolgreich angelaufen sind, erscheint innerhalb der Weboberfläche die obig dargestellte Erfolgsmeldung. Wenn keine weitere Node hinzugefügt werden soll, kann der Assistent nun durch einen Klick auf „Done" abgeschlossen werden.

Das nach Verlassen des Wizards angezeigte Dashboard zeigt nun den aktuellen Status des neu erstellten Clusters. Dieser sollte zum jetzigen Zeitpunkt einige Warnungen bezüglich der noch laufenden Initialisierung aufweisen. Ist diese nach ca. zwei bis zehn Minuten abgeschlossen, bietet die Übersicht den folgenden Einblick in das nun fertig eingerichtete Cluster.

Wie geht es weiter?

Wir haben in diesem Blogpost eine funktionsfähige Testumgebung, für die nun folgenden ersten Schritte mit Kubernetes, aufgebaut. Als Nächstes, können erste Workloads deployt und über einen Ingress bereitgestellt werden. Wie das geht, erläutert der von Rancher bereitgestellte Quickstart Guide zu diesem Thema bzw. ein für die Zukunft geplantes Follow-Up zu diesem Blog-Posts.

Further Reading

Diesen Artikel weiterempfehlen

 Teilen  Teilen  Teilen  Teilen