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.
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
yamlAplica 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
shellEste 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
shellEl 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
shellComprueba los pods
Para obtener una vista más detallada de los pods creados, utiliza este comando:
kubectl get pods
shellEl 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
shellEliminar 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
shellRestringe 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
yamlEn 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.
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.