Ich habe zur Zeit einige Anwendungen wie einen Apache Proxy für Homematic, Pi-Hole, Iobroker und andere auf vier Raspberry PIs laufen und hatte jetzt gerade mit Rhasspy zur Spracherkennung und -steuerung für Homematic angefangen. Da es auch ein Docker Image für Rhasspy gibt kam die Idee auf erstmal einen Docker Swarm Cluster mit den noch vorhandenen zwei Raspberry Pis aufzubauen (3 Manager und 3 Worker Nodes) um flexibler zu sein und auch Updates der einzelnen Anwendungen einfacher zu machen. Desweiteren ist natürlich auch das ausprobieren neuer Anwendungen wesentich einfacher und sauberer möglich.
Dabei standen folgende Bedingungen im Vordergrund die dann auch die Konfiguration und Aufbau beeinflussten:
Vor allem erste Punkt ist wichtig da man bei Docker zwar den Container dann unter dem gleichen Port auf einem de anderen Nodes erreichen kann aber wenn man, wie bei der AVM Fritzbox, nur eine DNS-Server Adresse eintragen und im Heimnetz verteilen kann braucht man das unbedingt. Auch für andere Anwendungen wie den Apache Proxy brauche ich eine IP-Adresse die ich dann ansprechen kann. Oft wird bei Docker ein Loadbalancer vorgeschaltet aber das wollte ich nicht da damit wieder zwei Raspberry PIs verloren gehen, Stichwort Redundanz.
Die Lösung die ich aufgebaut habe kombiniert keepalived, ein einfacher Daemon der eine virtuelle IP zwischen verschiedenen Servern je nach Verfügbarkeit schwenken kann und traefik, einem Loadbalancer Container, der nicht nur http/https kann sondern auch z.B. Port 53 tcp und udp für DNS.
Die Voraussetzungen dafür sind leider auch Einiges:
Das Ganze soll dann schlussendlich so aussehen:
Die etwas willkürlich erscheinende Verteilung der IP-Adressen kommt daher das ich, die zukünftigen, dockerman03 und dockerwrk02 noch in Benutzung habe und erst nachher hinzufügen werde. Ihr könnt natürlich aufsteigende IP-Adressen benutzen.
Für die die es interessiert: Ich hatte zwei Cluster aus jeweils zwei PIs in Betrieb auf denen Apache Proxy, Pihole, Grafana und Iobroker installiert waren. Diese sollten ja gerade durch die Docker-Lösung abgelöst werden.
Zu einigen Punkten habe ich im Internet keine Lösung gefunden die alle meine Anforderungen erfüllt daher veröffentliche ich meine Lösung hier da ich glaube das auch andere diese Notwendigkeiten haben.
Docker/Anwendungsbasis:
Damit ist die Basis des Swarm Cluster mit fester IP Adresse (172.17.200.24/.25) fertig und kann für die eigentlichen Anwendungscontainer genutzt werden.
Um nicht den Überblick über die Container und deren Ports zu verlieren habe ich mir dafür eine Tabelle erstellt. Ich brauche ja für die meissten Container einen oder mehrere exklusive Ports über die dann darauf zugegriffen werden kann.
Port | Container | Anmerkung |
---|---|---|
80 | traefik | Loadbalancer für http |
443 | traefik | Loadbalancer für https |
8000 | Portainer | Zugriff für den Edge Agent, näheres dazu in Edge Agent Dokumentation |
8080 | traefik | Web Administrationsoberfläche |
9000 | Portainer | Webzugriff per http |
9443 | Portainer | Webzugriff per https |