DaemonSet

En esta página, se describen objetos de DaemonSet de Kubernetes y su uso en Google Kubernetes Engine.

¿Qué es un DaemonSet?

Como otros objetos de la carga de trabajo, los DaemonSets administran grupos de pods replicados. Sin embargo, los DaemonSets intentan seguir un modelo de un pod por nodo, ya sea en todo el clúster o en un subconjunto de nodos. A medida que agregas nodos al grupo de nodos, los DaemonSets agregan de manera automática pods a los nuevos nodos según sea necesario.

Los DaemonSets usan una plantilla de pod, que contiene una especificación para sus pods. La especificación del pod determina cómo debe verse cada pod: qué aplicaciones debe ejecutar en sus contenedores, qué volúmenes debe activar, sus etiquetas y selectores, y demás.

Patrones de uso

Los DaemonSets son útiles para implementar tareas continuas en segundo plano que necesitas ejecutar en todos los nodos (o en determinados nodos) y que no requieren intervención del usuario. Los ejemplos de tales tareas incluyen daemons de almacenamiento como ceph, daemons de recolección de registros como fluentd y daemons de supervisión de nodos como collectd.

Por ejemplo, podrías ejecutar los DaemonSets para cada tipo de daemon en todos tus nodos. De forma alternativa, puedes ejecutar múltiples DaemonSets para un solo tipo de daemon, pero deben tener diferentes opciones de configuración para diferentes tipos de hardware y necesidades de recursos.

Crea DaemonSets

Puedes crear un DaemonSet mediante kubectl apply o kubectl create.

El siguiente es un ejemplo de un archivo de manifiesto de DaemonSet:

apiVersion: v1/beta2 # For Kubernetes version 1.9 and later, use apps/v1
kind: DaemonSet
metadata:
  name: fluentd
spec:
  selector:
      matchLabels:
        name: fluentd # Label selector that determines which Pods belong to the DaemonSet
  template:
    metadata:
      labels:
        name: fluentd # Pod template's label selector
    spec:
      nodeSelector:
        type: prod # Node label selector that determines on which nodes Pod should be scheduled
                   # In this case, Pods are only scheduled to nodes bearing the label "type: prod"
      containers:
      - name: fluentd
        image: gcr.io/google-containers/fluentd-elasticsearch:1.20
        resources:
          limits:
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 200Mi

En este ejemplo:

  • Se crea un DaemonSet llamado fluentd, indicado por el campo metadata: name.
  • El pod de DaemonSet se etiqueta como fluentd.
  • Un selector de etiquetas de nodos (type: prod) declara en qué nodos etiquetados el DaemonSet programa su pod.
  • El contenedor del pod extrae la imagen fluentd-elasticsearch en la versión 1.20. La imagen del contenedor se aloja en Container Registry.
  • El contenedor solicita 100 m de CPU y 200 Mi de memoria, y se autolimita a 200 Mi totales de uso de memoria.

A modo de resumen, la especificación del pod contiene las siguientes instrucciones:

  • Etiquetar el pod como fluentd
  • Usar el selector de etiquetas de nodos type: prod a fin de programar el pod con nodos afines y no programar nodos que no posean el selector de etiquetas (otra opción es omitir el campo nodeSelector para programar en todos los nodos)
  • Ejecutar fluentd-elasticsearch en la versión 1.20
  • Solicitar algo de memoria y recursos de CPU

Para obtener más información sobre las opciones de configuración del DaemonSet, consulta la referencia de la API de DaemonSet.

Actualiza los DaemonSets

Puedes actualizar los DaemonSets si cambias la especificación de su pod, sus límites y solicitudes de recursos, etiquetas y anotaciones.

Para decidir cómo administrar las actualizaciones, el DaemonSet usa una estrategia de actualización definida en spec: updateStrategy. Existen dos estrategias, OnDelete y RollingUpdate:

  • OnDelete no borra y vuelve a crear los pods del DaemonSet de forma automática cuando cambia la configuración del objeto. En cambio, los pods deben borrarse de forma manual para que el controlador cree nuevos pods que reflejen tus cambios.
  • RollingUpdate borra y vuelve a crear de forma automática los pods del DaemonSet. Con esta estrategia, los cambios válidos activan de forma automática una actualización. Esta es la estrategia de actualización predeterminada para los DaemonSets.

Puedes supervisar las actualizaciones si ejecutas el siguiente comando:

kubectl rollout status ds [DAEMONSET_NAME]

Para obtener más información sobre cómo actualizar los DaemonSets, consulta Realiza una actualización progresiva a un DaemonSet en la documentación de Kubernetes.

Pasos siguientes

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...