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

Что такое ReplicaSet в Kubernetes?

1.7 Middle🔥 171 комментариев
#Docker, Kubernetes и DevOps

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

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

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

ReplicaSet в Kubernetes

Что это такое

ReplicaSet — это объект в Kubernetes, который гарантирует запуск определённого количества идентичных Pods в кластере. Если Pod упадёт или удалится, ReplicaSet автоматически создаст новый для поддержания нужного количества реплик.

Это основной механизм обеспечения высокой доступности и масштабируемости приложений в Kubernetes.

Отличие от Deployment

Хотя ReplicaSet часто встречается в документации, на практике используют Deployment, который управляет ReplicaSet'ами:

Deployment
    ↓ (управляет)
ReplicaSet (v1)
    ↓ (управляет)
Pods (3 реплики)

Deployment
    ↓ (управляет)
ReplicaSet (v2) - новая версия
    ↓ (управляет)
Pods (новые реплики)

При обновлении образа Deployment создаёт новый ReplicaSet и постепенно переводит трафик.

Структура ReplicaSet

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: java-app-rs
  namespace: default
spec:
  replicas: 3
  selector:
    matchLabels:
      app: java-app
  template:
    metadata:
      labels:
        app: java-app
    spec:
      containers:
      - name: java-app
        image: myregistry.azurecr.io/java-app:1.0
        ports:
        - containerPort: 8080

Как это работает

Шаг 1: Создание

Kubernetes создаёт ровно столько Pods, сколько указано в replicas:

kubectl apply -f replicaset.yaml
# ReplicaSet создаёт 3 Pods

Шаг 2: Мониторинг

kubectl get replicasets
# NAME          DESIRED  CURRENT  READY  AGE
# java-app-rs  3        3        3      2m

Шаг 3: Self-Healing

Когда Pod упадёт, ReplicaSet автоматически создаёт новый:

kubectl delete pod java-app-rs-abc12
# ReplicaSet видит: 2 pod'а вместо 3
# Создаёт новый pod
kubectl get pods
# Видим новый pod

Масштабирование

# Увеличить количество реплик
kubectl scale replicaset java-app-rs --replicas=5

# Или редактировать YAML
kubectl edit rs java-app-rs

Selector и Label Matching

ReplicaSet использует selector для определения какие Pods ему принадлежат:

kind: ReplicaSet
spec:
  replicas: 2
  selector:
    matchLabels:
      environment: production
      version: v1
  template:
    metadata:
      labels:
        environment: production
        version: v1

Пример с Java приложением

apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: spring-boot-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: spring-boot
  template:
    metadata:
      labels:
        app: spring-boot
    spec:
      containers:
      - name: spring-boot
        image: myapp:spring-boot-2.0
        ports:
        - containerPort: 8080
        env:
        - name: SPRING_PROFILES_ACTIVE
          value: prod
        livenessProbe:
          httpGet:
            path: /actuator/health
            port: 8080
          initialDelaySeconds: 30
          periodSeconds: 10

Обновление образа

Важно: ReplicaSet не поддерживает rolling update! Для обновления используй Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp-deploy
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  template:
    spec:
      containers:
      - name: app
        image: myapp:v2

Deployment создаст новый ReplicaSet и постепенно переведёт трафик.

Практические команды

# Создать
kubectl apply -f replicaset.yaml

# Просмотреть
kubectl get rs
kubectl describe rs java-app-rs

# Масштабировать
kubectl scale rs java-app-rs --replicas=5

# Редактировать
kubectl edit rs java-app-rs

# Удалить
kubectl delete rs java-app-rs
kubectl delete rs java-app-rs --cascade=orphan  # Без удаления Pods

Сравнение контроллеров

КонтроллерНазначениеRolling Update
PodОтдельный контейнерНет
ReplicaSetРепликация PodsНет
DeploymentУправление версиямиДа
StatefulSetStateful приложенияДа
DaemonSetОдин Pod на каждом NodeНет

Когда использовать ReplicaSet

  • Прямое использование: Редко, используй Deployment
  • Под капотом Deployment: Всегда, Deployment создаёт ReplicaSet'ы
  • Специальные сценарии: Custom rolling update логика

Заключение

ReplicaSet — это фундаментальный Kubernetes объект, который обеспечивает высокую доступность через репликацию Pods. На практике используешь Deployment, который управляет ReplicaSet'ами и добавляет функции rolling update и версионирования. Понимание ReplicaSet помогает разобраться как Kubernetes поддерживает нужное количество работающих приложений и автоматически восстанавливается при сбоях.

Что такое ReplicaSet в Kubernetes? | PrepBro