Sobes.tech
Middle

¿En qué consiste la diferencia entre Deployment y DaemonSet en Kubernetes?

sobes.tech AI

Respuesta de la IA

Deployment gestiona un conjunto de réplicas de Pods, asegurando la cantidad requerida y el escalado automático. Es adecuado para la mayoría de las aplicaciones sin estado.

DaemonSet garantiza que una copia del Pod se ejecute en cada nodo (o en un subconjunto de nodos, según el selector) del clúster. Se usa para tareas en segundo plano, como recopilación de logs o monitoreo.

Aquí están las diferencias clave:

Característica Deployment DaemonSet
Objetivo Mantener un número definido de réplicas de Pods Ejecutar un Pod en cada nodo (o subconjunto)
Número de Pods Controlado por el parámetro replicas Determinado por el número de nodos
Escalado Horizontal, bajo demanda Relacionado con agregar/eliminar nodos
Ejemplos de uso Servidores web, microservicios Recolectores de logs, agentes de monitoreo, demonios de red
Actualización Gradual (actualización continua) o reemplazo Se actualiza automáticamente en los nodos según sea necesario

Ejemplo de manifiesto para Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3 # Ejecutar 3 copias del Pod
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

Ejemplo de manifiesto para DaemonSet:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentbit-daemonset
spec:
  selector:
    matchLabels:
      name: fluentbit # Etiqueta para el selector de Pods
  template:
    metadata:
      labels:
        name: fluentbit
    spec:
      containers:
      - name: fluentbit
        image: fluent/fluent-bit:1.8 # Imagen para el recolector de logs
        # Configuraciones adicionales para acceder a archivos de logs, etc.
      tolerations:
      # A menudo necesario para ejecutar en nodos master
      - key: node-role.kubernetes.io/master
        effect: NoSchedule