Sobes.tech
Назад к вопросам
Junior — Middle
70

Можете объяснить, чем отличается StatefulSet от Deployment в Kubernetes и для каких задач его используют?

Компании, где спрашивали
Solar
Idaproject

Ответ от нейросети

sobes.tech AI

StatefulSet и Deployment — это контроллеры в Kubernetes, которые управляют развертыванием подов, но предназначены для разных сценариев.

  • Deployment используется для приложений без состояния (stateless). Он обеспечивает масштабирование, обновление и откат версий подов, при этом все поды считаются взаимозаменяемыми и не имеют постоянных идентификаторов.

  • StatefulSet предназначен для приложений с состоянием (stateful), где важен стабильный идентификатор пода, постоянное хранилище и порядок запуска/остановки. Например, базы данных, кэш-системы, распределённые системы.

Основные отличия StatefulSet:

  • Каждый под получает уникальный, стабильный сетевой идентификатор (hostname).
  • Поды создаются и удаляются в определённом порядке.
  • Подключение к постоянному хранилищу (PersistentVolume) сохраняется за конкретным подом.

Пример использования StatefulSet — развертывание кластера MongoDB, где каждый узел должен иметь постоянный идентификатор и данные.

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mongo
spec:
  serviceName: "mongo"
  replicas: 3
  selector:
    matchLabels:
      app: mongo
  template:
    metadata:
      labels:
        app: mongo
    spec:
      containers:
      - name: mongo
        image: mongo:4.2
        volumeMounts:
        - name: mongo-persistent-storage
          mountPath: /data/db
  volumeClaimTemplates:
  - metadata:
      name: mongo-persistent-storage
    spec:
      accessModes: ["ReadWriteOnce"]
      resources:
        requests:
          storage: 10Gi

Таким образом, Deployment подходит для масштабируемых безсостоящих приложений, а StatefulSet — для приложений, где важна сохранность состояния и уникальность экземпляров.