Benutzer-Werkzeuge

Webseiten-Werkzeuge


projekte:docker:start

Docker Swarm Hausautomationscluster

Ausgangslage

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:

  • Cluster bzw. feste IP Adresse(n) damit z.B. der Pihole DNS unter immer unter der gleichen Adresse erreichbar ist.
  • Die Möglichkeit die Verteilung der Container auf einzelne Docker Nodes zu beschränken.
  • Kein extra Loadbalancer sei es Hardware oder Software.

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:

  • 4-6 Raspberry PIs (PI 4 Model B, mindestens 2GB besser 4/8GB)
  • Gemeinsamer Storage per NFS (bei mir eine Synology)
  • Zwei Zigbee USB-Sticks (fuer Xiaomi/aqara Devices)
  • Eventuell eigener 8-Port Switch

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.

Installation/Clusteraufbau

Docker/Anwendungsbasis:

  1. 4-n Raspberry PIs mit Betriebssystem
  2. keepalived (Daemon um eine oder mehrere Cluster-IPs zur Verfügung zustellen)
  3. docker (Der Name sagt es schon, docker eben)
  4. docker-compose (Um Konfigurationen zu Container und Stacks/Services in Textdateien zu definieren)
  5. Docker Swarm (Die Clusterumgebung/-unterstützung für docker)
  6. portainer (Der erste Container mit dem man die folgenden Container in einer Wewboberfläche verwalten kann)
  7. traefik (Container der als Loadbalancer für die Dienste arbeitet)
  8. docker-registry (Um Container und Images lokal zu halten so das alle Dockernodes darauf zugreifen koennen)
  9. docker-viz (Grafische Docker Swarm Ansicht im Browser)

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

Anwendungscontainer

  1. apache2 als Proxy für die Homematic CCU und andere Infoseiten.
  2. Pihole als DNS-Server /Werbeblocker
  3. node-red zur Automatisierung von Abläufen im Smarthome
  4. influxdb zur Datenhaltung für grafana aus verschiedenen Quellen
  5. grafana Datenvisualisierung, Kurven, Blockdiagrame etc
  6. iobroker Integration von weiteren Komponenten ins Smarthome

Geplante Anwendungscontainer

  1. Rhasspy als echthe offline Spracherkennung für die Hausautomation
  2. Homematic zur Ablösung der CCU3
projekte/docker/start.txt · Zuletzt geändert: 2022/12/07 15:47 von admin