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: 80Desglose 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: 24224Pasos
- 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
selectoren 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
