Está en la página 1de 13

Documentación Kubernetes Blog Partners Comunidad Casos de éxito Versions Español

Documentación / Conceptos / Cargas de trabajo / Controladores / DaemonSet

 Buscar
DaemonSet
Home
Un DaemonSet garantiza que todos (o algunos) de los nodos ejecuten una copia de un Pod.
Setup Conforme se añade más nodos al clúster, nuevos Pods son añadidos a los mismos. Conforme se
Conceptos elimina nodos del clúster, dichos Pods se destruyen. Al eliminar un DaemonSet se limpian todos
los Pods que han sido creados.
Introducción
Arquitectura de Algunos casos de uso típicos de un DaemonSet son:
Kubernetes
ejecutar un proceso de almacenamiento en el clúster, como glusterd , ceph , en cada
Contenedores
nodo.
Cargas de trabajo
ejecutar un proceso de recolección de logs en cada nodo, como fluentd o logstash .
Pods
ejecutar un proceso de monitorización de nodos en cada nodo, como Prometheus Node
Controladores Exporter, [Sysdig Agent] (https://sysdigdocs.atlassian.net/wiki/spaces/Platform), collectd ,
ReplicaSet Dynatrace OneAgent, AppDynamics Agent, Datadog agent, New Relic agent, Ganglia gmond

ReplicationController o un agente de Instana.

Deployment De forma básica, se debería usar un DaemonSet, cubriendo todos los nodos, por cada tipo de
StatefulSets proceso. En con guraciones más complejas se podría usar múltiples DaemonSets para un único
tipo de proceso, pero con diferentes parámetros y/o diferentes peticiones de CPU y memoria
DaemonSet
según el tipo de hardware.
Jobs (EN)
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Escribir una especi cación de DaemonSet
Recolección de

Documentación Kubernetes Blog Partners Comunidad Casos de éxito Versions Español


Crear un DaemonSet
Un DaemonSet se describe por medio de un archivo YAML. Por ejemplo, el archivo
daemonset.yaml de abajo describe un DaemonSet que ejecuta la imagen Docker de uentd-
elasticsearch:

controllers/daemonset.yaml

apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd-elasticsearch
namespace: kube-system
labels:
k8s-app: fluentd-logging
spec:
selector:
matchLabels:
name: fluentd-elasticsearch
template:
metadata:
labels:
name: fluentd-elasticsearch
spec:
tolerations:

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
- key: node-role.kubernetes.io/master
effect: NoSchedule
containers:
- name: fluentd-elasticsearch
Documentación Kubernetes
image: Blog Partners Comunidad Casos de éxito Versions
gcr.io/fluentd-elasticsearch/fluentd:v2.5.1 Español
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 200Mi
volumeMounts:
- name: varlog
mountPath: /var/log
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
terminationGracePeriodSeconds: 30
volumes:
- name: varlog
hostPath:
path: /var/log
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers

Crear un DaemonSet basado en el archivo YAML:

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
kubectl apply -f https://k8s.io/examples/controllers/daemonset.yaml

Documentación Kubernetes Blog Partners Comunidad Casos de éxito Versions Español


Campos requeridos
Como con cualquier otra con guración de Kubernetes, un DaemonSet requiere los campos
apiVersion , kind , y metadata .
Para información general acerca de cómo trabajar con cheros de con guración, ver los
documentos desplegar aplicaciones, con gurar contenedores, y gestión de objetos usando
kubectl.

Un DaemonSet también necesita un sección .spec .

Plantilla Pod
El campo .spec.template es uno de los campos obligatorios de la sección .spec .

El campo .spec.template es una plantilla Pod. Tiene exactamente el mismo esquema que un
Pod, excepto por el hecho de que está anidado y no tiene los campos apiVersion o kind .

Además de los campos obligatorios de un Pod, la plantilla Pod para un DaemonSet debe
especi car las etiquetas apropiadas (ver selector de pod).

Una plantilla Pod para un DaemonSet debe tener una RestartPolicy igual a Always , o no
indicarse, lo cual asume por defecto el valor Always .

Selector de Pod

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
El campo .spec.selector es un selector de pod. Funciona igual que el campo .spec.selector
de un Job.

A partir de Kubernetes 1.8, se debe con gurar un selector de pod que coincida con las etiquetas
Documentación Kubernetes Blog Partners Comunidad Casos de éxito Versions Español
de nidas en el .spec.template . Así, el selector de pod ya no asume valores por defecto cuando
no se indica. Dichos valores por defecto no eran compatibles con kubectl apply . Además, una
vez que se ha creado el DaemonSet, su campo .spec.selector no puede alterarse porque, si
fuera el caso, ello podría resultar en Pods huérfanos, lo cual confundiría a los usuarios.

El campo .spec.selector es un objeto que, a su vez, consiste en dos campos:

matchLabels - funciona igual que el campo .spec.selector de un ReplicationController.

matchExpressions - permite construir selectores más so sticados indicando la clave, la


lista de valores y un operador para relacionar la clave y los valores.

Cuando se con gura ambos campos, el resultado es conjuntivo (AND).

Si se especi ca el campo .spec.selector , entonces debe coincidir con el campo


.spec.template.metadata.labels . Aquellas con guraciones que no coinciden, son rechazadas
por la API.

Además, normalmente no se debería crear ningún Pod con etiquetas que coincidan con el
selector, bien sea de forma directa, via otro DaemonSet, o via otro controlador como un
ReplicaSet. De ser así, el controlador del DaemonSet pensará que dichos Pods fueron en
realidad creados por él mismo. Kubernetes, en cualquier caso, no te impide realizar esta
operación. Un caso donde puede que necesites hacer esto es cuando quieres crear
manualmente un Pod con un valor diferente en un nodo para pruebas.

Ejecutar Pods sólo en algunos Nodos


Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Si se con gura un .spec.template.spec.nodeSelector , entonces el controlador del DaemonSet
creará los Pods en aquellos nodos que coincidan con el selector de nodo indicado. De forma
similar, si se con gura una .spec.template.spec.affinity , entonces el controlador del
DaemonSet creará
Documentación los Pods Blog
Kubernetes en aquellos nodos
Partners que coincidan
Comunidad Casos con la a nidad
de éxito de nodoEspañol
Versions indicada.
Si no se con gura ninguno de los dos, entonces el controlador del DaemonSet creará los Pods
en todos los nodos.

Cómo se plani can los Pods procesos


Plani cados por el controlador del DaemonSet (deshabilitado
por defecto a partir de 1.12)
Normalmente, el plani cador de Kubernetes determina la máquina donde se ejecuta un Pod. Sin
embargo, los Pods creados por el controlador del DaemonSet ya tienen la máquina seleccionada
(puesto que cuando se crea el Pod, se indica el campo .spec.nodeName , y por ello el plani cador
los ignora). Por lo tanto:

El controlador del DaemonSet no tiene en cuenta el campo unschedulable de un nodo.


El controlador del DaemonSet puede crear Pods incluso cuando el plani cador no ha
arrancado, lo cual puede ayudar en el arranque del propio clúster.

Plani cados por el plani cador por defecto de Kubernetes


(habilitado por defecto desde 1.12)
FEATURE STATE: Kubernetes v1.21 [beta]

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Un DaemonSet garantiza que todos los nodos elegibles ejecuten una copia de un Pod.
Normalmente, es el plani cador de Kubernetes quien determina el nodo donde se ejecuta un
Pod. Sin embargo, los pods del DaemonSet son creados y plani cados por el mismo controlador
del DaemonSet. Esto
Documentación introduce
Kubernetes BloglosPartners
siguientes inconvenientes:
Comunidad Casos de éxito Versions Español

Comportamiento inconsistente de los Pods: Los Pods normales que están esperando a ser
creados, se encuentran en estado Pending , pero los pods del DaemonSet no pasan por el
estado Pending . Esto confunde a los usuarios.
La prioridad y el comportamiento de apropiación de Pods se maneja por el plani cador por
defecto. Cuando se habilita la contaminación, el controlador del DaemonSet tomará la
decisiones de plani cación sin considerar ni la prioridad ni la contaminación del pod.

ScheduleDaemonSetPods permite plani car DaemonSets usando el plani cador por defecto en
vez del controlador del DaemonSet, añadiendo la condición NodeAffinity a los pods del
DaemonSet, en vez de la condición .spec.nodeName . El plani cador por defecto se usa entonces
para asociar el pod a su servidor destino. Si la a nidad de nodo del pod del DaemonSet ya
existe, se sustituye. El controlador del DaemonSet sólo realiza estas operaciones cuando crea o
modi ca los pods del DaemonSet, y no se realizan cambios al spec.template del DaemonSet.

nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchFields:
- key: metadata.name
operator: In
values:
- target-host-name

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Adicionalmente, se añade de forma automática la tolerancia
node.kubernetes.io/unschedulable:NoSchedule a los Pods del DaemonSet. Así, el plani cador
por defecto ignora los nodos unschedulable cuando plani ca los Pods del DaemonSet.
Documentación Kubernetes Blog Partners Comunidad Casos de éxito Versions Español

Contaminaciones (taints) y Tolerancias (tolerations)


A pesar de que los Pods de proceso respetan las contaminaciones y tolerancias, la siguientes
tolerancias son añadidas a los Pods del DaemonSet de forma automática según las siguientes
características:

Clave de tolerancia Efecto Versión Descripción

node.kubernetes NoExe 1.13+ Los pods del DaemonSet no son expulsados


.io/not-ready cute cuando hay problemas de nodo como una
partición de red.

node.kubernetes NoExe 1.13+ Los pods del DaemonSet no son expulsados


.io/unreachable cute cuando hay problemas de nodo como una
partición de red.

node.kubernetes NoSch 1.8+ Los pods del DaemonSet no son expulsados


.io/disk- edule cuando hay problemas de nodo como la falta
pressure de espacio en disco.

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Clave de tolerancia Efecto Versión Descripción

node.kubernetes NoSch 1.8+ Los pods del DaemonSet no son expulsados


Documentación Kubernetes Blog Partners Comunidad Casos de éxito Versions Español
.io/memory- edule cuando hay problemas de nodo como la falta
pressure de memoria.

node.kubernetes NoSch 1.12+ Los pods del DaemonSet toleran los atributos
.io/unschedulab edule unschedulable del plani cador por defecto.
le

node.kubernetes NoSch 1.12+ Los pods del DaemonSet, que usan la red del
.io/network- edule servidor an trión, toleran los atributos
unavailable network-unavailable del plani cador por
defecto.

Comunicarse con los Pods de los DaemonSets


Algunos patrones posibles para la comunicación con los Pods de un DaemonSet son:

Push: Los Pods del DaemonSet se con guran para enviar actualizaciones a otro servicio,
como una base de datos de estadísticas. No tienen clientes.
NodeIP y Known Port: Los Pods del DaemonSet pueden usar un hostPort , de forma que
se les puede alcanzar via las IPs del nodo. Los clientes conocen la lista de IPs del nodo de
algún modo, y conocen el puerto acordado.

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
DNS: Se crea un servicio headless con el mismo selector de pod, y entonces se descubre a
los DaemonSets usando los recursos endpoints o mediante múltiples registros de tipo A
en el DNS.
Service: Se Kubernetes
Documentación crea un servicio
Blog con el mismo
Partners selector de
Comunidad Pod,
Casos deyéxito
se usaVersions
el servicio para llegar al
Español
proceso de uno de los nodos. (No hay forma de determinar el nodo exacto.)

Actualizar un DaemonSet
Si se cambian las etiquetas de nodo, el DaemonSet comenzará de forma inmediata a añadir
Pods a los nuevos nodos que coincidan y a eliminar los Pods de aquellos nuevos nodos donde
no coincidan.

Puedes modi car los Pods que crea un DaemonSet. Sin embargo, no se permite actualizar todos
los campos de los Pods. Además, el controlador del DaemonSet utilizará la plantilla original la
próxima vez que se cree un nodo (incluso con el mismo nombre).

Puedes eliminar un DaemonSet. Si indicas el parámetro --cascade=false al usar kubectl ,


entonces los Pods continuarán ejecutándose en los nodos. Así, puedes crear entonces un nuevo
DaemonSet con una plantilla diferente. El nuevo DaemonSet con la plantilla diferente
reconocerá a todos los Pods existentes que tengan etiquetas coincidentes y no modi cará o
eliminará ningún Pod aunque la plantilla no coincida con los Pods desplegados. Entonces,
deberás forzar la creación del nuevo Pod eliminando el Pod mismo o el nodo.

A partir de las versión 1.6 de Kubernetes, puedes llevar a cabo una actualización continua en un
DaemonSet.

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Alternativas al DaemonSet
Secuencias de comandos de inicialización
Documentación Kubernetes Blog Partners Comunidad Casos de éxito Versions Español
Aunque es perfectamente posible ejecutar procesos arrancándolos directamente en un nodo (ej.
usando init , upstartd , o systemd ), existen numerosas ventajas si se realiza via un
DaemonSet:

Capacidad de monitorizar y gestionar los logs de los procesos del mismo modo que para
las aplicaciones.
Mismo lenguaje y herramientas de con guración (ej. plantillas de Pod, kubectl ) tanto para
los procesos como para las aplicaciones.
Los procesos que se ejecutan en contenedores con límitaciones de recursos aumentan el
aislamiento entre dichos procesos y el resto de contenedores de aplicaciones. Sin
embargo, esto también se podría conseguir ejecutando los procesos en un contenedor en
vez de un Pod (ej. arrancarlos directamente via Docker).

Pods individuales
Es posible crear Pods directamente sin indicar el nodo donde ejecutarse. Sin embargo, la ventaja
del DaemonSet es que sustituye los Pods que se eliminan o terminan por cualquier razón, como
en el caso de un fallo del nodo o una intervención disruptiva de mantenimiento del nodo, como
la actualización del kernel. Por esta razón, deberías siempre utilizar un DaemonSet en vez de
crear Pods individuales.

Pods estáticos

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Es posible crear Pods a partir de archivos en el directorio donde está escuchando el proceso
Kubelet. Este tipo de Pods se denomina pods estáticos. A diferencia del DaemonSet, los Pods
estáticos no se pueden gestionar con kubectl o cualquier otro cliente de la API de Kubernetes.
Los Pods estáticos
Documentación no dependen
Kubernetes Blog del apiserver,
Partners lo cual losCasos
Comunidad hacede
convenientes para el arranque
éxito Versions Español
inicial del clúster. Además, puede que los Pods estáticos se deprecien en el futuro.

Deployments
Los DaemonSets son similares a los Deployments en el sentido que ambos crean Pods, y que
dichos Pods tienen procesos que no se espera que terminen (ej. servidores web, servidores de
almacenamiento).

Utiliza un Deployment para de nir servicios sin estado, como las interfaces de usuario, donde el
escalado vertical y horizontal del número de réplicas y las actualizaciones continuas son mucho
más importantes que el control exacto del servidor donde se ejecuta el Pod. Utiliza un
DaemonSet cuando es importante que una copia de un Pod siempre se ejecute en cada uno de
los nodos, y cuando se necesite que arranque antes que el resto de Pods.

Comentarios
¿Esta página le ha sido de ayuda?

Sí No

Última modi cación May 30, 2020 at 3:30 PM PST: add es pages (6a9c673a9)

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
Home Blog Partners Comunidad Casos de éxito

Documentación Kubernetes Blog Partners Comunidad


bajo CC BY 4.0 Casos de éxito Versions
   © 2021 Los autores de Kubernetes | Documentación distribuida  Español
 
Copyright © 2021 The Linux Foundation ®. Todos los derechos reservados. The Linux Foundation tiene marcas registradas y utiliza
 marcas registradas. Para obtener una lista de marcas registradas por The Linux Foundation, visita Trademark Usage page

ICP license: 京ICP备17074266号-3

Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD

También podría gustarte