Kubernetes DaemonSet: Effizientes Cluster-Management

Kubernetes DaemonSets vereinfachen das Management von Anwendungen oder Diensten, die Sie auf jedem Node im Cluster ausführen müssen. Die Konfiguration und Änderungen eines DaemonSets werden automatisch auf alle Nodes angewendet.

Was sind Kubernetes DaemonSets?

Kubernetes DaemonSets sind Ressourcen, die sicherstellen, dass mindestens eine Instanz eines bestimmten Pods auf jedem Node im Cluster läuft. Die Anwendung oder der Dienst sind damit global präsent in der gesamten Clusterumgebung. DaemonSets eignen sich besonders für Aufgaben wie Überwachung, Protokollierung oder Netzwerkdienste, die auf jedem Node im Cluster vorhanden sein müssen. Ein wesentlicher Vorteil von DaemonSets besteht in ihrer Skalierbarkeit, da sie Pods automatisch starten und vorhandene Pods löschen, wenn Nodes ausfallen oder entfernt werden. Dadurch verbessern DaemonSets die Ausfallsicherheit und erleichtern das Cluster-Management.

Tipp

Mit der Cloud Managed Kubernetes Lösung von IONOS profitieren Sie von einem vollautomatisierten Cluster-Setup sowie hochperformanten Workloads und Ausfallsicherheit.

Kubernetes DaemonSet konfigurieren

Die Pod-Verteilung ist basierend auf den Node-Eigenschaften, Ressourcenanforderungen oder anderen benutzerdefinierten Kriterien granular steuerbar. Im Folgenden erklären wir Ihnen, wie Sie ein DaemonSet einrichten und verwenden.

DaemonSet YAML-Datei erstellen

Zuerst müssen Sie die Konfiguration des DaemonSets in einer YAML-Datei definieren. Die Datei enthält Informationen wie den Namen des DaemonSets, die Art des verwendeten Pods und die spezifischen Einstellungen für die Platzierung auf den Nodes.

Hier ist ein Beispiel für eine YAML-Datei, die einen Pod mit einem NGINX-Container auf jedem Node erstellt:

apiVersion: apps/v1
kind: DaemonSet
metadata:
    name: nginx-daemonset
spec:
    selector:
        matchLabels:
            app: nginx
    template:
        metadata:
            labels:
                app: nginx
        spec:
            containers:
            - name: nginx-container
                image: nginx:latest
yaml

YAML-Konfiguration aktivieren

Öffnen Sie Ihre Kommandozeile und wechseln Sie zum Verzeichnis, in dem sich Ihre DaemonSet YAML-Datei befindet. Führen Sie dann den kubectl apply-Befehl aus, um die Konfiguration auf Ihren Kubernetes-Cluster anzuwenden:

kubectl apply -f daemonset.yaml
shell

Dieser Befehl teilt dem Kubernetes-Cluster mit, die in der YAML-Datei definierten Ressourcen zu erstellen oder zu aktualisieren.

Überprüfen des Kubernetes DaemonSets

Sie sollten kontrollieren, ob die gewünschten Pods erfolgreich auf jedem Node gestartet wurden.

kubectl get daemonset
shell

Die Ausgabe dieses Befehls enthält relevante Informationen, darunter:

  • DESIRED: Die gewünschte Anzahl der Pods, die durch das DaemonSet erstellt werden sollen.
  • CURRENT: Die tatsächliche Anzahl der bereitgestellten Pods.
  • READY: Die Anzahl der bereitgestellten Pods, die betriebsbereit sind.
  • UP-TO-DATE: Die Anzahl der Pods, die derzeit auf dem neuesten Stand in Bezug auf die DaemonSet-Konfiguration sind.
  • AVAILABLE: Die Anzahl der betriebsbereiten Pods, die von anderen Ressourcen, wie beispielsweise Affinitäten oder Toleranzen, nicht beeinträchtigt werden.
  • NODE SELECTOR: Labels für Nodes, auf denen das DaemonSet laufen soll (falls konfiguriert).
  • AGE: Die Zeit, seitdem das DaemonSet erstellt wurde.

In unserem Beispiel sehen Sie, dass das Kubernetes DaemonSet nginx-daemonset drei gewünschte Pods hat und aktuell drei Pods auf den Nodes ausgeführt werden.

NAME                      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
nginx-daemonset              3         3        3         3            3          <none>       5m
shell

Überprüfen der Pods

Um eine detailliertere Ansicht der erstellten Pods zu erhalten, verwenden Sie diesen Befehl:

kubectl get pods
shell

Die Ausgabe zeigt den Status der Pods, einschließlich der Bereitschaft, des Zustands und der Laufzeit.

NAME                      READY   STATUS    RESTARTS       AGE
nginx-daemonset-abcde     1/1      Running      0          5m
nginx-daemonset-fghij     1/1      Running      0          5m
nginx-daemonset-klmno     1/1      Running      0          5m
shell

DaemonSet löschen

Zuerst sollten Sie überprüfen, welche DaemonSets in Ihrem Cluster vorhanden sind. Geben Sie den Befehl kubectl delete daemonset gefolgt vom Namen des zu löschenden DaemonSets in die Konsole ein. Zum Beispiel:

kubectl delete daemonset nginx-daemonset
shell

Kubernetes DaemonSets auf bestimmte Nodes beschränken

Um DaemonSets auf spezifischen Nodes in einem Kubernetes-Cluster auszuführen, können Sie Node Selectors oder Affinitäten in der DaemonSet-Konfiguration verwenden. Dies ermöglicht es Ihnen, die Knoten festzulegen, auf denen die DaemonSet-Pods erstellt werden sollen.

apiVersion: apps/v1
kind: DaemonSet
metadata:
    name: nginx-daemonset
spec:
    selector:
        matchLabels:
            app: nginx
    template:
        metadata:
            labels:
                app: nginx
        spec:
            nodeSelector:
                custom-label: special-node
            containers:
            - name: nginx-container
                image: nginx:latest
yaml

In diesem Beispiel wird das DaemonSet so konfiguriert, dass es nur auf Nodes mit dem Label custom-label: special-node läuft.

Mit DaemonSet Pods kommunizieren

Die Kommunikation mit Daemon Pods in Kubernetes kann auf verschiedene Weisen erfolgen, je nach den Anforderungen Ihrer Anwendung.

  • Push: In diesem Szenario senden die DaemonSet-Pods aktiv Daten oder Updates an einen externen Service. Dieser externe Service könnte beispielsweise eine Statistikdatenbank oder ein zentrales Log-System sein. Die DaemonSet-Pods selbst haben keine Clients und initiieren keine eingehenden Verbindungen.
  • NodeIP und Bekannter Port: Bei dieser Methode verwendet jedes DaemonSet-Pod einen bestimmten Port auf dem Node, um erreichbar zu sein. Clients kennen die Liste der verfügbaren Node-IPs und erreichen die Pods durch die entsprechende Node-IP und den Port.
  • DNS: Durch einen __headless service__ mit demselben Pod-Selektor wie das Kubernetes DaemonSet können Sie eine DNS-Auflösung für die einzelnen Pods aktivieren. Clients können dann mithilfe der Endpoints-Ressource oder durch Abrufen von mehreren A-Records aus dem DNS mit den DaemonSet-Pods kommunizieren.
  • Service: Das Erstellen eines regulären Kubernetes-Dienstes mit demselben Pod-Selektor ermöglicht Clients Zugriff auf die DaemonSet-Pods. Dies erfolgt über die Cluster-IP-Adresse des Dienstes. Beachten Sie, dass dies nicht sicherstellt, dass ein bestimmter Node erreicht wird. Stattdessen wird der Dienst die Anfrage an einen der verfügbaren DaemonSet-Pods weiterleiten.

Ausführliche Informationen zum Cluster-Management für Einsteiger finden Sie im Kubernetes-Tutorial aus unserem Ratgeber.

Managed Kubernetes von IONOS

Der einfache Weg zur Verwaltung von Container-Workloads. Vollautomatisiertes Setup von Kubernetes Clustern und maximale Transparenz und Kontrolle der K8s Cluster.

Persistent Storage
K8s 24/7 voll supportet
Automatisiertes Cluster Setup