tgoop.com/devopsslib/3374
Last Update:
🆚 Различия между DaemonSets и Deployments в k8s
Kubernetes предоставляет два способа управления подами: DaemonSets и Deployments. Сейчас разберём основные отличия между ними.
• Deployment: управляет статическими приложениями, обеспечивая масштабирование, обновления и откаты.
• DaemonSet: гарантирует запуск одного пода на каждом узле кластера или их подмножеств).
• Deployment: количество подов определяется через replicas. Поды распределяются по узлам автоматически, но могут группироваться на одних узлах. Для распределения требуется PodAntiAffinity.
• DaemonSet: поды запускаются на каждом узле автоматически. При добавлении/удалении узлов DaemonSet адаптируется.
• Deployment: поддерживает rolling updates (постепенное обновление) и rollback (откат к предыдущей версии).
• DaemonSet: обновления выполняются последовательно для каждого пода, но откаты не поддерживаются нативно.
• DaemonSet может быть избыточным в больших кластерах, если задача не требует присутствия на всех узлах. Например, запуск 15 подов на 50 узлах приведет к неэффективному использованию ресурсов.
• Deployment позволяет гибко масштабировать приложение независимо от количества узлов.
• Deployment: веб-серверы, микросервисы, пакетные задания.
• DaemonSet: логирование, мониторинг, сетевые компоненты.
Deployment — Nginx:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
DaemonSet — Fluentd для сбора логов:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd
spec:
selector:
matchLabels:
name: fluentd
template:
metadata:
labels:
name: fluentd
spec:
containers:
- name: fluentd
image: fluentd:latest
volumeMounts:
- name: varlog
mountPath: /var/log
volumes:
- name: varlog
hostPath:
path: /var/log