Introducción
En Kubernetes, un DaemonSet asegura que todos (o algunos) nodos ejecuten una copia de un pod. A medida que se añaden nodos al clúster, los pods se añaden a ellos. A medida que se eliminan nodos del clúster, esos pods se eliminan. El uso principal de un DaemonSet es para ejecutar demonios en cada nodo, como herramientas de monitoreo, registro o almacenamiento.
Conceptos Clave
- Pod: La unidad más pequeña y simple en el modelo de objetos de Kubernetes.
- Nodo: Una máquina, física o virtual, en el clúster de Kubernetes.
- DaemonSet: Un controlador que asegura que un pod específico se ejecute en todos los nodos seleccionados.
Ejemplo Práctico
Crear un DaemonSet
A continuación, se muestra un ejemplo de un archivo de configuración YAML para un DaemonSet que ejecuta un contenedor de Nginx en cada nodo del clúster.
apiVersion: apps/v1 kind: DaemonSet metadata: name: nginx-daemonset labels: app: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80
Desglose del YAML
- apiVersion: La versión de la API que se está utilizando. En este caso,
apps/v1
. - kind: El tipo de objeto que se está creando. Aquí es
DaemonSet
. - metadata: Información sobre el DaemonSet, como el nombre y las etiquetas.
- spec: La especificación del DaemonSet.
- selector: Define cómo seleccionar los pods que pertenecen a este DaemonSet.
- template: La plantilla para los pods que se crearán.
- metadata: Etiquetas para los pods.
- spec: La especificación de los contenedores dentro del pod.
- containers: Lista de contenedores que se ejecutarán en cada pod.
- name: Nombre del contenedor.
- image: Imagen del contenedor.
- ports: Puertos expuestos por el contenedor.
- containers: Lista de contenedores que se ejecutarán en cada pod.
Aplicar el DaemonSet
Para aplicar este DaemonSet, guarda el archivo YAML como nginx-daemonset.yaml
y ejecuta el siguiente comando:
Verificar el DaemonSet
Para verificar que el DaemonSet se ha creado y está funcionando correctamente, puedes usar el siguiente comando:
Esto mostrará una lista de todos los DaemonSets en el clúster.
Ejercicio Práctico
Ejercicio 1: Crear un DaemonSet para Fluentd
Crea un DaemonSet que ejecute Fluentd en cada nodo del clúster. Fluentd es una herramienta de registro que se utiliza comúnmente para recopilar y enviar registros a diferentes destinos.
Archivo YAML
apiVersion: apps/v1 kind: DaemonSet metadata: name: fluentd-daemonset labels: app: fluentd spec: selector: matchLabels: app: fluentd template: metadata: labels: app: fluentd spec: containers: - name: fluentd image: fluent/fluentd:latest ports: - containerPort: 24224
Pasos
- Guarda el archivo YAML como
fluentd-daemonset.yaml
. - Aplica el DaemonSet usando el comando
kubectl apply -f fluentd-daemonset.yaml
. - Verifica que el DaemonSet se ha creado correctamente usando
kubectl get daemonsets
.
Solución
Errores Comunes y Consejos
- Error en la especificación del selector: Asegúrate de que el
selector
en la especificación del DaemonSet coincida con las etiquetas en la plantilla del pod. - Imagen del contenedor incorrecta: Verifica que la imagen del contenedor especificada en el YAML esté disponible y sea correcta.
- Permisos insuficientes: Asegúrate de que tienes los permisos necesarios para crear y gestionar DaemonSets en el clúster.
Conclusión
Los DaemonSets son una herramienta poderosa en Kubernetes para asegurar que ciertos pods se ejecuten en todos o en un subconjunto de nodos del clúster. Son especialmente útiles para tareas de monitoreo, registro y otras operaciones de mantenimiento. En este módulo, hemos aprendido cómo crear y gestionar DaemonSets, así como algunos errores comunes y cómo evitarlos. En el próximo tema, exploraremos los Trabajos y CronJobs en Kubernetes.
Curso de Kubernetes
Módulo 1: Introducción a Kubernetes
- ¿Qué es Kubernetes?
- Arquitectura de Kubernetes
- Conceptos y Terminología Clave
- Configuración de un Clúster de Kubernetes
- CLI de Kubernetes (kubectl)
Módulo 2: Componentes Principales de Kubernetes
Módulo 3: Gestión de Configuración y Secretos
Módulo 4: Redes en Kubernetes
Módulo 5: Almacenamiento en Kubernetes
Módulo 6: Conceptos Avanzados de Kubernetes
Módulo 7: Monitoreo y Registro
- Monitoreo con Prometheus
- Registro con Elasticsearch, Fluentd y Kibana (EFK)
- Verificaciones de Salud y Sondas
- Servidor de Métricas
Módulo 8: Seguridad en Kubernetes
- Control de Acceso Basado en Roles (RBAC)
- Políticas de Seguridad de Pods
- Seguridad de Red
- Seguridad de Imágenes
Módulo 9: Escalado y Rendimiento
- Autoescalado Horizontal de Pods
- Autoescalado Vertical de Pods
- Autoescalado de Clúster
- Ajuste de Rendimiento
Módulo 10: Ecosistema y Herramientas de Kubernetes
Módulo 11: Estudios de Caso y Aplicaciones del Mundo Real
- Despliegue de una Aplicación Web
- CI/CD con Kubernetes
- Ejecución de Aplicaciones con Estado
- Gestión Multi-Clúster