Sobes.tech
Middle
204
questionbank

Каково практическое применение DaemonSet в Kubernetes?

Answer from AI

sobes.tech AI

DaemonSet гарантирует, что под копия запущена на всех (или на указанном подмножестве) узлах кластера. Это полезно для развертывания системных демонов, которые должны работать на каждом узле.

Практические применения:

  • Сбор логов: Запуск агента сбора логов (например, Fluentd, Logstash) на каждом узле для передачи логов в централизованное хранилище.
  • Мониторинг узлов: Развертывание агента мониторинга (например, Prometheus Node Exporter, Datadog Agent) на каждом узле для сбора метрик состояния узла.
  • Кластерное хранилище: Запуск демона хранилища (например, Ceph, Glusterfs) на каждом узле для обеспечения распределенного хранения.
  • Агенты безопасности: Развертывание агентов безопасности или аудита на каждом узле.

Отличие от Deployment: DaemonSet создает под на каждом узле, тогда как Deployment стремится поддерживать заданное количество реплик по всему кластеру, распределяя их по доступным узлам.

Пример манифеста DaemonSet для агента сбора логов:

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 автоматически добавляет под на новые узлы и удаляет его при удалении узла из кластера.