Развертывания и ReplicationControllers предназначены для использования без сохранения состояния и довольно легкие. StatefulSets используются, когда необходимо сохранить состояние. Поэтому последние используют volumeClaimTemplates
/ заявляют о постоянных томах, чтобы гарантировать, что они могут сохранять состояние при перезапусках компонентов.
Поэтому, если ваше приложение сохраняет состояние или вы хотите развернуть хранилище с отслеживанием состояния поверх Kubernetes, используйте StatefulSet.
Если ваше приложение не имеет состояния или если состояние может быть создано из серверных систем во время запуска, используйте Deployments.
Дополнительные сведения о работе с учетом состояния приложения можно найти в блоге 2016 года kubernetes' о сохраняющем состоянии приложений
deployment
конфигурацию с простой спецификацией для установки 1 на узел (демонсет), реплик или упорядочивания с отслеживанием состояния.Развертывание - вы указываете PersistentVolumeClaim который является общим для всех реплик модуля. Другими словами, общий объем.
Резервное хранилище, очевидно, должно иметь режим доступа ReadWriteMany или ReadOnlyMany, если у вас более одного модуля реплик.
StatefulSet - вы указываете volumeClaimTemplates, чтобы каждый модуль реплики получил уникальный PersistentVolumeClaim. связанный с ним. Другими словами, нет общего тома.
Здесь резервное хранилище может иметь режим доступа ReadWriteOnce .
StatefulSet полезен для работы в кластере, например, кластер Hadoop, кластер MySQL, где каждый узел имеет собственное хранилище.
источник
TL; DR
Развертывание - это ресурс для развертывания приложения без сохранения состояния, при использовании PVC все реплики будут использовать один и тот же том, и ни одна из них не будет иметь собственного состояния.
Наборы состояний используются для приложений с отслеживанием состояния, каждая реплика модуля будет иметь собственное состояние и будет использовать свой собственный том.
DaemonSet - это контроллер, который обеспечивает работу модуля на всех узлах кластера. Если узел добавляется / удаляется из кластера, DaemonSet автоматически добавляет / удаляет модуль.
Я написал о подробных различиях между развертываниями, StatefulSets и Daemonset, а также о том, как развернуть образец приложения с использованием этих ресурсов K8s: Deployments vs StatefulSets vs DaemonSets .
источник
StatefulSet
Используйте StatefulSet с распределенными приложениями с отслеживанием состояния, которые требуют, чтобы каждый узел имел постоянное состояние . StatefulSet предоставляет возможность настроить произвольное количество узлов для приложения / компонента с отслеживанием состояния с помощью конфигурации (реплик = N).
Существует два типа распределенных приложений с отслеживанием состояния: Master-Master и Master-Slave. Все узлы в конфигурации Master-Master и узлы Slave в конфигурации Master-Slave могут использовать StatefulSet.
Примеры:
Master-Slave -> Datanodes (slave) в кластере Hadoop
Master-Master -> Узлы базы данных (master-master) в кластере Cassandra
Каждый модуль (реплика / узел) в StatefulSet имеет уникальный и стабильный сетевой идентификатор. Например, в Cassandra StatefulSet с именем 'cassandra' и количеством узлов реплик как N каждый модуль (узел) Cassandra имеет:
Обратитесь: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/
Развертывание
«Развертывание», с другой стороны, подходит для приложений / служб без сохранения состояния, когда узлы не требуют какой-либо специальной идентификации. Балансировщик нагрузки может подключиться к любому узлу по своему выбору. Все узлы равны. Развертывание полезно для создания любого количества произвольных узлов с помощью конфигурации (реплик = N).
источник
Разница между StatefulSet и развертыванием
StatefulSet эквивалентен специальному развертыванию. Каждый модуль в StatefulSet имеет стабильный уникальный сетевой идентификатор, который можно использовать для обнаружения других участников кластера. Если имя StatefulSet - Kafka, то первый модуль называется Kafka-0, второй - Kafka-1 и так далее; контролируется последовательность запуска и остановки копии модуля, контролируемая StatefulSet. Когда n-й модуль работает, первые модули N-1 уже работают и готовы к работе. Хорошее состояние; модуль в StatefulSet использует стабильный постоянный объем хранения, реализованный с помощью PV или PVC. При удалении модуля объем хранилища, связанный с StatefulSet, по умолчанию не удаляется (для безопасности данных); StatefulSet должен быть привязан к объему PV. Используется для хранения данных о состоянии модуля, а также используется вместе с автономными службами, объявленными принадлежащими этой автономной службе;
источник