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
📎 Подробности в статье
🐸Библиотека devops'a
