Ku­ber­netes Dae­mon­Sets ver­ein­fa­chen das Ma­nage­ment von An­wen­dun­gen oder Diensten, die Sie auf jedem Node im Cluster ausführen müssen. Die Kon­fi­gu­ra­ti­on und Än­de­run­gen eines Dae­mon­Sets werden au­to­ma­tisch auf alle Nodes an­ge­wen­det.

Was sind Ku­ber­netes Dae­mon­Sets?

Ku­ber­netes Dae­mon­Sets sind Res­sour­cen, die si­cher­stel­len, dass min­des­tens eine Instanz eines be­stimm­ten Pods auf jedem Node im Cluster läuft. Die Anwendung oder der Dienst sind damit global präsent in der gesamten Clus­ter­um­ge­bung. Dae­mon­Sets eignen sich besonders für Aufgaben wie Über­wa­chung, Pro­to­kol­lie­rung oder Netz­werk­diens­te, die auf jedem Node im Cluster vorhanden sein müssen. Ein we­sent­li­cher Vorteil von Dae­mon­Sets besteht in ihrer Ska­lier­bar­keit, da sie Pods au­to­ma­tisch starten und vor­han­de­ne Pods löschen, wenn Nodes ausfallen oder entfernt werden. Dadurch ver­bes­sern Dae­mon­Sets die Aus­fall­si­cher­heit und er­leich­tern das Cluster-Ma­nage­ment.

Tipp

Mit der Cloud Managed Ku­ber­netes Lösung von IONOS pro­fi­tie­ren Sie von einem voll­au­to­ma­ti­sier­ten Cluster-Setup sowie hoch­per­for­man­ten Workloads und Aus­fall­si­cher­heit.

Ku­ber­netes DaemonSet kon­fi­gu­rie­ren

Die Pod-Ver­tei­lung ist basierend auf den Node-Ei­gen­schaf­ten, Res­sour­cen­an­for­de­run­gen oder anderen be­nut­zer­de­fi­nier­ten Kriterien granular steuerbar. Im Folgenden erklären wir Ihnen, wie Sie ein DaemonSet ein­rich­ten und verwenden.

DaemonSet YAML-Datei erstellen

Zuerst müssen Sie die Kon­fi­gu­ra­ti­on des Dae­mon­Sets in einer YAML-Datei de­fi­nie­ren. Die Datei enthält In­for­ma­tio­nen wie den Namen des Dae­mon­Sets, die Art des ver­wen­de­ten Pods und die spe­zi­fi­schen Ein­stel­lun­gen für die Plat­zie­rung 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-Kon­fi­gu­ra­ti­on ak­ti­vie­ren

Öffnen Sie Ihre Kom­man­do­zei­le und wechseln Sie zum Ver­zeich­nis, in dem sich Ihre DaemonSet YAML-Datei befindet. Führen Sie dann den kubectl apply-Befehl aus, um die Kon­fi­gu­ra­ti­on auf Ihren Ku­ber­netes-Cluster an­zu­wen­den:

kubectl apply -f daemonset.yaml
shell

Dieser Befehl teilt dem Ku­ber­netes-Cluster mit, die in der YAML-Datei de­fi­nier­ten Res­sour­cen zu erstellen oder zu ak­tua­li­sie­ren.

Über­prü­fen des Ku­ber­netes Dae­mon­Sets

Sie sollten kon­trol­lie­ren, ob die ge­wünsch­ten Pods er­folg­reich auf jedem Node gestartet wurden.

kubectl get daemonset
shell

Die Ausgabe dieses Befehls enthält relevante In­for­ma­tio­nen, darunter:

  • DESIRED: Die ge­wünsch­te Anzahl der Pods, die durch das DaemonSet erstellt werden sollen.
  • CURRENT: Die tat­säch­li­che Anzahl der be­reit­ge­stell­ten Pods.
  • READY: Die Anzahl der be­reit­ge­stell­ten Pods, die be­triebs­be­reit sind.
  • UP-TO-DATE: Die Anzahl der Pods, die derzeit auf dem neuesten Stand in Bezug auf die DaemonSet-Kon­fi­gu­ra­ti­on sind.
  • AVAILABLE: Die Anzahl der be­triebs­be­rei­ten Pods, die von anderen Res­sour­cen, wie bei­spiels­wei­se Af­fi­ni­tä­ten oder To­le­ran­zen, nicht be­ein­träch­tigt werden.
  • NODE SELECTOR: Labels für Nodes, auf denen das DaemonSet laufen soll (falls kon­fi­gu­riert).
  • AGE: Die Zeit, seitdem das DaemonSet erstellt wurde.

In unserem Beispiel sehen Sie, dass das Ku­ber­netes DaemonSet nginx-daemonset drei ge­wünsch­te Pods hat und aktuell drei Pods auf den Nodes aus­ge­führt werden.

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

Über­prü­fen der Pods

Um eine de­tail­lier­te­re Ansicht der er­stell­ten Pods zu erhalten, verwenden Sie diesen Befehl:

kubectl get pods
shell

Die Ausgabe zeigt den Status der Pods, ein­schließ­lich der Be­reit­schaft, 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 über­prü­fen, welche Dae­mon­Sets in Ihrem Cluster vorhanden sind. Geben Sie den Befehl kubectl delete daemonset gefolgt vom Namen des zu lö­schen­den Dae­mon­Sets in die Konsole ein. Zum Beispiel:

kubectl delete daemonset nginx-daemonset
shell

Ku­ber­netes Dae­mon­Sets auf bestimmte Nodes be­schrän­ken

Um Dae­mon­Sets auf spe­zi­fi­schen Nodes in einem Ku­ber­netes-Cluster aus­zu­füh­ren, können Sie Node Selectors oder Af­fi­ni­tä­ten in der DaemonSet-Kon­fi­gu­ra­ti­on verwenden. Dies er­mög­licht es Ihnen, die Knoten fest­zu­le­gen, 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 kon­fi­gu­riert, dass es nur auf Nodes mit dem Label custom-label: special-node läuft.

Mit DaemonSet Pods kom­mu­ni­zie­ren

Die Kom­mu­ni­ka­ti­on mit Daemon Pods in Ku­ber­netes kann auf ver­schie­de­ne Weisen erfolgen, je nach den An­for­de­run­gen Ihrer Anwendung.

  • Push: In diesem Szenario senden die DaemonSet-Pods aktiv Daten oder Updates an einen externen Service. Dieser externe Service könnte bei­spiels­wei­se eine Sta­tis­tik­da­ten­bank oder ein zentrales Log-System sein. Die DaemonSet-Pods selbst haben keine Clients und in­iti­ie­ren keine ein­ge­hen­den Ver­bin­dun­gen.
  • NodeIP und Bekannter Port: Bei dieser Methode verwendet jedes DaemonSet-Pod einen be­stimm­ten Port auf dem Node, um er­reich­bar zu sein. Clients kennen die Liste der ver­füg­ba­ren Node-IPs und erreichen die Pods durch die ent­spre­chen­de Node-IP und den Port.
  • DNS: Durch einen __headless service__ mit demselben Pod-Selektor wie das Ku­ber­netes DaemonSet können Sie eine DNS-Auflösung für die einzelnen Pods ak­ti­vie­ren. Clients können dann mithilfe der Endpoints-Ressource oder durch Abrufen von mehreren A-Records aus dem DNS mit den DaemonSet-Pods kom­mu­ni­zie­ren.
  • Service: Das Erstellen eines regulären Ku­ber­netes-Dienstes mit demselben Pod-Selektor er­mög­licht Clients Zugriff auf die DaemonSet-Pods. Dies erfolgt über die Cluster-IP-Adresse des Dienstes. Beachten Sie, dass dies nicht si­cher­stellt, dass ein be­stimm­ter Node erreicht wird. Statt­des­sen wird der Dienst die Anfrage an einen der ver­füg­ba­ren DaemonSet-Pods wei­ter­lei­ten.

Aus­führ­li­che In­for­ma­tio­nen zum Cluster-Ma­nage­ment für Ein­stei­ger finden Sie im Ku­ber­netes-Tutorial aus unserem Ratgeber.

Managed Ku­ber­netes
Ku­ber­netes als Managed Service von IONOS Cloud

Die ideale Plattform für per­for­man­te und hoch­ska­lier­ba­re Container-An­wen­dun­gen. Umfassend ins IONOS Cloud Ökosystem in­te­griert und rund um die Uhr pro­fes­sio­nell betreut.

Zum Hauptmenü