Vorbereitungen für OpenShift 3.4 Docker-Setup für die OpenShift Container Plattform
Nachdem die Master- und Container-Nodes für die Installation von OpenShift vorbereitet wurden, könnte man den größten Teil der folgenden Installations- und Konfigurationsschritte eigentlich Ansible überlassen. Trotzdem hat es sich bewährt, die Installation von Docker vorab auf allen beteiligten Hosts manuell zu erledigen, was u. a. mehr Einfluss bei der Konfiguration des Docker-Storage erlaubt.

Mit den grundlegenden Vorbereitungen für die Installation der OpenShift Container Platform haben wir uns bereits befasst. Wurden die zwingend erforderlichen Basispakete von Red Hat Enterprise Linux 7 (RHEL 7) auf allen beteiligten OpenShift-Master- und Container-Nodes installiert, empfiehlt es sich, die Docker-Installation auf sämtlichen Nodes bereits jetzt zu erledigen. Dieses Vorgehen erlaubt es nämlich, das Konfigurieren des Docker-Storage „vor“ der eigentlichen Installation von OpenShift-Container-Plattform durchzuführen.
Docker-Konfiguration
Auf Basis von RHEL-7-Systemen erfolgt das Installieren von Docker 1.12 (ältere Versionen werden hier nicht unterstützt) mit
yum install docker
bzw.
dnf install docker
Auf Hosts/Nodes mit RHEL Atomic Host 7 hingegen sollte Docker in der Regel installiert und konfiguriert sein und bereits laufen. Beim Aufsetzen von Atomic stellt das erwähnte Paket „atomic-openshift-docker-excluder” sicher, dass mit dem „install docker“-Befehl auch die korrekte Docker-Version 1.12 installiert wurde, was sich durch Eingeben von
docker version
ermitteln lässt.
Nun gilt es, die Docker-Konfigurationsdatei /etc/sysconfig/docker mit einem Editor manuell zu bearbeiten und den Eintrag „--insecure-registry 172.30.0.0/16” als OPTIONS-Parameter hinzuzufügen:
OPTIONS='--selinux-enabled --insecure-registry 172.30.0.0/16'
Bei der Installationsmethode „Automatic“ wird die Datei /etc/sysconfig/docker übrigens automatisch angepasst. Die Option „--insecure-registry” weist den Docker-Daemon an, lieber jeder Docker-Registry im angegebenen Subnetz zu vertrauen, als ein Zertifikat anzufordern.
Hinweis: Das Subnetz 172.30.0.0/16 fungiert als Default für die Variable „servicesSubnet“ in der Master-Konfigurationsdatei „master-config.yaml“. Etwaige Änderungen hier müssten also ggf. dann beim Wert für „--insecure-registry“ angepasst werden, weil es sich um das Subnetz für die Docker-Registry handelt.
Übrigens lässt sich die Variable „openshift_master_portal_net“ auch in Ansible-Inventory-Dateien verwenden, um auch bei der Advanced-Installationsmethode die „servicesSubnet“-Variable anpassen zu können. Ist später die initiale Installation der OpenShift Container Platform erledigt, lassen sich die Sicherheitseinstellungen für die integrierte Docker-Registry jederzeit durch Anpassen von „ --insecure-registry“ entsprechend ändern.
Das Konfigurieren von Docker Storage
Container und die aus ihnen erzeugten Images werden üblicherweise im Storage-Backend von Docker abgelegt. Dieser Speicher ist quasi flüchtig und völlig getrennt von jeder Art persistenten Speichers, der den „Anforderungen“ der jeweiligen Applikationen genügt. Die Konfiguration unterscheidet sich je nachdem, ob Docker unter RHEL Atomic Host oder RHEL betrieben wird.
Im ersten Fall ist das Standard-Storage-Backend für Docker ein „thin“ provisioniertes Pool-Logical-Volume, das auch für Produktionsumgebungen unterstützt wird. Der Nutzer muss lediglich sicherstellen, dass ausreichend Platz für dieses Volumen vorhanden ist. Wie im dritten Teil dieser Workshop-Reihe erwähnt, sollten das mindestens 15 GB nicht zugewiesener Platz sein. Details dazu lassen sich dem Abschnitt Storage-Anforderungen in den Docker-Systemanforderungen entnehmen.
Default-Docker-Storage vor RHEL
Das Standard-Storage-Backend für Docker auf RHEL-7-Systemen ist ebenfalls ein Thin-Provisioning-Pool. Der per Default auf Loopback-Devices eingerichtete Pool eignet sich aber in dieser Form nur für Proof-of-Concepts.
:quality(80)/images.vogel.de/vogelonline/bdb/1197400/1197422/original.jpg)
Virtual Networking mit Docker und OpenShift
Funktionsweise von OpenShift 3.4
In Produktionsumgebungen muss der Nutzer selbst ein thin provisioniertes Pool-Logical-Volume erstellen und Docker dann neu konfigurieren, damit das Volume verwendet werden kann. Administratoren können das in Docker enthaltene Skript „docker-storage-setup“ nutzen, um ein thin provisioniertes Pool-Device zu erstellen und den Storage-Treiber von Docker zu konfigurieren.
Das funktioniert nach der Installation von Docker, muss aber in jedem Fall „vor“ dem Erstellen von Images und Containern, also auch vor der Installation von OpenShift erfolgen. Das Skript liest Konfigurationsoptionen aus der Datei /etc/sysconfig/docker-storage-setup und unterstützt dabei drei Optionen zum Erstellen des logischen Datenträgers:
- 1. Verwenden eines zusätzlichen Block-Devices
- 2. Verwenden einer vorhandenen, hier anzugebenden LVM-Volume Group (LVM)
- 3. Verwenden des noch freien Speichers der Volume-Group des Root-Dateisystems (RHE).
Option 1 führt verständlicherweise zum robustesten Design, erfordert jedoch das Bereitstellen zusätzlichen Block-Storages am Docker-Host „vor“ der Konfiguration von Docker, während die Optionen 2 und 3 „nur“ ausreichend freien Platz auf dem Docker-Host erwarten. Für Option 1 geht man zum Erzeugen des Docker-Pools wie folgt vor;
Für das zusätzliche Block-Gerät muss zunächst in „/etc/sysconfig/docker-storage-setup” mit der Option „DEVS“ der Pfad zum gewünschten Block-Gerät gesetzt werden. Danach setzt man mit der Option „VG“ den gewünschten Namen der neuen Volume Group (hier docker-vg).
DEVS=/dev/vdc
VG=docker-vg
Option 2 nutzt eines existierenden Volume-Group. In „/etc/sysconfig/docker-storage-setup“ steht dann beispielsweise nur
VG=docker-vg
In Option 3 wird schlicht freier Platz im root-Filesystem verwendet. Ist der nicht vorhanden, müsste man vorher zusätzlichen Platz im Host bereitstellen und danach die Volume Group (mit vgextend) und dann das Volume (mit lvextend) vergrößern.
Bei Option 3 kann man also „docker-storage-setup“ direkt ausführen. Anschließend überprüft man, ob in der Datei /etc/sysconfig/docker-storage das neue logische Volume eingetragen ist, bei Option 3 /dev/mapper/docker--vg-docker--pooll
DOCKER_STORAGE_OPTIONS=--storage-opt dm.fs=xfs --storage-opt
dm.thinpooldev=/dev/mapper/docker--vg-docker--pool
Das Kommando „lvs“ zeigt die vorhandenen Volume Groups an:
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
docker-pool rhel twi-a-t--- 9.29g 0.00 0.12
Bevor man Docker verwendet bzw. die OpenShift-Container-Plattform aufsetzt, muss in jedem Fall sichergestellt sein, dass das logische Volume des Docker-Pools groß genug dafür ist, die eigenen Anforderungen zu erfüllen. Das Docker-Pool-Volume muss mindestens 60 Prozent des verfügbaren Platzes der Volume Group aufnehmen können und wird aufgrund des thin-provisionierten Typs von LVM bei Bedarf dynamisch vergrößert. Sollte Docker noch nicht für den automatischen Start auf dem betreffenden Host eingerichtet sein, muss noch das Kommando
systemctl enable docker
abgesetzt werden. In jedem Fall ist es nach der Rekonfiguration von Docker erforderlich, Docker zu reinitialisieren. Dazu stoppt man zunächst Docker mit:
systemctl stop docker
Mit
rm -rf /var/lib/docker/*
werden dann alle auf den Host vorhandenen Container und Images zerstört. Danach muss Docker neu gestartet werden.
systemctl restart docker
Jeglicher in /var/lib/docker/ befindliche Inhalt muss im Übrigen gelöscht werden.
:quality(80)/images.vogel.de/vogelonline/bdb/1197400/1197415/original.jpg)
Effizienter entwickeln in der PaaS
Architektur von OpenShift 3.4
:quality(80)/images.vogel.de/vogelonline/bdb/1197400/1197422/original.jpg)
Virtual Networking mit Docker und OpenShift
Funktionsweise von OpenShift 3.4
:quality(80)/images.vogel.de/vogelonline/bdb/1206500/1206569/original.jpg)
OpenShift On-Premise
OpenShift Container Plattform 3.4 installieren
(ID:44600333)