Vorbereitungen für OpenShift 3.4 Docker-Setup für die OpenShift Container Plattform

Autor / Redakteur: Dipl. -Ing. Thomas Drilling / Stephan Augsten |

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.

Vor der Installation von OpenShift Container Platform steht die Konfiguration von Docker.
Vor der Installation von OpenShift Container Platform steht die Konfiguration von Docker.
(Bild: Gitlab)

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.

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/vdcVG=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-optdm.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 Convertdocker-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.

(ID:44600333)