Wie können wir helfen?

Photon OS 4.0 & Docker Swarm & Portainer

Du bist hier:
< Alle Themen

Hier findest du eine Anleitung für die Installation von VMware Photon-OS 4.0 unter einer ESXi Umgebung.
Dazu kommt noch die Installation einer kompletten Docker Swarm Umgebung mit Portainer als grafische Oberfläche.

Für die komplette Umgebung verwende ich 4 physikalische Server (HP ML und DL) wobei auf jeden HP-Server eine VMware Virtualisierung (ESXi) läuft und untereinander mit 10GBit verbunden sind. 
Als Storage (persistentes Volume) verwende ich einen Synology HA Cluster der ebenfalls mit 10GBit angebunden ist. Zugegriffen wird per NFS4.

Ein “manager-host” bekommt:

  • 2 CPUs
  • 2 GB Arbeitsspeicher
  • 40 GB Festplatte

Ein “worker-host” bekommt:

  • 8 CPUs
  • 16GB Arbeitsspeicher
  • 40 GB Festplatte

Aufteilung der virtuellen Maschinen (Photon OS) auf den physikalischen Hosts

  • HOST 1
    virtuelle Maschine “container-manager-01”
    virtuelle Maschine “container-worker-01”

  • HOST 2
    virtuelle Maschine “container-manager-02”
    virtuelle Maschine “container-worker-02”
  • HOST 3
    virtuelle Maschine “container-worker-03”

  • HOST 4
    virtuelle Maschine “conatiner-worker-04”

Was ist Photon OS:

Photon OS ist ein minimalisiertes Linux Betriebssystem das von VMware speziell für die Virtualisierungsumgebung von VMware (ESX) erstellt wurde, dass nur das nötigste für eine komplette Docker Umgebung zur Verfügung stellt wobei der Linux Kernel für die VMware ESX Virtualisierung optimiert wurde. 
Detaillierte Informationen erhalten Sie unter: https://vmware.github.io/photon/

Warum dieses Tutorial?

Photon OS unterscheidet sich bei der Bedienung doch erheblich von diversen Standard Distributionen wie “Ubuntu, Debian, RedHat, …” 

In diesem Tutorial geht es um die Installation von Photon OS in einer ESXi Umgebung, wie man einen Docker Swarm Installation durchführt und diverse nötige Tool nachinstalliert bzw Probleme vorbeugt.

 

Table of Contents

Installation des Betriebssystem Photon OS 4.0

Ich verwende für die Installation das Betriebssystem das Minimalistische ISO mit UEFI. 
Als ersten Schritt muss das ISO Image aus dem Internet runter geladen werden und lokal gespeichert werden.
Link ISO Image: https://packages.vmware.com/photon/4.0/Rev2/iso/photon-minimal-4.0-c001795b8.iso
Link Liste von Images: Downloading Photon OS · vmware/photon Wiki · GitHub
Nachdem das Images lokal gespeichert wurde, muss diese ISO in die ESX Umgebung hochgeladen werden.
Somit können wir nun einen neue ESX-Maschine erstellen:

ESX-Host erstellen:

Auswahl von “Neue virtuelle Maschine erstellen”

 

Als Name vom VM-Hosts verwende ich “container-manager-01” für den ersten Docker Swarm-Manager.
Wichtig ist das hier als Betriebsystem Linux und VMware Photon OS ausgewählt wird.

Im nächsten Fenster wählen Sie bitte den zu verwendenden Speicher aus. 
In meinen Fall ist dies ein HA NFS Cluster Store.

Jetzt kommen wir zu den eigentlichen Host Einstellungen:
Für den Manager brauchen wir nicht so viele Ressourcen da hier keine Container ausgeführt werden sondern dieser nur für die Swarm Verwaltung zuständig ist.

Abschließend noch einmal alle Einstellungen im Überblick. 
Nun den Abschließen durch “Beenden” und den VM-Host starten.

 

Starten und Installieren von Photon OS 4.0

Mit “Enter” starten wir die Installation

Lizenz Bestimmungen müssen angenommen werden um mit der Installation fortzufahren.

Jetzt Erfolg die Auswahl vom Festplattenspeicher.
Da wir nur eine Festplatte beim ESX Host angegeben haben wieder ausgewählt und bestätigt. 

Für die Netzwerkkonfiguration verwende ich eine DHCP Server mit Failover somit ist sichergestellt das dieser auch immer eine IP-Adresse (fix definiert) zugewiesen bekommt.

Da wir in einer ESX VM Arbeiten können wir hier den Kernel mit hypervisor Optimierung auswählen. 

Jetzt wird der Host-Name definiert. 

Die Angabe vom “root” Kennwort sollte gut gewählt sein. 

Das Kennwort muss aus Sicherheitsgründen erneut bestätigt werden.

Letzter Hinweis das nun alle Daten auf der Festplatte gelöscht werden und somit die eigentliche Installation beginnen kann. 

Die Installation vom Photon OS 4 läuft nun selbständig durch. 

Meine Installation wurde nach nur 37sec. abgeschlossen. 

Nachdem alles Ordnungsgemäß installiert wurde startet der Server neu und zeigt uns in wenigen Sekunden den Login. 

 

Installation nun für alle ESX-Hosts (manager, worker) wiederholen.

Ich verwendet 4 physikalische ESX Hosts. 
Auf ESX Host 1 und 2 werden lediglich ein Docker Worker Host installiert (container-worker-03, container-worker-04)
Auf ESX Host 3 und 4 werden jeweils mit 2 Hosts installier wobei einer ein Worker und ein Manager läuft.

Die Aufstellung sieht bei mir dann wie folgt aus:

  • ESX HOST 1: container-worker-03 (docker worker node)
  • ESX HOST 2: container-worker-04 (docker worker node)
  • ESX HOST 3:
    container-master-01 (docker manager 1)
    container-worker-01 (docker worker node)
  • ESX HOST 4:
    container-master-02 (docker manager 2)
    container-worker-02 (docker worker node)

Einloggen in die einzelnen Hosts und Grund Installation vervollständigen 

Wir Loggen uns nun mit den “root” Benutzer ein und geben das zuvor definiert Passwort an.

 

Update und aktualisieren der Pakete von Photon OS 4

Durch den Befehl “tdnf check-update” werden nun alle Paket-Quellen überprüft und Pakete für die Aktualisierung angezeigt 

Mit den Befehl “tdnf distro-sync” werden nun alle verfügbaren Update aus dem Internet abgeholt und installiert.

Nach Eingabe des Befehls wird nun nochmals die Paket-Liste geprüft und gefragt ob an diese Aktualisierungen installieren möchte. Also mit “y” bestätigen.

Nach erfolgreicher Installation aller Paket landet man wieder in der Kommandozeile:

Nachinstallation diverser Pakete.

Folgende Pakete sollten nun zusätzlich installiert werden.

  • mc
    Ein Tool zum Navigieren Verzeichnisse und Dateien.
  • nano
    Notwendiges Tool zum editieren von Dateien (in diesem Tutorial)
  • ethtool
    Notwendig um diverse Netzwerk-Interface Einstellungen vor zu nehmen
  • bindutils
    Verwende ich meist um per nslookup DNS-Probleme zu analysieren.
Installiert werden diese Paket mit den Befehl “tdnf install mc ethtool”

 

Remote Connect durch SSHd und Putty

Nach erfolgreicher Installation sollte nun die SSHd Konfiguration angepasst werden damit man sich z.B. per Putty von der Workstation aus verbinden kann. (Kein muss)
Dazu ist es notwendig das man die SSHd Konfiguration so anpasst das ein Login mit dem User “root” zulässig ist.
Aus Sicherheitsgründen passe ich den Listener-Port auch an. Ich verwende den Port 2222.

 

Nachdem die Datei geöffnet wurde müssen folgende Einträge angepasst werden: 

“PermitRootLogin” von “no” auf “yes”
“Port” von “22” auf “2222” (das Raute vor Port muss natürlich entfernt werden)

Speichern mit “F2” oder “ESC+2”. und mit F10 oder “ESC-0” den MC Editor wieder verlassen.

Deaktivieren der IPTables Firewall 

Die iptables Firewall die per Standard aktiviert ist benötige ich in meinen Aufbau nicht und wird daher deaktiviert. 

“systemctl stop iptables” und “systemctl disable iptables”

Deaktivieren des systemd-resolved

Ich verwende einen separaten internen DNS Server der mit dem systemd-resolved Probleme verursacht. Dadurch wird dieser deaktiviert und fix mein internet DNS Server angegeben.

“systemctl stop systemd-resolved” und “systemctl disable systemd-resolved”

Nach dem deaktivieren wird die Datei /etc/resolv.conf wie folgt angepasst:
Pro DNS-Server muss ein “nameserver” Eintrag angelegt werden. In meinen Fall sind das 2 mit der IP: 10.10.40.140 und 10.10.40.141. Als Search-Domain verwende ich “netbits.local” um die DNS-Anfragen automatisch mit netbits.local zu erweitern.

 

Aktivieren von IP_NONLOCAL_BIND

Für den Einsatz von “keepalived” muss die Sysctl Einstellung “net.ipv4.ip_nonlocal_bind” auf “1” gesetzt werden. 
Dazu erstellen wir eine neue Datei “/etc/sysctl.d/10-keepalived.conf” mit den oben angegebenen Inhalt. 
Befehl: echo “net.ipv4.ip_nonlocal_bind=1” > /etc/sysctl.d/10-keepalived.conf

 

Deaktivieren der TX Checksummenprüfung (VMware Bug)

VMWare hat per Standard auf allen Netzwerk-Interfaces die TX Checksummenprüfung aktiviert. Dies führt dazu das in einer Docker Umgebung die Nodes nicht richtig Kommunizieren können. 
Es muss auf jeden einzelnen Host die Checksummenprüfung deaktiviert werden.

Dies wird durch den Befehl “ethtool -K eth0 tx-checksum-ip-generic off” ausgeführt.

 

 

Jetzt aktivieren wir die Docker-Engine und sagen dem Linux das wir dies beim Starten vom System automatisch erfolgen soll.

Zum Abschluss starten wir die Maschine mit den Befehl “reboot” neu. 
Nach dem Neustart können wir uns nun mit z.B. “Putty” oder einen anderen SSH Client mit den einzelnen Hosts verbinden

 

Putty (SSH)-Verbindung  herstellen.

 
 

Docker Swarm installieren

Docker Manager 01 (container-master-01)

Beim Ersten Docker Manager per SSH Verbinden und den Docker Swarm aktivieren mit “docker swarm init”

Docker Manager 02 (container-master-o2)

Beim zweiten Docker Manager per SSH Verbinden und diesen als weiteren Docker Manager an den Swarm Anbinden.
Dazu muss am ersten Docker-Manager (container-master-01) folgender Befehl ausgeführt werden um die nötigen Informationen zu erhalten. 

“docker swarm join-token manager”

Diesen Befehl führen wir dann im Docker-Manager-02 (container-master-02) aus.

 

Docker Worker 01-04 (container-worker-01/04)

Dieser Vorgang muss nun für alle Docker Swarm Worker (Nodes) durchgeführt werden. Der Aufruf am Docker Manager (container-manager-01) muss nur ein einzigen mal durchgeführt werden. Den Angezeigten Befehl kann dann auf alle Worker (Nodes) verwendet werden.

“docker swarm join-token worker”

 

 

 

Deaktivieren der TX Checksummenprüfung (VMware Bug)

VMware hat per Standard auf allen Netzwerk-Interfaces die TX Checksummenprüfung aktiviert. Dies führt dazu das in einer Docker Umgebung die Nodes nicht richtig Kommunizieren können. 
Es muss auf jeden einzelnen Host die Checksummenprüfung deaktiviert werden.

Die Checksummenprüfung wird durch den Befehl “ethtool -K eth0 tx-checksum-ip-generic off” deaktiviert. Bei einem Neustart der Maschine muss der Befehl erneut eingegeben werden. Damit dies nicht jedes mal ausgeführt werden muss legen wir unter “/usr/lib/systemd/” eine neue Datei “systemd-networkd-ethtool” an. 

nano /usr/lib/systemd/systemd-networkd-ethtool

Der Inhalt dieser Datei muss wie folgt aussehen:

#!/bin/bash

ethtool -K eth0 tx-checksum-ip-generic off

Jetzt müssen wir der Datei noch die korrekten Rechte zuweisen.

chmod 755 /usr/lib/systemd/systemd-networkd-ethtool

Damit dieses Script über systemd auch automatisch ausgeführt werden kann muss noch eine weitere Datei angelegt werden:

nano /usr/lib/systemd/system/systemd-networkd-ethtool.service

Der Inhalt der Datei sollte wie folgt aussehen

[Unit]
Description=Setup ethtool settings for interface (BUG VMWare)
DefaultDependencies=no
Conflicts=shutdown.target
Requires=systemd-networkd-wait-online.service
After=systemd-networkd-wait-online.service

[Service]
Type=oneshot
ExecStart=/usr/lib/systemd/systemd-networkd-ethtool
RemainAfterExit=yes

[Install]
WantedBy=network-online.target
 

Wenn alle Dateien korrekt erstellt wurden, dann teilen wir systemd mit, dass  dieses Script beim starten ausgeführt werden soll:

systemctl enable systemd-networkd-ethtool

Wenn alles korrekt war dann sollte folgende Ausgabe erscheinen:

Es sollte nun die Maschine neu gestartet werden um zu kontrollieren ob das Script Ordnungsgemäß ausgeführt wurde.

Mit den nachstehenden Befehl kann kontrolliert werden ob die Checksummenprüfung deaktiviert wurde. Es muss bei allen “off” angegeben sein!

ethtool -k eth0 | grep tx-checksum

Installation Portainer

Portainer ist eine Weboberfläche die das Verwalten vom Docker Swarm wesentlich vereinfacht. Auch die Installation ist in wenigen Zügen vollzogen.

Als erstes verbinden wir uns per SSH auf den Manager-Host “container-master-01”

Es gibt 2 Varianten von Portainer:

  1. Die Community Edition 
  2. Die Business Edition die für 5 Nodes Frei ist.

Details kann man unter Portainer-Produkte erfahren
Ich verwende die Business Edition.

Durch den Befehl: 

Business Edition: 
curl -L https://downloads.portainer.io/ee2-13/portainer-agent-stack.yml -o portainer-agent-stack.yml

Community Edition:
curl -L https://downloads.portainer.io/portainer-agent-stack.yml -o portainer-agent-stack.yml

wird die Stack Konfiguration für die jeweilige Edition heruntergeladen. 

Nach den erfolgreichen Download muss nur noch dieses file Deployed werden. 
Dies erreichen wir doch folgenden Befehl:

docker stack deploy -c portainer-agent-stack.yml portainer

Das deployen kann etwas dauern und kann mit folgenden Befehl geprüft werden

docker ps

 

Wenn die Ausgabe beide Container der Status auf UP ist dann läuft nun Portainer im Docker Swarm.

Nach dem erfolgreichen deploy sollte nun die Portainer Oberfläche unter

https://{IP VON MANAGER}:9443

erreichbar sein.
Das wars auch schon mit der Installation für Portainer.

Docker Plugins installieren

Loki Logging Driver

docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions
docker plugin ls
 Nun muss bei jeden Host die Datei “/etc/docker/daemon.json” erstellt werden und docker selbst neu gestartet werden.
nano /etc/docker/daemon.json

Diese Datei muss mit folgenden Inhalt gefüllt werden:

{
"log-driver": "loki",
"log-opts": {
"loki-url": "http://loki:3100/loki/api/v1/push",
"loki-batch-size": "400"
}
}
Inhaltsverzeichnis