Zum Hauptinhalt springen
  1. Beiträge/
  2. Kleines Homelab/
  3. k3s-prod: Kubernetes Cluster Konfiguration und Anwendungsbereitstellung/

Home Assistant

Inhaltsverzeichnis

Home Assistant
#

Quelle
#

Alle Controller werden über das app-template Helm-Chart von BJW-S Labs bereitgestellt. Die Konfiguration ist auf zwei Values-Dateien aufgeteilt:

Datei Inhalt
values.yaml Home Assistant, Matter-Server, OTBR
values-mosquitto.yaml Mosquitto MQTT-Broker

Dokumentation
#

Die offizielle Dokumentation von Home Assistant ist unter www.home-assistant.io/docs/ zu finden.

Funktion
#

Home Assistant (HA) ist eine Steuerungszentrale für Smart-Home-Geräte. Es integriert eine breite Palette von Geräten und Protokollen (Zigbee, Matter, Thread) und ermöglicht Automatisierungen, Geräteüberwachung und eine einheitliche Weboberfläche.

Netzwerk
#

Alle drei Controller (Home Assistant, Matter, OTBR) nutzen kein hostNetwork, sondern eine dedizierte Macvlan-Verbindung ins Heimnetz über Multus (NetworkAttachmentDefinition: home-net). Jedem Controller wird eine statische Dual-Stack-Adresse aus dem Heimnetz-Subnetz zugewiesen.

Ein Init-Container (busybox) konfiguriert auf jedem Pod IPv6-Routing für das net1-Interface (RA + Route-Info).

Services & Ingress
#

Service Typ Port Protokoll
homeassistant ClusterIP (Dual-Stack) 8123 HTTP
homeassistant-colot LoadBalancer (Dual-Stack) 5683 UDP (CoAP)
matter ClusterIP (Dual-Stack) 5580 TCP
otbr ClusterIP (Dual-Stack) 8080 (Web), 8081 (REST) HTTP
mosquitto LoadBalancer (Dual-Stack) 1883, 8883 TCP

Der Ingress wird über Traefik (websecure) mit TLS bereitgestellt. Die Middleware kube-system-localnet@kubernetescrd schränkt den Zugriff auf das lokale Netz ein. Das TLS-Zertifikat wird von cert-manager (letsencrypt-production) ausgestellt.

Speicher
#

PVC Größe Einbindung
home-assistant-config 100 Gi Home Assistant /config
home-assistant-matter 1 Gi Matter-Server /data
home-assistant-otbr 1 Gi OTBR /data
mosquitto-data 100 Mi Mosquitto /mosquitto/data

Zusätzlich werden folgende Host-Pfade eingebunden:

hostPath Typ Container
/run/dbus Directory (read-only) Home Assistant, Matter-Server
/dev/net/tun CharDevice OTBR

Kubernetes-Integration
#

Ein ServiceAccount homeassistant-kubernetes-integration ermöglicht der HA-Kubernetes-Integration Zugriff auf den Cluster:

  • ClusterRoleBinding: Lesezugriff auf Nodes, Namespaces und Metriken (metrics.k8s.io)
  • RoleBinding (Namespace home-assistant): Lese-, Watch- und eingeschränkter Schreibzugriff auf Pods, Events, Deployments, StatefulSets, DaemonSets, CronJobs

Auto-Updates (Keel)
#

Home Assistant und Mosquitto sind mit Keel-Annotationen versehen:

1keel.sh/match-tag: "true"
2keel.sh/trigger: poll
3keel.sh/policy: force

Matter-Server
#

python-matter-server läuft als eigenständiges Deployment und stellt einen Matter-Controller bereit, über den Home Assistant Matter-Geräte steuern kann.

  • Image: ghcr.io/home-assistant-libs/python-matter-server:stable
  • Netzwerk: Macvlan home-net (Interface net1 als primäres Interface)
  • Service: ClusterIP Port 5580

OTBR (OpenThread Border Router)
#

Der OpenThread Border Router verbindet das Thread-Mesh-Netzwerk (Matter over Thread) mit dem IP-Heimnetz.

  • Image: openthread/otbr:latest
  • Radio: TCP-Verbindung zu einem RCP (spinel+hdlc+tcp)
  • Backbone-Interface: net1 (Macvlan ins Heimnetz)
  • mDNS: mDNSResponder
  • NAT64 und Firewall deaktiviert (NAT64=0, FIREWALL=0)
  • Security: privilegiert, NET_ADMIN + NET_RAW
  • Services: ClusterIP Port 8080 (Web-UI), 8081 (REST-API)

Mosquitto (MQTT-Broker)
#

Mosquitto läuft als eigenständiger Controller im Namespace home-assistant. Konfiguration in values-mosquitto.yaml.

Dokumentation
#

Die offizielle Dokumentation ist unter mosquitto.org/documentation/ zu finden.

Funktion
#

MQTT-Broker als zentrale Vermittlungsstelle für IoT-Nachrichten. Clients publizieren oder abonnieren Topics.

  • Image: docker.io/library/eclipse-mosquitto:2.0

Wichtige Einstellungen
#

  • LoadBalancer: Dual-Stack via MetalLB
    • Port 1883: MQTT
    • Port 8883: MQTT über WebSockets
  • Anonymer Zugriff: Erlaubt. Eine password.txt ist in der ConfigMap hinterlegt, aber in mosquitto.conf auskommentiert.
  • Zendure-Bridges: Vier Bridge-Konfigurationen zum Zendure-Cloud-Dienst (SF1200, SF2000, SF2000-2, ACE) liegen vorbereitet in der ConfigMap, sind aber vollstaendig auskommentiert und damit nicht aktiv. Die Geraete sprechen stattdessen direkt mit diesem Broker.
  • Tibber-Bridge: Konfiguration für eine Bridge zum Tibber AWS-IoT-Endpunkt vorbereitet, aber auskommentiert. Die dafür benötigten TLS-Zertifikate werden als Secret tibber-cert unter /certs eingebunden.
  • Persistenz: Retained Messages auf Longhorn-PVC mosquitto-data (100 Mi).

Installation
#

1kubectl kustomize --enable-helm apps/home-assistant | kubectl apply -n home-assistant -f -

Abhängigkeiten
#

  • Multus + Macvlan: Heimnetz-Anbindung aller Controller via dediziertem Uplink-Interface
  • Longhorn: Storage-Provider für alle PersistentVolumes
  • MetalLB: Externe Dual-Stack-IPs für Home Assistant (CoAP) und Mosquitto (MQTT)
  • cert-manager: TLS-Zertifikat via letsencrypt-production
  • Traefik: Ingress mit localnet-Middleware
Fabrice Kirchner
Autor
Fabrice Kirchner
stolzer Vater, Nerd, Admin