Unterabschnitte von HowTos
cryptsetup
HowTos rund um das Thema cryptsetup
Unterabschnitte von cryptsetup
cryptsetup Grundlagen
Erstellen einer verschlüsselten Partition
luks Header ausgeben lassen
Mounten einer verschlüsselten Partition
Unter /dev/mapper/$NAME ist nach dem mounten die entschlüsselte Partition zu
finden.
Erstellen eines Recovery Key
cryptsetup selber unterstützt nicht das Erzeugen eines Recovery Keys. Dies kann
aber systemd-cryptenroll übernehmen
TPM2 für die automatische Ver- und Entschlüsselung
Mit systemctl-cryptenroll ist es ebenfalls möglich TPM2 für die automatische Ver- und Entschlüsselung zu nutzen.
Nach dem Ausführen des Befehls wird das TPM2 als Schlüsseldevice genutzt. Sobald sich Änderungen an der EFI Konfiguration ergeben wird dieser Schlüssel allerdings ungültig und muss erneut eingetragen werden.
git
git
git Commit Historie eines Branches entfernen
Den aktuellen Branch (im Beispiel ‘main’) auf den Stand bringen, der später im root der bereinigten Commit Historie stehen soll.
Als Zwischenschritt wird ein Branch (’temp_branch’) erzeugt. Durch den
Parameter --orphan hat dieser keine Commit Historie.
In diesem Branch alle Dateien Stagen (git add) und den initialen Commit
durchführen
Damit sind alle Projektdateien im neuen Branch enthalten, haben aber nicht die Commit Historie des anderen Branches.
Der alte Branch kann nun entfernt werden.
Und der aktuelle Branch auf den Namen des alten Branches umbenannt werden.
Bisher wurden die Änderungen nur an dem lokalen Repository vorgenommen und es
wurden Referenzen auf die Branches in einer Form geändert, dass andere Clones
des Repositories nicht mehr damit zurecht kommen. Dies würde man beim ersten
Push auf den Server beobachten, der die Änderungen ablehnt. Durch den
zusätzlichen Parameter --force lässt sich trotzdem der geänderte Stand des
Repositories pushen, allerdings müssen all diejenigen, die einen Clone des
Repositories haben diesen Parameter auch beim nächsten pull angeben um das
angepasste Repository zu laden.
Automatic rebase
Um einen git rebase mehrerer commits ohne manuelle Interaktion durchzuführen
kann das Editor Kommando gegen einen sed getauscht werden und damit bis auf
den ersten ‘pick’ alle weiteren gegen ein ‘squash’ getauscht werden.
Gnome
HowTos rund um das Thema Gnome
Unterabschnitte von Gnome
Desktop Dateien
Desktop Dateien unter Gnome müssen - damit sie direkt ausgeführt werden können - als launchable deklariert sein.
Launchable sind Desktop Dateien, wenn sie durch den Benutzer ausführbar sind und
per gio als trusted deklariert wurden.
Gnome Remote Desktop
Der Gnome Desktop ist mit einer eigenen Lösung für den Remote Zugriff ausgestattet. Diese Lösung beinhaltet die Möglichkeit per RDP (Remote Desktop Protocol) oder VNC auf eine bestehende Sitzung zuzugreifen.
Die Konfiguration wird durch den Benutzer innerhalb der Einstellungen durchgeführt.
Alternativ lassen sich die Protokolle auch über die Kommandozeile aktivieren und
konfigurieren. Hierzu dient das Kommando grdctl.
Übersicht über die aktuelle Konfiguration
Aktivieren und Deaktivieren von RDP oder VNC
Anpassen der Ports
Viewonly aktivieren
Um einen Teilnehmer an einer Session nur zuschauen zu lassen, kann die Session auf view-only geschaltet werden.
Zugangsdaten festlegen
Auch die Zugangsdaten lassen sich über die Kommandozeile festlegen und auch wieder zurücksetzen.
Kubernetes
HowTos rund um das Thema Kubernetes
Unterabschnitte von Kubernetes
ClusterIssuer
Für die Verwaltung von Zertifikaten wird in der Regel der cert-manager eingesetzt. dieser kann eine lokale CA benutzen um eigene Zertifikate zu erstellen, aber auch per ACME - Protokoll erreichbare Zertifizierer wie z. B. Let’s Encrypt.
Werden die Zertifizierer als Issuer für einzelne Namespaces erstellt, können sie auch nur in den Namespaces benutzt werden.
Für die globale Nutzung gibt es den ClusterIssuer, der im gesamten Cluster verfügbar ist.
Einbauen lässt sich der ClusterIssuer in einen Ingress durch eine Annotation.
Example Pods
Create OOM
Dieser pod erzeugt durch das Überschreiten der verfügbaren Resourcen einen OOM.
Flux
Installation
Für die Installation muss zunächst der flux Client installiert sein.
Bei Benutzung eines GitLab wird ein Access Token mit Schreibrechten auf das Repository oder die Gruppe benötigt. Sinnvollerweise kann dieser in der Datei $HOME/.gitlab hinterlegt sein.
Danach kann flux mit den benötigen Umgebungswerten gestartet werden.
Es wird automatisch das benötigte Repository angelegt und die Dateien für flux abgelegt.
Im Cluster werden die benötigten CRDs und Deployments angelegt und gestartet.
Update
Ob eine neuere Version für ein Update zur Verfügung steht kann über das
Subkommando check geprüft werden.
Die Komponenten können dann innerhalb des Repositories aktualisiert werden.
Install Cert-Manager
Der Cert-Manager ist eine Verwaltungskomponente für Zertifikate innerhalb eines Kubernetes Clusters.
Erst mit dem Cert-Manager ist es möglich Zertifikate zu erstellen, verwalten und löschen. Der Cert-Manager bringt über CRDs eigene Objekte für die Verwaltung mit
Installation
Die einfachste Installation kann direkt über Helm erfolgen.
Typischerweise wird für den Cert-Manager ein eigener Namespace (cert-manager)
angelegt.
Beispiel für die Anwendung
Bei einem extern erreichbaren Webserver soll neben der Konfiguration eines Ingress mit nginx auf Port 80 auch ein Zugang über https (Port 443) ermöglicht werden.
Dazu bedarf es eines Zertifikats von einer Trusted-CA. Bei extern erreichbaren Webseiten bietet sich dafür z. B. Let’s Encrypt an.
Issuer
Um bei Let’s Encrypt Zertifikate abholen zu können bedarf es zunächst eines Issuers über diese Objekt wir die Anmeldung an Let’s Encrypt durchgeführt. Die gespeicherte Anmeldung dient später auch als Berechtigung die Zertifikate zu beantragen.
Der Issuer wird im gleichen Namespace wie der spätere Ingress angelegt.
Sobald das Objekt erstellt ist, wird die Anmeldung durchgeführt. Der Status ist
im status des Ingress Objekts sichtbar.
Ingress
Um einen Webserver per https erreichbar zu machen, wird zusätzlich zu der
normalen Konfiguration ein Abschnitt spec.tls benötigt in dem der SNI
spec.tls.hosts[] und der Name eines Secrets für das Zertifikat angegeben wird.
Damit der Cert-Manager sich um das Zertifikat kümmert muss eine Annotation
cert-manager.io/issuer: angelegt werden, in die der Name des zu benutztenden
Issuers angegeben wird.
Nach Anlegen des Objekts sorgt der Cert-Manager für die Erzeugung des Privaten
Schlüssels und eines Certificate Sign Requests (CSR). Den CSR sendet er zur
Validierung an den über den Issuer angegeben Dienst und sorgt sich um die
Kommunikation mit diesem um das Zertifikat zu holen. Sobald es vorliegt wird es
in dem unter secretName angegebenen Secret zusammen mit dem Key abgelegt und
steht für den Ingress zu Verfügung. Dieser baut das Zertifikat - sobald es
vorhanden ist - ein und stellt die Domain per https zur Verfügung.
ClusterIssuer
Der Issuer steht immer nur in dem Namespace in dem er angelegt wurde zur Verfügung. Um einen Issuer auch über die Namespaces hinweg benutzen zu können gibt es den ClusterIssuer.
Dieser wird - in der Regel - Im Namespace des Cert-Manager abgelegt, kann aber - solang es keine RBAC Einschränkungen gibt - aus allen Namespaces benutzt werden.
Cluster-Issuer
Tatsächlich unterscheidet sich die Konfiguration des ClusterIssuer nur durch den unterschiedlichen
kind von dem Issuer (ClusterIssuer statt Issuer)
Ingress
Auch beim Ingress ist nur die Annotation zu ändern.
Hier wird dann cert-manager.io/cluster-issuer: benutzt.
Install GitLab on Kubernetes
Install
Kubectl Konfiguration
Das Tool
kubectl wird
für die direkte Kommunikation mit einer Kubernetes API benötigt.
Um mit der API kommunizieren zu können wird eine Konfigurationsdatei benötigt
(KUBECONFIG) in der die Informationen zur API, wie die Adresse, Benutzer,
Kennwort oder Zertifikate enthalten sind. Die Konfigurationdatei wird in der
Regel in der Datei ~/.kube/config abgelegt. Alternativ kann die
Umgebungsvariable KUBECONFIG gesetzt werden um eine alternative
Konfigurationsdatei angeben zu können.
KUBECONFIG Dateien zusammenfassen
Statt mehrere Konfigurationsdateien zu führen ist es Sinnvoll die Konfigurationsdaten in eine Datei zusammen zu fassen.
Auf Grund des Formats können die Dateien nicht einfach zusammenkopiert werden. Die einzelnen Daten müssen in die jeweiligen Sektionen der Konfigurationdatei verteilt werden.
Mit dem folgenden Workflow ist es möglich dies teilweise zu automatisieren.
- Erstellen einer Kopie der aktuellen Konfigurationsdatei (es wird von
~/.kube/configausgegangen) - Setzen der Variable
KUBECONFIGauf die kopierte Datei und die neue Datei (/tmp/kube_config). Weitere Dateien können durch Doppelpunkt getrennt angegeben werden - Ausgeben der Kopie und der zusätzlichen Datei, oder Dateien über
kubectlin die Datei~/.kube/config. - Löschen der temporären Dateien
- Löschen der Variable
KUBECONFIG
Auswählen des Context
Sobald die Konfigurationsdatei für kubectl mehr als einen Eintrag enthält,
kann der Context in dem gearbeitet werden soll gewechselt werden.
Dies geschieht entweder durch das Festlegen eines Default Context:
Oder durch die Nutzung des Parameters --context bei kubectl oder anderen
Befehlen wie z. B. flux, die dies unterstützen.
Über den Befehl kubectl config get-contexts lässt sich eine Liste der
verfügbaren Umgebungen anzeigen.
Kubernetes auf podman mit kind
Über das Tool kind ist es möglich schnell einen Kubernetes Cluster innerhalb einer podman Umgebung aufzusetzen.
Vorbereitung
Dazu muss das Tool heruntergeladen oder über das Paketmanagement installiert.
podman und auch kubectl müssen ebenfalls installiert und konfiguriert sein.
Einrichtung des Clusters
Der einfachste Weg den Cluster einzurichten geht über das systemctl-run Kommando. Hierbei übernimmt der systemd die Kontrolle über die Umgebung für Umgebung in der der podman Befehl läuft.
Nach dieser Installation kann direkt über das kubectl Kommando ein Zugriff auf die Kubernetes Node erfolgen.
Dazu wurde die Datei $HOME/.kube/config um den Context kind-kind erweitert oder eine neue Datei erzeugt.
Genauere Informationen über den laufenden Cluster Node lassen sich über kubectl cluster-info dump abrufen.
Cluster Konfiguration
Statt den Cluster mit einer Default Konfiguration zu starten, kann man eine yaml Datei mit passenden Werten zur Erzeugung nutzen.
Beispiele:
Die erstellten yaml Dateien sind bei der Erstellung des Clusters anzugeben.
Weitere Beispiele und Parameter sind in der kind Konfiguration zu finden.
Cluster entfernen
Der Befehl kind kann ebenfalls zum entfernen eines Clusters genutzt werden.
Erweitertes Beispiel
Installation eines einfachen Clusters mit einer Node. nginx-ingress über die Ports 8000 und 8443 auf dem Host zu erreichen.
Kubernetes Certificate
Kubernetes Certificate
Manuellen TLS Eintrag erstellen
Für den manuellen Eintrag wird die komplette Zertifikatskette ohne das root-Zertifikat in einer Datei und der Key in einer anderen Datei benötigt. Beide müssen im PEM - Format vorliegen.
Sollten die Intermediate Zertifikate und das eigentliche Zertifikat nicht in
einer Datei sein, dann lassen sich diese per cat Befehl zusammenfügen.
Der zusätzliche Parameter -o yaml gibt den Eintrag aus statt ihn per API in
den Cluster zu senden.
Alternativ kann der Eintrag auch selber erstellt werden:
Der hinter tls.crt und tls.key angegebene Text entspricht dem Inhalt der
Zertifikats- und Key-Datei in einer mit base64 ummantelten Version ohne
Zeilenumbrüche.
Kubernetes Cookbook
Pods
List all pods on a node
List all pods with custom outout
List all pods in a namespace
List all pods not in the running state
Kubernetes Dashboard
Über das Dashboard lassen sich die Informationen über den Cluster visualisieren
und anpassen. Sobald ein metrics-server im Cluster existiert, kann man auch die
Metriken visualisieren.
Installation metrics-server
Sollte der kublet-server nicht mit gültigen Zertifikaten ausgestattet sein,
muss dies dem metrics-server mitgeteilt werden.
Installation Dashboard
Diese Installation des Dashboards ist ohne Absicherung per SSL. Diese müsste zusätzlich konfiguriert werden. Alternativ Nutzung von Rancher.
Zugriff auf das Dashboard
Anlegen eine serviceAccounts
serviceAccount ClusterAdmin Rechte zuweisen
Token generieren und ausgeben lassen
SSL Port per Proxy weiterleiten
Zugriff auf das Dashboard über https://localhost:8443
Kubernetes mit kubeadm auf Rocky Linux
Vorbereitung des Systems
Bevor du mit der Installation von Kubeadm beginnst, musst du dein Rocky Linux 9 System vorbereiten. Du musst sicherstellen, dass bestimmte Pakete und Abhängigkeiten installiert und die Systemeinstellungen korrekt sind.
Setzen des korrekten Hostnamens
Der folgenden Befehl setzt den Hostnamen des Systems auf seine eigene IP
Adresse über den Dienst ip.dynlinux.io
Vollständige Aktualisierung des Systems
Dieser Befehl stellt sicher, dass alle Systempakete auf dem neuesten Stand sind.
Deaktivieren von SELinux
Kubernetes erfordert die Deaktivierung von SELinux, um ordnungsgemäß zu funktionieren. Du kannst dies tun, indem du die Konfigurationsdatei bearbeitest.
Nach der Deaktivierung über die Konfigurationsdatei muss das System neu gestartet werden.
Alternativ kannst du es auch temporär deaktivieren
Deaktivieren der Firewall
Die Firewall kann den Netzwerkverkehr zwischen den Kubernetes-Komponenten blockieren. Deaktiviere sie, um mögliche Probleme zu vermeiden:
Konfigurieren von IP-Weiterleitung und Bridge-Einstellungen
Für die Netzwerkinfrastruktur von Kubernetes ist die IP-Weiterleitung erforderlich. Erstelle die Konfigurationsdatei 99-kubernetes.conf
Lade die Einstellungen neu
Lade das Kernelmodul br_netfilter
Installation von Containerd
Containerd ist die Container-Laufzeitumgebung (Container Runtime), die von Kubernetes benötigt wird, um Container zu starten und zu verwalten. Kubernetes verwendet die Container Runtime Interface (CRI), um mit der Container-Laufzeitumgebung zu interagieren.
Installation der erforderlichen Pakete
Konfiguration von Containerd
Zuerst erstellst du eine Standardkonfiguration für Containerd:
Anschließend bearbeitest du die Konfigurationsdatei, um das cgroupfs-System für das Systemd-Cgroup-Treiber-System zu verwenden:
Aktivierung und Starten von Containerd
Installation von Kubeadm, Kubelet und Kubectl
Nachdem Containerd eingerichtet ist, installierst du die Kubernetes-Tools.
Hinzufügen des Kubernetes-YUM-Repositorys
⚠️ Hinweis: Die Versionsnummer v1.32 sollte an deine gewünschte Kubernetes-Version angepasst werden.
Installation der Kubernetes-Pakete
Dieser Befehl installiert die drei Hauptkomponenten:
- kubelet: Der Agent, der auf jedem Knoten läuft und die Kommunikation mit dem Control Plane übernimmt.
- kubeadm: Das Tool zum Bootstrapping des Clusters.
- kubectl: Das Befehlszeilentool zur Interaktion mit dem Cluster.
Initialisierung des Control-Plane-Knotens
Jetzt kannst du den Control-Plane-Knoten (Master-Knoten) initialisieren. Dies ist der wichtigste Schritt, da er das Herzstück deines Kubernetes-Clusters bildet.
Initialisiere das Kubernetes Control Plane
Der Parameter –pod-network-cidr ist wichtig, da er das Netzwerk-Subnetz für die Pods festlegt. Der Wert 10.244.0.0/16 ist der Standard, der von vielen CNI-Plugins wie Flannel verwendet wird.
Starten und Aktivieren des Kubelet-Dienstes
Konfigurieren des Benutzers für kubectl
Nach der erfolgreichen Initialisierung musst du kubectl für den aktuellen Benutzer konfigurieren, um Befehle ausführen zu können:
Installieren eines Pod-Netzwerk-Addons
Ohne ein Pod-Netzwerk-Addon können die Pods nicht miteinander kommunizieren. Flannel ist eine beliebte Wahl.
Nach der Installation kannst du den Status der Pods überprüfen
Erlaube pods auf der Control Plane
Auf der Control Plane solltest du keine Pods, die nicht zur Control Plane gehören - laufen lassen. Dies kann zu einer Instabilität der Control Plane führen.
Für Test-Setups ist es möglich auch auf der Control Plane Pods laufen zu lassen
Hinzufügen von weiteren Control Plane-Knoten
Um weitere Control Plane-Knoten zu erstellen musst du zunächst die Zertifikatsdaten des Clusters ein Kubernetes Secret speichern. Dazu führst du auf einem existierenden Conntrol Plane-Knoten den folgenden Befehl aus.
⚠️ Dieser Schritt ist für das Hinzufügen eines Workers nicht notwendig.
Der Certificate Key Name aus der Ausgabe des vorherigen Befehls wird für den
kubeadm join benötigt. Der restliche Aufruf wird mit dem folgenden Befehl
ausgegeben auf dem bestehenden Control Plane-Knoten.
Den Ausgegebenen Befehl musst du nun um die Parameter --control-plane und
--certificate-key <certificate-key-string> erweitern und auf dem neuen
Control Plane-Knoten ausführen.
Sobald die zusätzliche Node bei kubectl get nodes auftaucht können die
korrekten Label gesetzt werden.
Hinzufügen von Worker-Knoten
Kubeadm gibt dir nach der Initialisierung einen kubeadm join-Befehl aus. Du musst diesen Befehl auf den Worker-Knoten ausführen, um sie dem Cluster hinzuzufügen.
Dieser Befehl verbindet den Worker-Knoten mit dem Control Plane.
💡 Die Daten für diesen Befehl kannst du auf der Control Plane auslesen
Starten und Aktivieren des Kubelet-Dienstes auf dem Worker
Sobald die zusätzliche Node bei kubectl get nodes auftaucht können die
korrekten Label gesetzt werden.
Überprüfung des Clusters
Um sicherzustellen, dass dein Cluster ordnungsgemäß funktioniert, kannst du den Status der Knoten überprüfen:
Die Ausgabe sollte alle Knoten (den Control-Plane-Knoten und alle hinzugefügten Worker-Knoten) als Ready anzeigen.
Testanwendung installieren
Wenn du eine Anwendung bereitstellen möchtest, kannst du dies mit einem Deployment-Befehl tun:
Diese Befehle erstellen ein Deployment für eine Nginx-Webserver-Anwendung und legen einen Service vom Typ NodePort an, um die Anwendung über eine externe IP-Adresse zugänglich zu machen.
Deinstallieren der kompletten Installation
Uninstall k8s
Uninstall containerd
Uninstall flannel
Kubernetes Pods
Pods sind in Kubernetes die Umgebung in der ein oder mehrere Container gestartet werden können. Container können nicht ohne einen umgebenden Pod laufen.
Alle Container innerhalb eines Pods teilen sich die Namespaces des Pods und können nur parallel auf der gleichen Node laufen. Wir einer der Container eines Pods beendet, dann werden alle Container im gleichen Pod gestoppt.
Evicted Pods
Pods können durch Signale zu Evicted Pods werden. Die Signale können z.B. durch zu wenig Speicher, Festplattenplatz, fehlende INodes oder Prozess IDs gesetzt werden. Meist starten in dem Fall neue Pods, sobald der entsprechende Engpass behoben ist.
Die verbleibenden - Evicted - Pods können dann entfernt werden.
Eine Liste der Evicted Pods zusammen mit dem Grund wird wie folgt erstellt:
Zum Löschen aller Evicted Pods reicht ebenfalls ein Einzeiler:
Debugging mit Ephemeral Containern
Ephemeral Container können einem Pod hinzugefügt werden um in der bestehenden Pod Umgebung debugging durchführen zu können.
Nach dem Verlassen des Containers bleibt dieser im Pod erhalten und wird erst durch entfernen des Pods gelöscht.
Solange kann an den Container attached werden.
Kubernetes Service
Pods werden nicht direkt über die Pod IP angesprochen, da sich diese IP bei jedem Anlegen eines Pods ändert. Falls über das Deployment mehrere Pods angelegt werden, wird über die IP immer nur ein Pod angesprochen.
Ein Service sorgt für die Vergabe einer ClusterIP, eines NodePorts oder der Nutzung eines LoadBalancers.
Um die zusammengehörigen Pods zu finden werden über einen selector die passenden Label der Pods festgelegt. Dabei müssen die Pods und der Service im gleichen Namespace sein.
Durch den port wird der auf der ClusterIP zu belegende Port festgelegt. Der targetPort legt den vom Pod freigegebenen Port fest.
Bei der Konfiguration eines NodePort kann ein Port von 30000 bis 32767 automatisch oder durch die Angabe des Parameters nodePort festgelegt werden.
Die dynamische Vergabe des Ports bevorzugt, da es hier nicht zu Konflikten auf Grund paralleler Deployments kommen kann.
Kubernetes StorageClass
Eine StorageClass wird benutzt um einen Datenspeicher für die Pods zur Verfügung zu stellen.
Es gibt verschiedene Provider über die die Speicherung durchgeführt werden kann.
Eine StorageClass als default festlegen
Um für einen Cluster einen Storage als Voreinstellung zu haben wird in der Regel die erste angelegte StorageClass als default definiert.
Wird nun Storage angefordert, dann wird diese Klasse als StorageClass benutzt.
In der StorageClass Liste erscheint die StorageClass dann mit der Kennzeichnung (default).
StorageClass als nicht-default setzen
Mittels eines Patches lässt sich eine StorageClass als nicht-default setzen. Ist kein default definiert und eine Resource benötigt ein Volume, dann muss eine StorageClass explizit angegeben sein.
StorageClass als default setzen
Sobald es keine default StorageClass gibt, kann eine StorageClass als default festgelgt werden. Dies geschieht analog zum Entfernen der default Definition.
Kubernetes Tools
Für den Betrieb eines Kubernetes Clusters werden einige Tools benötigt.
dieses sind nicht immer direkt in den Repositories der Distributionen verfügbar. Das folgende Script installiert die wichtigsten Tools in /usr/local/bin und fügt den Pfad zur PATH Variable hinzu.
Kubernetes Troubleshooting
RKE2
RKE2 startet nicht “cluster-cidr: [x.x.x.x/16 201:db8::/56] and node-ip: [y.y.y.y], must share the same IP version (IPv4, IPv6 or dual-stack)”
RKE2 hat die IPv6 der Node nicht erkannt. Durch eine zusätzliche
Konfigurationsdatei in /etc/rancher/rke2/config.yaml.d/ kann die bestehende
Konfiguration ergänzt werden:
Cluster meldet “Waiting fpr probes: kube-controller-manager, kube-scheduler”
Die Meldung deutet darauf hin, dass es ein Problem mit den Zertifikaten gibt und dieses erneuter werden müssen.
Das folgende Script zeigt ob die Zertifikate aktuell sind:
Falls bei diesem Test ein Fehler ausgegeben wird, können mit dem folgenden Script die Zertifikate gelöscht und erneuert werden:
Longhorn Storage unter Kubernetes
Das SUSE Longhorn Projekt stellt eine Open-Source-Lösung für verteilte Block-Speicher für Kubernetes bereit.
Was ist Longhorn?
Longhorn ist eine kostenlose und Open-Source-Software-Defined-Storage-Lösung, die für Kubernetes entwickelt wurde. Sie bietet persistente Speichervolumes für zustandsbehaftete Anwendungen, die auf Kubernetes laufen.
Hauptmerkmale von Longhorn:
- Einfache Installation und Verwaltung: Longhorn lässt sich einfach in einem Kubernetes-Cluster installieren und über die Kubernetes-API oder eine benutzerfreundliche Weboberfläche verwalten.
- Hochverfügbarkeit: Longhorn repliziert Speicherdaten über mehrere Knoten hinweg, um Ausfallsicherheit zu gewährleisten. Wenn ein Knoten ausfällt, sind die Daten weiterhin verfügbar.
- Snapshots und Backups: Es unterstützt das Erstellen von Snapshots von Volumes und das Sichern dieser Snapshots an externen Speicherorten (z. B. S3-kompatible Speicher, NFS).
- Dynamische Volume-Bereitstellung: Volumes können dynamisch erstellt und an Pods angehängt werden, wenn diese gestartet werden.
- Plattformübergreifend: Longhorn funktioniert auf verschiedenen Cloud-Providern und On-Premises-Umgebungen.
- Block-Speicher: Longhorn stellt Block-Speicher bereit, der für eine Vielzahl von Anwendungen geeignet ist, einschließlich Datenbanken und anderer zustandsbehafteter Dienste.
Anwendungsfälle
Longhorn eignet sich hervorragend für Szenarien, in denen Sie:
- Zustandsbehaftete Anwendungen auf Kubernetes betreiben, die persistenten Speicher benötigen.
- Eine einfache und kostengünstige Speicherlösung für Ihren Kubernetes-Cluster suchen.
- Hochverfügbarkeit und Datensicherheit für Ihre Speicherdaten benötigen.
- Flexibilität bei der Verwaltung und Sicherung Ihrer Speicherdaten wünschen.
Installation
Die Installation von Longhorn erfolgt typischerweise über die Bereitstellung von YAML-Manifesten in Ihrem Kubernetes-Cluster. Sie können die neuesten Installationsanweisungen und Manifeste auf der offiziellen Longhorn-Dokumentation finden.
Installation Longhorn unter Rocky Linux
Vorbereitung
Installation per helm
Uninstall Longhorn
https://github.com/longhorn/longhorn/discussions/9167
Default storageClass anpassen
Durch das Setzen einer Annotation kann eine storageClass zur default storageClass ungestellt werden.
Dabei sollte zunächst geschaut werden ob eine storageClass als default deklariert ist und diese deaktiviert werden.
Danach kann eine andere storageClass zur default storageClass gemacht werden.
aktuelle default storageClass deaktivieren
Auflisten der storageClass Elemente um eine default storageClass zu finden
neue default storageClass aktivieren
Manage PostgreSQL in Kubernetes
Verbindung zu einer PostgreSQL-Datenbank in Kubernetes herstellen
Der sinnvollste Weg um an eine PostgreSQL-Datenbank in einer Kubernetes-Cluster Umgebung zu verbinden ist die Verwendung eines passenden PostgreSQL Containers.
Dieser lässt sich über den den Befehl kubectl run erzeugen.
Dazu sollte im Vorfeld der namespace des PostgreSQL Servers sowie dessen
Service-Name und Service-Port bekannt sein.
In dem Beispiel sind die folgenden Parameter vergeben:
postgresqlnsist der Namespacemypostgresqlist der Name des Services5432ist der Service-Port
Der Container für den Zugriff wird nun mit dem Befehl kubectl run erzeugt und
direkt eine Verbindung zum PostgreSQL Server hergestellt.
Nach Ende der Verbindung wird der Container gelöscht.
NGINX Ingress auf Kubernetes
Voraussetzungen
- Ein Kubernetes Cluster ist konfiguriert und läuft
kubectlist auf einer Control Plane installiert
Installation helm
helm kann über die Webseite https://get.helm.sh
heruntergeladen und installiert werden.
Die folgende Kommandozeile führt dies automatisch durch. Die Versionsnummer sollte entsprechend angepasst sein.
Installation ingress-nginx
Einrichtung des repositories
Über das Repository stehen die verschiedenen Charts für die Installation zur Verfügung und können auch darüber upgedated werden.
Erstellen eines Namespaces
Die Installation erfolgt in einem eigenen Namespace. Dieser kann vorab
oder beim helm install über den Parameter --create-namespace während der
Installation angelegt werden.
Installation des ingress-nginx
Prüfen des der Installation
Test des DaemonSet
Test Installation eines nginx
Im folgenden wird ein nginx Webserver installiert und mit einem Ingress versehen.
Ingress mit Basic Authentication versehen
Durch die Basic Authentication wird sichergestellt, dass nur Benutzer mit entsprechenden Berechtigungen Zugriff auf die Website bekommen.
htpasswd Datei erzeugen
htpasswd in Secret ablegen
Im Ingress müssen nun nur noch die folgenden Annotations hinterlegt werden:
OCI Registry einrichten
Um eigene Images zu verwalten und zu pushen, wird ein OCI Registry benötigt.
Im folgenden Beispiel wird die Installation über yaml Dateien durchgeführt,
die direkt über kubectl importiert werden. Dazu werden die im folgenden
aufgeführten Beispiele in Dateien gepackt und über denn Befehl kubectl apply -f $DATEINAME importiert.
Namespace
Zunächst wird ein Namespace erstellt in dem die Registry läuft. Für das Beispiel
ist das der Namespace registry.
Storage
Damit die Daten der Registry auch nach einem Neustart erhalten bleiben, wird ein
Storae benötigt. Über die default Storage Klasse wird dafür ein
PersistentVolumeClaim erstellt. Dieser erstellt dann ein PersistentVolume
sobald dieses von dem Deployment angefordert wird.
Wird eine andere als die default StorageClass gewünscht kann diese mit dem
Parameter storageClassName angegeben werden.
Secrets
Damit die Registry nicht ohne Authentifizierung läuft muss im Vorfeld eine
htpasswd Datei erstellt werden um darüber die Benutzer zu verwalten.
Zunächst wird die htpasswd Datei erstellt. Dies lässt sich am einfachsten über
den httpd OCI Container durchführen. Dieser enthält das benötigte Progamm
htpasswd. Im Beispiel wird podman genutzt. Der Befehl kann gegen docker
getauscht werden.
Über die Datei htpasswd wird anschließend ein Secret im Namespace registry erstellt.
Deployment
Über das Deployment wird die Definition des Registry Pods durchgeführt. Dieser wird dann über ein automatisch erstelltes ReplicaSet gestartet.
Service
Nach dem Einlesen des Deployments existiert der Pod registry im Namespace
registry, es existiert aber noch kein Zugriff von Außen auf den Container.
Dazu wird ein Service erstellt.
Der Service ist in der Lage den passenden Pod auf Grund des selector zu finden
und diesem eine ClusterIP zu geben. Dies ClusterIP mit dem Port 5000 ist dann
eine Möglichkeit auf den Dienst zuzugreifen.
Allerdings nur auf einer der Cluster Nodes. Um auch von Außen auf den Dienst zugreifen zu können macht es Sinn einen Ingress zu erstellen über den dann der Zugriff erfolgt.
Ingress
Für den Ingress wird eine DNS Domain benötigt, die auf den Cluster zeigt. Für
das Beispiel ist es registry.internal. Um auch per https auf den Dienst
zugreifen zu können muss ein TLS Zertifikat vorhanden sein. Diese kann wie Folgt
erstellt werden:
Statt des selbstzertifizierten Zertifikats kann auch ein Let’s Encrypt
Zertifikat über cert-manager oder ein bestehendes Zertifikat verwendet werden.
Aus dem Zertifikat wird nun wiederum ein secret erstellt.
Dieses secret wird in dem folgenden Ingress verwendet.
Die beiden auskommentierten Einträge sind die Verwendung von cert-manager und
einem ClusterIssuer gedacht. Der ClusterIssuer muss dafür zunächst angelegt sein
und die Domain von extern durch den Zertifizierungsdienst - z. B. Let’s Encrypt
- erreichbar sein.
Nach dem Erstellen des Ingress ist ist die Registry über https://registry.internal erreichbar.
Rancher Installation
Rancher ist eine von SUSE entwickelte Verwaltungsplattform für Kubernetes.
Für die Installation wird eine bereits vorhandene Kubernetes Installation und das Tools Helm benötigt.
Bei der Installation über Helm werden durch das Tool die benötigten Steuerdateien für den Cluster aus Templates erstellt und eingespielt.
Zunächst wird der cert-manager für die Zertifikatsverwaltung benötigt.
Nun folgt die eigentlich Rancher Installation
Während der Installation wird die URL für das Webinterface sowie der Zugang zum Anmeldetoken angezeigt.
RKE2 Installation
Die Rancher Kubernetes Engine 2 ermöglicht die Installation und Konfiguration eines Kubernetes Clusters durch wenige Befehle.
Im folgenden wird die Installation unter einer aktuellen Version von Rocky Linux 9 vorgestellt.
Da das System selber Firewall - Regeln setzt sollte eine zusätzliche Firewall Konfiguration deaktiviert sein.
In der Regel läuft auf einem neu installierten Rocky Linux der firewalld.
Der Hostname der Node sollte korrekt gesetzt sein, oder durch hostnamectl gesetzt werden.
Die folgenden Tools werden von RKE2 je nach konfigurierter Umgebung benutzt und sollten installiert sein.
Da das RKE2 einige der in einer Standard - Installation vorherrschenden Limit überschreitet müssen für inotify die Limits erhöht werden.
Die Installation der RKE2 Umgebung kann durch ein Script oder die Installation des Binaries von GitHub durchgeführt werden.
Das Script installiert neben dem Binary auch einige nützliche Scripte über die alle Prozesse des RKE2 gestoppt oder eine Installation entfernt werden kann.
Bei unterstützten Plattformen - wie Rocky Linux - wird zusätzlich ein Repository für den Paketmanager installiert über den ein direktes Update per yum update möglich ist.
Zusätzlich wird das Kommando kubectl für die Verwaltung des Clusters benötigt. Der folgende Aufruf installiert den Befehl direkt nach /usr/local/bin. Um direkt per bash verfügbar zu sein wird auch die Variable PATH erweitert.
Falls dem RKE2 keine weiteren Parameter angegeben werden sollen, kann der Dienst aktiviert und gestartet werden.
Die für den kubectl benötigte Konfiguration kann direkt unter .kube/config im Homeverzeichnis des aktuellen Benutzers und dem von root zur Verfügung gestellt werden.
Nach wenigen Minuten sollte die neue RKE2 Node zur Verfügung stehen.
Mikrosoft Windows
HowTos rund um das Thema Mikrosoft Windows
Unterabschnitte von Mikrosoft Windows
Lokaler Benutzer unter Mikrosoft Windows 11
Bei der Installation von Mikrosof Windows 11 versuche der Installer immer einen Online Zugang über das Mikrosoft Netzwerk zu benutzen.
Soll stattdessen nur ein lokaler Benutzer eingerichtet werden, ist es möglich während der Installation über die Tastenkombination STRG+F10 eine Eingabeaufforderung zu starten und dort über das folgende Kommando:
Es wird der Rechner sofort neu gestartet und der Einrichtungsdialog wird normal durchlaufen ohne allerdings einen Online-Zugang zu benötigen.
Dazu beim Dialog ‘Wie möchten Sie dieses Gerät einrichten’ den Punkt ‘Für persönliche Verwendung einrichten’ und danach ‘Anmelden’ auswählen.
Nun nochmals die Eingabeaufforderung mittels STRG+F10 öffnen und den Befehl ipconfig /release zum unterbrechen der Internetverbindung eingeben.
Die Eingabeaufforderung schließen und den Punkt Erstellen Sie eines auswählen.
Über den folgenden Dialog wird dann ein lokales Konto eingerichtet.
OpenSSL
OpenSSL
Selfsigned Certificate
Create CA and sign cert
Create Certificate Request with SAN
Works with openssl >= 1.1.1
Create Self-Signed Certificate Request with SAN
Works with openssl >= 1.1.1
CA Zertifikate zum Trust hinzufügen
Rocky Linux 9
Um eine CA als Trust dem Betriebssystem hinzuzufügen wird die CA - Datei im Verzeichnis /etc/pki/ca-trusted/source/anchors hinzugefügt und über den Befehl update-ca-trust eingebunden.
Beispiel für die MyLinuxTime CA:
Prometheus
HowTos rund um das Thema Prometheus
Unterabschnitte von Prometheus
Node Exporter mit TLS und Basic Auth
Create a self-signed cert for node-exporter:
$ openssl req -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout node_exporter.key -out node_exporter.crt -subj “/C=ZA/ST=CT/L=SA/O=VPN/CN=localhost” -addext “subjectAltName = DNS:localhost” Move the certs into the directory we created:
$ mv node_exporter.* /etc/node-exporter/ Install htpasswd so that we can generate a password hash with bcrypt, which will prompt you for a password that we are setting for the prometheus user::
$ apt install apache2-utils $ htpasswd -nBC 10 "" | tr -d ‘:\n’; echo Now populate the config for node-exporter:
$ cat /etc/node-exporter/config.yml
tls_server_config:
cert_file: node_exporter.crt
key_file: node_exporter.key
basic_auth_users:
prometheus:
$ chown -R ${NODE_EXPORTER_USER}:${NODE_EXPORTER_USER} /etc/node-exporter Then create the systemd unit file:
$ cat > /etc/systemd/system/node_exporter.service « EOF [Unit] Description=Node Exporter Wants=network-online.target After=network-online.target StartLimitIntervalSec=500 StartLimitBurst=5 [Service] User=${NODE_EXPORTER_USER} Group=${NODE_EXPORTER_USER} Type=simple Restart=on-failure RestartSec=5s ExecStart=${BIN_DIRECTORY}/node_exporter –web.config=/etc/node-exporter/config.yml [Install] WantedBy=multi-user.target EOF Reload systemd and start node-exporter
$ systemctl daemon-reload $ systemctl enable node_exporter $ systemctl restart node_exporter Prometheus Config Copy the /etc/node-exporter/node_exporter.crt from the node-exporter node to prometheus-node, then in the /etc/prometheus/prometheus.yml config:
 scrape_configs:
- job_name: ’node-exporter-tls’
scheme: https
basic_auth:
username: prometheus
password:
tls_config: ca_file: node_exporter.crt insecure_skip_verify: true static_configs: - targets: [’node-exporter-ip:9100’] labels: instance: friendly-instance-name
Queries mit PromQL
PromQL wird benutzt um aus einer Prometheus Time-Series-Database (TSD) Daten abzufragen.
Die Daten liegen als Metriken vor, die bei jedem erneuten Abruf (scrape) von den Exportern aktualisiert werden. Dabei wird den Metriken jeweils der aktuelle Timestamp hinzugefügt. Über PromQL lässt sich daher sehr einfach die Veränderung der Metriken über die Zeit nachverfolgen.
Zusätzlich zu den Metriken selber werden Attribute (label) gesetzt um die Metrik genauer zu beschreiben.
Wie bei der Ausgabe ersichtlich sind für node_cpu_seconds_total 3 Attribute
gesetzt: instance, job und mode
Um auf ein oder mehrer Attribute zu filtern werden sie hinter der Metrik in geschweiften Klammern angegeben.
Hierdurch wird die Ausgabe eingeschränkt.
Um die Anzahl der CPU Kerne herauszufinden könnte reicht die Zählung der
Ergebniszeilen (count).
Allerdings nur solange es nicht mehrere Instanzen gibt. Bei einer zusätzlichen Instanz mit gleicher Anzahl an CPUs würde nicht 2 pro Instanz ausgegeben, sondern nur 4, da die Zeilen zusammengezählt werden.
Das richtige Ergebnis erhält man nur, wenn man den count nur auf die gleiche
Instanz anwendet, also eine Gruppierung auf die Instanz vornimmt.
Sollte der Wert häufiger benötigt werden, machen eine ‘recording rule’ Sinn. Hierbei werden - parallel zum Abholen neuer Metriken durch den Prometheus Server - auch auf Grund der recording rules eigene Metriken berechnet. Dies verhindert, dass oft genutzte Werte immer wieder innerhalb der PromQL Queries erneut berechnet werden.
Diese recording rule definiert eine neue Metrik
instance:node_cpu_seconds_total:count, die genau der im vorherigen Bespiel
erzeugten Abfrage entspricht.
Um diese recording rule zu aktivieren wird sie in eine yaml Datei gepackt und
über rules_file in der Prometheus Konfiguration geladen.
Mit dieser Metrik ist es dann recht enfach die Load der Instanzen
(node_load1), die die Summer der Loads aller Scheduler darstellt, durch die
Anzahl der Scheduler (= Anzahl der CPU Kerne) zu teilen und einen vergleichbaren
Wert für alle Instanzen zu haben. Wir müssen dann nicht mehr wissen wieviele CPU
Kerne die Instanzen haben, da alles relativ zu einem CPU Kern dargestellt wird.
Eigentlich ist es nur die Division der Load (node_load1) durch unsere Metrik
(instance:node_cpu_seconds_total:count).
Allerdings haben die beiden Werte nicht alle Attribute gleich. node_load1 hat
noch das zusätzliche Attribut job. Dieses gibt es bei
instance:node_cpu_seconds_total:count nicht.
Daher ist bei der Division dieses Attribut zu ignorieren oder die Division nur
auf das Attribut intance anzuwenden.
ZigBee
HowTos rund um das Thema ZigBee
Unterabschnitte von ZigBee
Praktischer Einstieg in Zigbee2MQTT
Der im Rahmen des Themenabends durchgeführte Kurs erklärt die ersten Schritte der Einrichtung und Konfiguration einer ZigBee basierten Homeautomation. Dabei geht es nicht darum bestehende - kommerzielle - Gateways zur Verwaltung von ZigBee Geräten einzusetzen, sondern auf einem RaspberryPi oder ähnlichen Rechnern unter Linux ein Gateway zusammen mit einem CC2531 Netzwerksniffer aufzubauen.
Vorbereitung
Für den Kurs wird keine explizite Hard- oder Software benötigt und die Teilnehmer können dem Vortrag und den Vorführungen folgen. Es ist aber möglich selber die einzelnen Schritte nachzuvollziehen und ebenfalls über den eigenen Rechner ein ZigBee Netz aufzubauen.
Dafür wird folgendes benötigt:
- 1 x CC2531 z. B. von Amazon
- 1 x ein ZigBee Gerät z. B. Osram Smart+ Plug von Amazon
- 1 x CC2531 Debugger und Adapterkabel
Auf den Debugger für den CC2531 und das Adapterkabel kann verzichtet werden, wenn ein CC2531 mit vorinstallierter Coordinator - Software für zigbee2mqtt gekauft wird. Damit fällt dann auch der Installationsschritt zum flashen des CC2531 weg.
Viele der aktuell erhältichen Coordinator sind auch schon mit einer Firmware ausgestattet, die es erlaubt per Software - ohne den Debugger - die Geräte direkt zu flashen.
Neben dem CC2531 können auch andere Coordinator eingesetzt werden. Diese sind in der Liste der unterstützten Coordinatoren aufgelistet.
Zusammen mit einem Laptop mit Linux oder einem RaspberryPi mit Raspberry Pi OS können alle Schritte nachvollzogen werden. Beim Paketmanager gehen wir von einem Debian-basierenden Grundsystem aus.
Eine Liste weiterer Endgeräte, die mit dem Gateway in der aktuellen Version genutzt werden können ist auf der Projektseite auf GitHub zu finden.
Aufspielen der Firmware auf den CC2531
Um auf den CC2531 die geeignete Firmware aufzuspielen wird ein CC Debugger von Texas Instruments sowie ein Adapter benötigt. Diese sind über einige Plattformen wie z. B. Amazon bestellbar (Debugger, Adapter).
Zusätzlich wird die entsprechende Firmware und das Tool zum Flashen benötigt.
Firmware
Die für uns interessante Firmware wird auf der GitHub Seite des Gateways zur Verfügung gestellt und dort auch immer wieder aktualisiert. Dabei gibt es dort 2 verschiedene Varianten des Firmware:
- Coordinator
- Router
Die Coordinator Firmware ist für die Verwaltung der Geräte zuständig und ist quasi der Netzverwalter. Alleine kann ein Coordinator mit einem CC2531 in der aktuellen Firmware - Version bis zu 30 Geräte direkt verwalten. Andere Chips können durchaus mehr verwalten.
Um mehr Geräte nutzen zu können werden Router benötigt. Diese können entweder durch CC2531 mit Router Firmware oder durch Dauerstrom Geräte wie z. B. dem Osram Smart+ Plug zur Verfügung gestellt werden. Dabei ist es abhängig von den Geräten selber wie viele Geräte sie wiederum verwalten können.
Flashen
Zum Flashen unter Linux wird cc-tool benötigt. Dieses lässt sich problemlos per git herunterladen und lokal compilieren und nutzen:
Danach müssen sowohl der CC Debugger als auch der damit verbundene CC2531 an den Rechner angeschlossen werden. Die LED am CC Debugger wird dann zunächst rot leuchten. Nach einem Druck auf die Reset - Taste sollte sie dann grün leuchten.
Sollte der CC Debugger weiterhin rot leuchten, sicherheitshalber richtige Polung der Anschlüsse überprüfen!
Damit ist der CC Debugger im Programmiermodus und die Firmware kann aufgespielt werden:
Damit ist die Vorbereitung des CC2531 abgeschlossen und der kann benutzt werden.
Herunterladen und Einrichten des Gateways
Als Gateway nutzen wir zigbee2mqtt von Koenkk. Das Gateway ist komplett auf GitHub zu finden.
Herunterladen
Um auch einfach wieder Updates durchführen zu können sollte das Gateway per Git heruntergeladen und verwaltet werden:
Wir gehen dabei davon aus, dass die Installation auf einem RaspberryPi stattfindet und der Benutzer der Benutzer pi ist. Ansonsten bitte anpassen.
Um die Software laufen zu lassen muss die Umgebung zur Verfügung gestellt werden. Dies ist Node.js mit npm.
Mit den folgenden Aufrufen sollte die Version getestet werden:
Danach können dann die Module installiert und konfiguriert werden:
Damit ist das Gateway vorbereitet, kann aber noch nicht gestartet werden, da noch kein Mosquitto MQTT Server zur Verfügung steht um die Daten des Gateways zu speichern.
Einrichtung des Mosquitto MQTT Servers
Der Mosquitto MQTT Server ist für die Zwischenspeicherung der Nachrichten, die vom ZigBee - Netzwerk kommen und dahin gehen sollen zuständig. Er funktioniert wie ein Telegramm - Dienst. Das Gateway kann z. B. den Zustand eines Schalters an eine Adresse (topic) des MQTT senden. Clients wie z. B. NodeRed oder OpenHAB2 etc. können nun an dieser Adresse lauschen (subscribe) und bekommen dadurch jede Änderung der Daten an dieser Adresse mit. Dadurch können sie sofort auf die Änderung reagieren von von sich aus auf eine Adresse eine Naschricht schicken oder Aktionen auslösen.
Für die Grundinstallation ohne jegliche Absicherung des Dienstes reicht die folgende Zeile:
Vor dem Produktiveinsatz des Dienstes sollte die Kommunikation zwischen MQTT server und weiteren externen Geräten abgesichert werden.
Anpassen der Konfiguration, erster Start
Der Datei /opt/zigbee2mqtt/data/configuration.yaml liegt die Konfiguration für das Gateway. Falls der MQTT nicht auf dem lokalen Rechner läuft oder es eine Anpassung für den Benutzernamen und das Kennwort gibt, können diese hier eingetragen werden:
Es handelt sich hierbei um eine yaml - Datei. Bei diesem Dateityp ist es wichtig die Einrückungen (Leerschritte) beizubehalten.
Zusätzlich zu dem Einrichten des mqtt - Gateways sollte dem ZigBee - Netzwerk eine eigene Netzwerkadresse gegeben werden. Diese sollte möglichst nicht manuell sondern automatisch generiert werden um sie einmalig zu halten.
Ein zusätzlicher Eintrag in die Konfigurationsdatei mit dem folgenden Inhalt sorgt für die automatische Generierung einer Netzwerkadresse:
Nun steht dem ersten Start nicht mehr im Weg:
Der Server sollte nun melden, dass er an den MQTT Server verbunden ist.
Geräte, die in den Verbindungsmodus geschaltet wurden sollten nun auch sichtbar werden.
Die Meldungen, die nun vom an den MQTT Server geschickt und dort gespeichert werden lassen sich über den folgenden Befehl abrufen:
Anpassen des friendly_name
Jedes Gerät hat seine eindeutige ID, aber die ID kann sich keiner merken. Daher kann in der Datei /opt/zigbee2mqtt/data/configuration.yaml der friendly_name angepasst werden um einen sprechenden Namen für die Geräte zu bekommen.
Dazu zunächst den Server stoppen (mit STRG+C oder systemctl stop zigbee2mqtt) und die Datei dann editieren.
Beispiel:
Nach dem Neustart des Dienstest nutzt der Server dann statt der bisherigen ID den friendly_name.
Weitere Konfigurationsparameter sind auf der Website zu finden: https://www.zigbee2mqtt.io/information/configuration.html
Geräte per MQTT direkt steuern
Nachdem unsere Steckdose einen sprechenden Namen hat, können wir an das Gerät Nachrichten schicken (geht natürlich auch mit den IDs, ist aber mühsamer):
Der Nachrichteninhalt ist dabei ein JSON - Element, dass das Gateway auswertet und entsprechende Kommandos verschickt. Um ein Kommando zu senden wir an den Topic, der über mosquitto_sub ausgelesen wurde ein /set angehangen und die Nachricht dorthin geschickt.
Das Gateway selber informiert auch über Vorgänge und lässt sich per MQTT steuern: https://www.zigbee2mqtt.io/information/mqtt_topics_and_message_structure.html
Für einige Geräte sind sogar OTA-Updates verfügbar:
Automatischer Start des Dienstes
Es ist sinnvoll den Dienst so einzurichen, dass er beim Systemstart automatisch startet und nicht immer auf der Konsole per Hand aufgerufen werden muss.
Dazu kann die Datei /etc/systemd/system/zigbee2mqtt.service mit folgendem Inhalt angelegt werden:
Nach dem Anlegen kann er Dienst direkt für den Systemstart eingebunden und gestartet werden:
Ausgaben des Dienstes können jetzt über journalctl ausgelesen werden:
Installation und Einrichtung von Home Assistant
Ein schneller Weg um eine Oberfläche für die ZigBee Geräte zu bekommen ist die Software Home Assistant. Diese Software unterstützt eine Vielzahl an IoT - Geräten unter anderem auch ZigBee über mqtt.
Die Installation unter Debian:
Nach der Installation kann über Port 8123 des Rechners auf den Home Assistant zugegriffen werden.
Im Home Assistant muss dann unter den Integrationen das MQTT - Modul aktiviert und auf den Server localhost konfiguriert werden. Damit die Integration vollständig ist, muss in der zigbee2mqtt configuration.yaml die Homeasssistant Integration aktiviert sein.