Kubernetes DaemonSet: optimizar la gestión de clústeres

Los DaemonSets de Kubernetes simplifican la gestión de aplicaciones o servicios que necesitas ejecutar en cada nodo del cúster. La configuración y los cambios de un DaemonSet se aplican automáticamente a todos los nodos.

¿Qué son los DaemonSets de Kubernetes?

Los DaemonSets de Kubernetes son recursos que garantizan que al menos una instancia de un pod específico se ejecute en cada nodo del clúster. De este modo, la aplicación o servicio está globalmente presente en todo el entorno del clúster. Los DaemonSets son adecuados para tareas como la supervisión, el registro o los servicios de red que deben estar disponibles en todos los nodos. Una de las principales ventajas de los DaemonSets es su escalabilidad, ya que inician automáticamente los pods y eliminan los pods existentes cuando los nodos fallan. Por tanto, los DaemonSets mejoran la fiabilidad y facilitan la gestión del clúster.

Consejo

La orquestación de clústeres con Kubernetes también es fácil de realizar gracias a la Cloud Empresarial de IONOS. Con ella obtendrás acceso a la última tecnología de infraestructura como servicio (IaaS) y soluciones adaptadas a tu proyecto.

Configurar el DaemonSet de Kubernetes

La distribución de los pods se puede controlar granularmente basándonos en las propiedades de los nodos, los requisitos de recursos u otros criterios definidos por el usuario. A continuación te explicamos cómo configurar y utilizar un DaemonSet.

Crea el archivo YAML DaemonSet

En primer lugar, debes definir la configuración del DaemonSet en un archivo YAML. Este archivo contendrá información como el nombre del DaemonSet, el tipo de pod utilizado y la configuración específica para la colocación en los nodos.

Te mostramos un ejemplo de un archivo YAML que crea un pod con un contenedor NGINX en cada nodo:

apiVersion: apps/v1 
kind: DaemonSet 
metadata: 
    name: nginx-daemonset 
spec: 
    selector: 
        matchLabels: 
            app: nginx 
    template: 
        metadata: 
            labels: 
                app: nginx 
        spec: 
            containers: 
            - name: nginx-container 
                image: nginx:latest
yaml

Aplica la configuración YAML

Abre tu línea de comandos y cambia al directorio donde se encuentra tu archivo YAML de DaemonSet. A continuación, ejecuta el comando kubectl apply para aplicar la configuración a tu clúster de Kubernetes:

kubectl apply -f daemonset.yaml
shell

Este comando indica al clúster Kubernetes que cree o actualice los recursos definidos en el archivo YAML.

Comprueba el DaemonSet de Kubernetes

Debes comprobar si los pods deseados se han iniciado correctamente en cada nodo.

kubectl get daemonset
shell

El resultado de este comando contiene información relevante, que incluye:

  • DESIRED: el número deseado de pods a crear por el DaemonSet.
  • CURRENT: el número actual de pods desplegados.
  • READY: el número de pods desplegados que están operativos.
  • UP-TO-DATE: el número de pods que están actualizados en cuando a la configuración de DaemonSet.
  • AVAILABLE: el número de pods operativos que no se ven afectados por otros recursos, como afinidades o tolerancias.
  • NODE SELECTOR: etiquetas para los nodos en los que debe ejecutarse el DamonSet (si está configurado).
  • AGE: el tiempo transcurrido desde que se creó el DaemonSet.

En nuestro ejemplo, puedes ver que el DaemonSet de Kubernetes nginx-daemonset tiene tres pods deseados y tres pods se están ejecutando actualmente en los nodos.

NAME                      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE 
nginx-daemonset              3         3        3         3            3          <none>       5m
shell

Comprueba los pods

Para obtener una vista más detallada de los pods creados, utiliza este comando:

kubectl get pods
shell

El resultado muestra el estado de los pods, incluyendo la preparación, el estado y el tiempo de ejecución.

NAME                      READY   STATUS    RESTARTS       AGE 
nginx-daemonset-abcde     1/1      Running      0          5m 
nginx-daemonset-fghij     1/1      Running      0          5m 
nginx-daemonset-klmno     1/1      Running      0          5m
shell

Eliminar DaemonSets

En primer lugar, debes comprobar qué DaemonSets están presentes en tu clúster. Introduce el comando kubectl delete daemonset seguido del nombre del DaemonSet que deseas eliminar en la consola. Por ejemplo:

kubectl delete daemonset nginx-daemonset
shell

Restringe DaemonSets de Kubernetes a nodos específicos

Para ejecutar DaemonSets en nodos específicos de un clúster Kubernetes, puedes utilizar selectores de nodo o afinidades en la configuración de DaemonSet. Esto te permite especificar los nodos en los que se crearán los pods DaemonSet.

apiVersion: apps/v1 
kind: DaemonSet 
metadata: 
    name: nginx-daemonset 
spec: 
    selector: 
        matchLabels: 
            app: nginx 
    template: 
        metadata: 
            labels: 
                app: nginx 
        spec: 
            nodeSelector: 
                custom-label: special-node 
            containers: 
            - name: nginx-container 
                image: nginx:latest
yaml

En este ejemplo, el DamonSet está configurado para que solo se ejecute en nodos con la etiqueta custom-label: special-node.

Comunicación con pods de DaemonSet

La comunicación con pods de DaemonSet en Kubernetes puede tener lugar de diferentes maneras, dependiendo de los requisitos de su aplicación.

  • Push: en este caso, los pods de DaemonSet envían activamente datos o actualizaciones a un servicio externo. Este servicio podría ser una base de datos de estadísticas o un sistema de registro central, por ejemplo. Los pods de DaemonSet no tienen clientes y no inician ninguna conexión entrante.
  • NodeIP y puerto conocido: con este método, cada pod de DaemonSet utiliza un puerto específico en el nodo para ser accesible. Los clientes conocen la lista de IPs de nodo disponibles y alcanzan los pods a través de la IP de nodo y puerto correspondientes.
  • DNS: utilizando un __headless service__ con el mismo selector de pod que el Kubernetes DaemonSet, puedes habilitar la resolución DNS para los pods individuales. Los clientes pueden entonces comunicarse con los pods de DaemonSet utilizando el recurso Endpoints o recuperando múltiples registros A del DNS.
  • Service: la creación de un servicio Kubernetes normal con el mismo selector de pods permite a los clientes acceder a los pods de DaemonSet. Esto se hace a través de la dirección IP del clúster del servicio. Ten en cuenta que esto no garantiza que se llegue a un nodo específico. En su lugar, el servicio reenviará la solicitud a uno de los pods de DaemonSet disponibles.

Puedes encontrar información detallada sobre la gestión de clústeres para principiantes en el tutorial de Kubernetes de nuestra guía.

Managed Kubernetes
Gestiona las cargas de trabajo de los contenedores con total seguridad

La plataforma ideal para aplicaciones de contenedores de alto rendimiento y gran escalabilidad, integrada en el ecosistema de IONOS Cloud con soporte experto 24/7.

¿Le ha resultado útil este artículo?
Utilizamos cookies propias y de terceros para mejorar nuestros servicios y mostrarle publicidad relacionada con sus preferencias mediante el análisis de sus hábitos de navegación. Si continua navegando, consideramos que acepta su uso. Puede obtener más información, o bien conocer cómo cambiar la configuración de su navegador en nuestra. Política de Cookies.
Page top