Sobes.tech
Middle

Ποια είναι η πρακτική εφαρμογή του DaemonSet στο Kubernetes;

sobes.tech AI

Απάντηση από AI

DaemonSet διασφαλίζει ότι ένα pod εκτελείται σε όλους (ή σε ένα καθορισμένο υποσύνολο) των κόμβων του cluster. Αυτό είναι χρήσιμο για την ανάπτυξη συστημικών δαίμονων που πρέπει να λειτουργούν σε κάθε κόμβο.

Πρακτικές εφαρμογές:

  • Συλλογή logs: Εκτέλεση ενός agent συλλογής logs (π.χ., Fluentd, Logstash) σε κάθε κόμβο για την αποστολή logs σε κεντρική αποθήκευση.
  • Παρακολούθηση κόμβων: Ανάπτυξη ενός agent παρακολούθησης (π.χ., Prometheus Node Exporter, Datadog Agent) σε κάθε κόμβο για συλλογή μετρικών κατάστασης κόμβου.
  • Αποθήκευση σε cluster: Εκτέλεση ενός daemon αποθήκευσης (π.χ., Ceph, Glusterfs) σε κάθε κόμβο για διασφαλισμένη κατανεμημένη αποθήκευση.
  • Πράκτορες ασφαλείας: Ανάπτυξη agents ασφαλείας ή ελέγχου σε κάθε κόμβο.

Διαφορά με το Deployment: Το DaemonSet δημιουργεί ένα pod σε κάθε κόμβο, ενώ το Deployment προσπαθεί να διατηρήσει έναν καθορισμένο αριθμό αντιγράφων σε ολόκληρο το cluster, διανέμοντάς τα μεταξύ των διαθέσιμων κόμβων.

Παράδειγμα manifest DaemonSet για έναν agent συλλογής logs:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd-elasticsearch
  labels:
    k8s-app: fluentd-logging
spec:
  selector:
    matchLabels:
      name: fluentd-elasticsearch
  template:
    metadata:
      labels:
        name: fluentd-elasticsearch
    spec:
      containers:
      - name: fluentd-elasticsearch
        image: fluentd/fluentd-kubernetes-daemonset:v1.14-debian-elasticsearch7-1
        env:
        - name:  FLUENT_ELASTICSEARCH_HOST
          value: "elasticsearch.default.svc.cluster.local" # Παράδειγμα διεύθυνσης Elasticsearch
        - name:  FLUENT_ELASTICSEARCH_PORT
          value: "9200"
        - name: FLUENT_ELASTICSEARCH_SCHEME
          value: "http"
        volumeMounts:
        - name: varlog
          mountPath: /var/log
        - name: varlibdockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
      terminationGracePeriodSeconds: 30
      volumes:
      - name: varlog
        hostPath:
          path: /var/log
      - name: varlibdockercontainers
        hostPath:
          path: /var/lib/docker/containers

Το DaemonSet προσθέτει αυτόματα ένα pod σε κάθε νέο κόμβο και το διαγράφει όταν ένας κόμβος αφαιρείται από το cluster.