DaemonSets para tareas específicas de nodos
Use DaemonSets para ejecutar una copia de un Pod en todos los nodos del clúster o en nodos seleccionados para operaciones a nivel de clúster.
DaemonSets para tareas específicas de nodos es una lección gratuita de DevOps Bootcamp en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de DevOps Bootcamp, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de DevOps Bootcamp incluye 4 lecciones en total.
¿Qué son los DaemonSets?
Imagine que necesita ejecutar una herramienta o un servicio específico en cada servidor de su clúster. Por ejemplo, un agente de registro que recopile los registros de cada máquina.
¡Aquí es donde entran en juego los DaemonSets! A diferencia de los Deployments, cuyo objetivo es mantener un número determinado de Pods ejecutándose en algún lugar del clúster, un DaemonSet garantiza que se ejecute una copia de un Pod en todos los nodos (o en los nodos seleccionados).
Usos habituales de los DaemonSets
Los DaemonSets son ideales para tareas que deben ejecutarse en el nivel del nodo. Estos son algunos ejemplos habituales:
- Agentes de registro: herramientas como Fluentd o Logstash para recopilar registros de cada nodo.
- Agentes de supervisión: Prometheus Node Exporter para recopilar métricas de cada servidor.
- Daemons de almacenamiento: servicios como GlusterFS o Ceph que proporcionan almacenamiento distribuido en cada nodo.
- Proxies de red: el propio Kube-proxy de Kubernetes se ejecuta como un DaemonSet para gestionar las reglas de red.
Manifiesto básico de DaemonSet
La definición de un DaemonSet es muy similar a la de un Deployment. La diferencia clave es kind: DaemonSet. Veamos una estructura básica:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: my-daemonset
spec:
selector:
matchLabels:
app: my-daemonset-app
template:
metadata:
labels:
app: my-daemonset-app
spec:
containers:
- name: my-container
image: busybox
command: ["sh", "-c", "echo 'Hello from DaemonSet on node $(NODE_NAME)'; sleep 3600"]
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeNamePartes clave del YAML
Analicemos las secciones importantes de nuestro manifiesto de DaemonSet:
kind: DaemonSet: indica a Kubernetes que queremos gestionar Pods específicos de los nodos.spec.selector: ¡esencial! Define cómo el DaemonSet encuentra y gestiona sus Pods mediante etiquetas.spec.template: es la propia definición del Pod. Es prácticamente idéntica a la plantilla de Pod que encontraría en un Deployment. Describe los contenedores, los volúmenes y otros ajustes del Pod que se ejecutará en cada nodo.
Implementación en todos los nodos
Aquí tiene un DaemonSet sencillo que ejecuta un contenedor busybox en cada nodo apto. Imprimirá un mensaje que indica en qué nodo se está ejecutando.
Este es un patrón habitual para los agentes de todo el clúster.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-hello-daemon
spec:
selector:
matchLabels:
app: node-hello
template:
metadata:
labels:
app: node-hello
spec:
containers:
- name: hello-container
image: busybox
command: ["sh", "-c", "while true; do echo 'Hello from node: $(NODE_NAME)'; sleep 5; done"]
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeNamePuesta en marcha de su DaemonSet
Para crear el DaemonSet en su clúster de Kubernetes, utilice el conocido comando kubectl apply con el archivo YAML que acaba de ver:
kubectl apply -f node-hello-daemonset.yaml
A continuación, Kubernetes garantizará que se programe un Pod en cada nodo que cumpla los criterios del DaemonSet.
Comprobación del estado del DaemonSet
Después de aplicarlo, puede comprobar el estado del DaemonSet y de los Pods que ha creado:
- Para ver el DaemonSet:
kubectl get ds - Para ver los Pods individuales que se ejecutan en cada nodo:
kubectl get pods -l app=node-hello -o wide
La opción -o wide le ayuda a ver en qué nodo está programado cada Pod.
DaemonSets en nodos seleccionados
¿Qué ocurre si solo quiere que su DaemonSet se ejecute en un subconjunto de los nodos? Por ejemplo, únicamente en nodos con GPU o en nodos dedicados al almacenamiento.
Puede conseguirlo mediante nodeSelector. Este campo de spec del Pod (dentro de la plantilla del DaemonSet) permite especificar las etiquetas que debe tener un nodo para que el Pod se programe en él.
Uso de selectores de nodos en YAML
Modifiquemos nuestro DaemonSet anterior para que solo se ejecute en los nodos etiquetados con disktype: ssd. Primero tendría que etiquetar los nodos; por ejemplo, con kubectl label node <node-name> disktype=ssd.
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: ssd-monitor-daemon
spec:
selector:
matchLabels:
app: ssd-monitor
template:
metadata:
labels:
app: ssd-monitor
spec:
nodeSelector:
disktype: ssd # Only runs on nodes with this label
containers:
- name: monitor-container
image: busybox
command: ["sh", "-c", "while true; do echo 'Monitoring SSD on node: $(NODE_NAME)'; sleep 10; done"]
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeNameCapacidades de los DaemonSets
Ha aprendido cómo funcionan los DaemonSets. ¡Pongamos a prueba sus conocimientos!
DaemonSets: puntos clave
¡Excelente trabajo! Ha aprendido correctamente los conceptos de los DaemonSets de Kubernetes.
- Los DaemonSets garantizan que se ejecute un Pod en cada nodo apto.
- Son fundamentales para las operaciones en el nivel del nodo, como los agentes de registro, supervisión y almacenamiento.
- Puede utilizar
nodeSelectorpara dirigirse a nodos específicos. - Los DaemonSets se definen con
kind: DaemonSety utilizan una plantilla de Pod, de forma similar a los Deployments.
A continuación, explorará los StatefulSets para gestionar aplicaciones con estado.
Preguntas frecuentes
¿La lección «DaemonSets para tareas específicas de nodos» es gratis?
Sí — el texto completo de «DaemonSets para tareas específicas de nodos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de DevOps Bootcamp, actualiza a CoddyKit PRO. El curso de DevOps Bootcamp incluye 4 lecciones en total.
¿Qué aprenderé en «DaemonSets para tareas específicas de nodos»?
Use DaemonSets para ejecutar una copia de un Pod en todos los nodos del clúster o en nodos seleccionados para operaciones a nivel de clúster. Practicas DevOps Bootcamp con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar DevOps Bootcamp?
No se requiere experiencia previa. DevOps Bootcamp en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «DaemonSets para tareas específicas de nodos»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de DevOps Bootcamp?
Sí. Cada lección de DevOps Bootcamp incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- StatefulSets para aplicaciones con estado
- DaemonSets para tareas específicas de nodos
- Comprender los Operators de Kubernetes
- Definiciones de recursos personalizados (CRD)