Documentos de Académico
Documentos de Profesional
Documentos de Cultura
24-Kubernetes Io Es Docs Concepts Workloads Controllers Daemons
24-Kubernetes Io Es Docs Concepts Workloads Controllers Daemons
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
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
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
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD
kubectl apply -f https://k8s.io/examples/controllers/daemonset.yaml
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.
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.
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
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.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.
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).
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
Create PDF in your applications with the Pdfcrowd HTML to PDF API PDFCROWD