Sobes.tech
Назад к вопросам
Middle
3

Чем отличается Deployment от StatefulSet в Kubernetes?

Компании, где спрашивали
МТСМТС

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

sobes.tech AI

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

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

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

Пример отличий:

  • Deployment: веб-серверы, API-серверы
  • StatefulSet: базы данных (например, Cassandra, MongoDB), Kafka

Ключевые отличия:

  • Имена подов: Deployment — случайные, StatefulSet — стабильные и предсказуемые
  • Хранение данных: StatefulSet поддерживает PersistentVolume для каждого пода
  • Порядок создания и удаления: StatefulSet гарантирует последовательность
# Пример StatefulSet с постоянным хранилищем
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: example
spec:
  serviceName: "example"
  replicas: 3
  selector:
    matchLabels:
      app: example
  template:
    metadata:
      labels:
        app: example
    spec:
      containers:
      - name: example
        image: example-image
        volumeMounts:
        - name: data
          mountPath: /data
  volumeClaimTemplates:
  - metadata:
      name: data
    spec:
      accessModes: ["ReadWriteOnce"]
      resources:
        requests:
          storage: 1Gi