← Назад к вопросам

Что такое Deployment и ReplicaSet?

2.0 Middle🔥 241 комментариев
#Kubernetes

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Что такое Deployment и ReplicaSet?

Deployment и ReplicaSet — это объекты Kubernetes, которые управляют запущенными подами (контейнерами). Они оба используются для масштабирования и обновления приложений, но имеют разные уровни абстракции и возможности.

ReplicaSet — низкоуровневое управление репликами

ReplicaSet — это объект, который гарантирует, что определённое количество подов всегда работает.

Основные возможности:

  • Поддерживает нужное число реплик подов
  • Создаёт новые поды, если старые упали
  • Удаляет лишние поды, если их больше, чем нужно
  • Использует selector для идентификации подов
apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: my-app:1.0
        ports:
        - containerPort: 8080

Deployment — высокоуровневое управление

Deployment — это более высокоуровневый объект, который управляет ReplicaSet и предоставляет декларативные обновления.

Основные возможности:

  • Управляет ReplicaSet автоматически
  • Декларативные обновления (rollout/rollback)
  • История развёртываний
  • Стратегии обновления (RollingUpdate, Recreate)
  • Pausе и resume развёртыванием
  • Автоматическое восстановление при ошибках
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app
        image: my-app:2.0
        ports:
        - containerPort: 8080

Ключевые различия

ХарактеристикаReplicaSetDeployment
Управление репликами✅ (через ReplicaSet)
Обновления✅ (RollingUpdate, Recreate)
Rollback
История версий
Рекомендуется использоватьРедкоДа, по умолчанию
АбстракцияНизкаяВысокая

Как Deployment управляет ReplicaSet

Kubernetes автоматически создаёт и управляет ReplicaSet:

# При создании Deployment
kubectl apply -f deployment.yaml

# Kubernetes создаёт ReplicaSet
kubectl get replicasets
# NAME                    DESIRED   CURRENT   READY
# my-app-7d8c5b8f4d     3         3         3

# И поды
kubectl get pods
# NAME                      READY   STATUS    RESTARTS
# my-app-7d8c5b8f4d-abc12  1/1     Running   0
# my-app-7d8c5b8f4d-def45  1/1     Running   0
# my-app-7d8c5b8f4d-ghi78  1/1     Running   0

Стратегии обновления Deployment

RollingUpdate (по умолчанию) — постепенное обновление:

strategy:
  type: RollingUpdate
  rollingUpdate:
    maxSurge: 1        # макс 1 подов больше, чем replicas
    maxUnavailable: 0  # минимум 0 подов должны быть недоступны

Это обеспечивает zero-downtime развёртывание.

Recreate — удалить старые поды, создать новые:

strategy:
  type: Recreate

Может привести к даунтайму, но используется для stateful приложений.

Откат при ошибке

# Просмотр истории развёртыванием
kubectl rollout history deployment/my-app

# Откат к предыдущей версии
kubectl rollout undo deployment/my-app

# Откат к конкретной версии
kubectl rollout undo deployment/my-app --to-revision=2

Практический совет

Всегда используйте Deployment, а не ReplicaSet напрямую. Deployment предоставляет более мощные инструменты управления и безопасности при обновлении приложений в production.