Los Dae­mo­n­Sets de Ku­be­r­ne­tes si­m­pli­fi­can la gestión de apli­ca­cio­nes o servicios que necesitas ejecutar en cada nodo del cúster. La co­n­fi­gu­ra­ción y los cambios de un DaemonSet se aplican au­to­má­ti­ca­me­n­te a todos los nodos.

¿Qué son los Dae­mo­n­Sets de Ku­be­r­ne­tes?

Los Dae­mo­n­Sets de Ku­be­r­ne­tes son recursos que ga­ra­n­ti­zan que al menos una instancia de un pod es­pe­cí­fi­co se ejecute en cada nodo del clúster. De este modo, la apli­ca­ción o servicio está glo­ba­l­me­n­te presente en todo el entorno del clúster. Los Dae­mo­n­Sets son adecuados para tareas como la su­pe­r­vi­sión, el registro o los servicios de red que deben estar di­s­po­ni­bles en todos los nodos. Una de las pri­n­ci­pa­les ventajas de los Dae­mo­n­Sets es su es­ca­la­bi­li­dad, ya que inician au­to­má­ti­ca­me­n­te los pods y eliminan los pods exi­s­te­n­tes cuando los nodos fallan. Por tanto, los Dae­mo­n­Sets mejoran la fia­bi­li­dad y facilitan la gestión del clúster.

Consejo

La or­que­s­ta­ción de clústeres con Ku­be­r­ne­tes también es fácil de realizar gracias a la Cloud Em­pre­sa­rial de IONOS. Con ella obtendrás acceso a la última te­c­no­lo­gía de in­frae­s­tru­c­tu­ra como servicio (IaaS) y so­lu­cio­nes adaptadas a tu proyecto.

Co­n­fi­gu­rar el DaemonSet de Ku­be­r­ne­tes

La di­s­tri­bu­ción de los pods se puede controlar gra­nu­la­r­me­n­te ba­sá­n­do­nos en las pro­pie­da­des de los nodos, los re­qui­si­tos de recursos u otros criterios definidos por el usuario. A co­n­ti­nua­ción te ex­pli­ca­mos cómo co­n­fi­gu­rar y utilizar un DaemonSet.

Crea el archivo YAML DaemonSet

En primer lugar, debes definir la co­n­fi­gu­ra­ción del DaemonSet en un archivo YAML. Este archivo contendrá in­fo­r­ma­ción como el nombre del DaemonSet, el tipo de pod utilizado y la co­n­fi­gu­ra­ción es­pe­cí­fi­ca para la co­lo­ca­ción en los nodos.

Te mostramos un ejemplo de un archivo YAML que crea un pod con un co­n­te­ne­dor 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 co­n­fi­gu­ra­ción YAML

Abre tu línea de comandos y cambia al di­re­c­to­rio donde se encuentra tu archivo YAML de DaemonSet. A co­n­ti­nua­ción, ejecuta el comando kubectl apply para aplicar la co­n­fi­gu­ra­ción a tu clúster de Ku­be­r­ne­tes:

kubectl apply -f daemonset.yaml
shell

Este comando indica al clúster Ku­be­r­ne­tes que cree o actualice los recursos definidos en el archivo YAML.

Comprueba el DaemonSet de Ku­be­r­ne­tes

Debes comprobar si los pods deseados se han iniciado co­rre­c­ta­me­n­te en cada nodo.

kubectl get daemonset
shell

El resultado de este comando contiene in­fo­r­ma­ción relevante, que incluye:

  • DESIRED: el número deseado de pods a crear por el DaemonSet.
  • CURRENT: el número actual de pods de­s­ple­ga­dos.
  • READY: el número de pods de­s­ple­ga­dos que están ope­ra­ti­vos.
  • UP-TO-DATE: el número de pods que están ac­tua­li­za­dos en cuando a la co­n­fi­gu­ra­ción de DaemonSet.
  • AVAILABLE: el número de pods ope­ra­ti­vos que no se ven afectados por otros recursos, como afi­ni­da­des o to­le­ra­n­cias.
  • NODE SELECTOR: etiquetas para los nodos en los que debe eje­cu­tar­se el DamonSet (si está co­n­fi­gu­ra­do).
  • AGE: el tiempo tra­n­s­cu­rri­do desde que se creó el DaemonSet.

En nuestro ejemplo, puedes ver que el DaemonSet de Ku­be­r­ne­tes nginx-daemonset tiene tres pods deseados y tres pods se están eje­cu­ta­n­do ac­tua­l­me­n­te 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, in­clu­ye­n­do la pre­pa­ra­ció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 Dae­mo­n­Sets

En primer lugar, debes comprobar qué Dae­mo­n­Sets 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 Dae­mo­n­Sets de Ku­be­r­ne­tes a nodos es­pe­cí­fi­cos

Para ejecutar Dae­mo­n­Sets en nodos es­pe­cí­fi­cos de un clúster Ku­be­r­ne­tes, puedes utilizar se­le­c­to­res de nodo o afi­ni­da­des en la co­n­fi­gu­ra­ción de DaemonSet. Esto te permite es­pe­ci­fi­car 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á co­n­fi­gu­ra­do para que solo se ejecute en nodos con la etiqueta custom-label: special-node.

Co­mu­ni­ca­ción con pods de DaemonSet

La co­mu­ni­ca­ción con pods de DaemonSet en Ku­be­r­ne­tes puede tener lugar de di­fe­re­n­tes maneras, de­pe­n­die­n­do de los re­qui­si­tos de su apli­ca­ción.

  • Push: en este caso, los pods de DaemonSet envían ac­ti­va­me­n­te datos o ac­tua­li­za­cio­nes a un servicio externo. Este servicio podría ser una base de datos de es­ta­dí­s­ti­cas 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 es­pe­cí­fi­co en el nodo para ser accesible. Los clientes conocen la lista de IPs de nodo di­s­po­ni­bles y alcanzan los pods a través de la IP de nodo y puerto co­rre­s­po­n­die­n­tes.
  • DNS: uti­li­za­n­do un __headless service__ con el mismo selector de pod que el Ku­be­r­ne­tes DaemonSet, puedes habilitar la re­so­lu­ción DNS para los pods in­di­vi­dua­les. Los clientes pueden entonces co­mu­ni­car­se con los pods de DaemonSet uti­li­za­n­do el recurso Endpoints o re­cu­pe­ra­n­do múltiples registros A del DNS.
  • Service: la creación de un servicio Ku­be­r­ne­tes 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 es­pe­cí­fi­co. En su lugar, el servicio reenviará la solicitud a uno de los pods de DaemonSet di­s­po­ni­bles.

Puedes encontrar in­fo­r­ma­ción detallada sobre la gestión de clústeres para pri­n­ci­pia­n­tes en el tutorial de Ku­be­r­ne­tes de nuestra guía.

Managed Ku­be­r­ne­tes de IONOS
La pla­ta­fo­r­ma ideal para gestionar apli­ca­cio­nes en co­n­te­ne­do­res.

Co­m­ple­ta­me­n­te escalable, seguro y con ac­tua­li­za­cio­nes au­to­má­ti­cas.

Ir al menú principal