Sobes.tech
Middle

Was ist der Unterschied zwischen Deployment und DaemonSet in Kubernetes?

sobes.tech KI

Antwort von AI

Deployment verwaltet eine Gruppe von Pod-Replikaten, stellt die erforderliche Anzahl sicher und skaliert automatisch. Es eignet sich gut für die Arbeit mit den meisten stateless-Anwendungen.

DaemonSet stellt sicher, dass eine Kopie des Pods auf jedem Knoten (oder auf einer Teilmenge von Knoten, je nach Selektor) des Clusters ausgeführt wird. Wird für Hintergrundaufgaben wie Log-Sammlung oder Überwachung verwendet.

Hier sind die wichtigsten Unterschiede:

Merkmal Deployment DaemonSet
Ziel Aufrechterhaltung einer festgelegten Anzahl von Pod-Replikaten Ausführung eines Pods auf jedem Knoten (oder Teilmenge)
Anzahl der Pods Wird durch den Parameter replicas gesteuert Wird durch die Anzahl der Knoten bestimmt
Skalierung Horizontal, nach Bedarf Verbunden mit dem Hinzufügen/Entfernen von Knoten
Anwendungsbeispiele Webserver, Microservices Log-Sammler, Überwachungsagenten, Netzwerk-Daemons
Aktualisierung Schrittweise (Rolling Update) oder ersetzend Wird auf den Knoten automatisch aktualisiert, wenn nötig

Beispiel für ein Manifest für Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3 # Starte 3 Kopien des Pods
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

Beispiel für ein Manifest für DaemonSet:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentbit-daemonset
spec:
  selector:
    matchLabels:
      name: fluentbit # Label für den Pod-Selektor
  template:
    metadata:
      labels:
        name: fluentbit
    spec:
      containers:
      - name: fluentbit
        image: fluent/fluent-bit:1.8 # Image für den Log-Sammler
        # Zusätzliche Einstellungen für den Zugriff auf Log-Dateien usw.
      tolerations:
      # Oft notwendig, um auf Master-Knoten zu laufen
      - key: node-role.kubernetes.io/master
        effect: NoSchedule