Ответ
DaemonSet и ReplicaSet (управляемый через Deployment) решают разные задачи оркестрации подов в кластере Kubernetes.
- DaemonSet гарантирует, что один под этого набора будет запущен на каждом узле (Node) кластера (или на узлах, соответствующих селектору узлов). При добавлении нового узла DaemonSet автоматически развертывает на нем свой под. Основное применение — запуск системных сервисов уровня узла.
- ReplicaSet/Deployment поддерживает заданное количество идентичных подов (
replicas: N), распределенных по узлам кластера произвольным образом (с учетом ограничений ресурсов и политик). Количество подов фиксировано и не привязано к количеству узлов.
| Сравнительная таблица: | Критерий | DaemonSet | ReplicaSet/Deployment |
|---|---|---|---|
| Цель | Сервис на каждом узле (логи, мониторинг, сетевой прокси). | Масштабируемое приложение (веб-сервер, API, воркер). | |
| Связь с узлами | Жесткая: по одному поду на узел. | Слабая: поды планируются на любые доступные узлы. | |
| Масштабирование | Автоматически с кластером (добавили узел — появился под). | Вручную или автоскейлером через изменение replicas. |
Примеры манифестов:
1. DaemonSet для агента сбора логов (Fluentd):
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd-logging
spec:
selector:
matchLabels:
name: fluentd
template:
metadata:
labels:
name: fluentd
spec:
# Tolerations позволяют запускаться на master-узлах
tolerations:
- key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
containers:
- name: fluentd
image: fluentd:v1.14
volumeMounts:
- name: varlog
mountPath: /var/log
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
volumes:
- name: varlog
hostPath:
path: /var/log
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
2. Deployment для веб-приложения (3 реплики):
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-frontend
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:1.21
ports:
- containerPort: 80
В инфраструктуре DevOps DaemonSet — это инструмент для управления инфраструктурными компонентами, а Deployment — для бизнес-приложений.