В чем разница Deployment и DaemonSet ?

Спросят с вероятностью 26%



Deployment и DaemonSet являются двумя типами контроллеров, которые управляют развертыванием и обеспечением жизненного цикла подов (групп контейнеров). Они оба играют важные роли, но используются для разных целей и сценариев.



Deployment



Это контроллер, который обеспечивает декларативное обновление подов и ReplicaSets (другой тип контроллера, который управляет одновременным запуском нескольких экземпляров одного и того же пода). Deployment поддерживает непрерывное развертывание, откат к предыдущим версиям, а также масштабирование подов.



Особенности:



Масштабирование: Вы можете увеличивать или уменьшать количество подов в зависимости от нужд.

Обновления: Поддерживает стратегии развертывания, такие как Rolling Update (постепенное обновление), которое помогает минимизировать простои при обновлении приложения.

Самовосстановление: Автоматически перезапускает поды, которые перестали работать, находятся в ошибочном состоянии или не отвечают.



Пример:

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:1.14.2

ports:

- containerPort: 80



DaemonSet



Это контроллер, который гарантирует, что на каждом узле кластера Kubernetes запущен экземпляр заданного пода. Когда добавляется новый узел, на нем автоматически запускается под, управляемый DaemonSet, и если узел удаляется, поды удаляются автоматически. Это идеально подходит для запуска служб мониторинга, сбора логов или других утилит, которые должны быть запущены на каждом узле.



Особенности:



Гарантия запуска: Убедитесь, что каждый узел кластера запускает копию определённого пода.

Автоматическое размещение: Когда добавляются новые узлы, на них автоматически размещаются необходимые поды.

Службы уровня узла: Идеально подходит для запуска системных служб, таких как коллекторы логов, системы мониторинга и другие.



Пример DaemonSet в YAML-формате:

apiVersion: apps/v1

kind: DaemonSet

metadata:

name: fluentd-elasticsearch

spec:

selector:

matchLabels:

name: fluentd-elasticsearch

template:

metadata:

labels:

name: fluentd-elasticsearch

spec:

containers:

- name: fluentd-elasticsearch

image: fluent/fluentd:v1.0

volumeMounts:

- name: varlog

mountPath: /var/log

- name: varlibdockercontainers

mountPath: /var/lib/docker/containers

readOnly: true




Deployment и DaemonSet выполняют различные функции в Kubernetes. Deployment лучше всего подходит для управления подами, которые представляют приложения, требующие масштабирования и обновлений. DaemonSet идеален для обеспечения работы сервисов на каждом узле кластера. Оба эти инструмента дополняют друг друга и используются в разных сценариях для эффективного управления и оркестрации контейнеров.



👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1119 вопросов на DevOps. Ставь 👍 если нравится контент



🔐 База собесов | 🔐 База тестовых