ReplicaSet в Kubernetes: как создаётся и как работает
Что такое ReplicaSet
ReplicaSet — контроллер Kubernetes. Он следит за тем, чтобы в любой момент было запущено нужное количество копий Pod. ReplicaSet использует селекторы по меткам, чтобы определять, какие Pod считать своими репликами.
Ключевая идея: если в кластере окажется меньше Pod, чем указано в spec.replicas, ReplicaSet создаст недостающие. Если Pod больше — он удалит лишние, чтобы число совпадало с конфигурацией.
Важно: в большинстве сценариев управления обновлениями и версионированием рекомендуется использовать Deployment вместо прямого управления ReplicaSet.
Шаблон ReplicaSet
Ниже — пример корректного описания ReplicaSet. Обратите внимание на регистр полей YAML: metadata и spec пишутся со строчной буквы.
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: some-name
labels:
app: some-App
tier: some-Tier
spec:
replicas: 3
selector:
matchLabels:
tier: some-Tier
matchExpressions:
- {key: tier, operator: In, values: [some-Tier]}
template:
metadata:
labels:
app: some-App
tier: someTier
spec:
containers:
- name: nginx
image: nginxЧто мы сделаем в этом руководстве
- Создадим ReplicaSet
- Посмотрим, как ReplicaSet сопоставляет Pod по меткам
- Проверим поведение при ручном создании Pod с совпадающими и неперекрывающимися метками

Создание ReplicaSet: практический пример
Создайте файл my-replica-set.yml и вставьте туда следующее описание:
apiVersion: apps/v1
kind: ReplicaSet
metadata:
name: nginx-proxy
labels:
app: nginx-proxy
tier: frontend
spec:
# modify replicas according to your case
replicas: 3
selector:
matchLabels:
tier: frontend
template:
metadata:
labels:
tier: frontend
spec:
containers:
- name: nginx
image: nginx
Команды для проверки и создания:
kubectl get replicaset
kubectl create -f my-replica-set.yml
kubectl get replicaset
kubectl get pods
В результате вы получите три Pod, управляемых ReplicaSet.
Что произойдёт, если создать Pod с теми же метками вручную
Создайте файл my-test-pod.yml:
apiVersion: v1
kind: Pod
metadata:
name: pod1
labels:
tier: frontend
spec:
containers:
- name: nginx
image: nginx
Если вы попытаетесь создать такой Pod, то заметите, что он окажется в состоянии Terminating или будет удалён контроллером. Причина в том, что ReplicaSet поддерживает строгое число реплик: при ручном создании ещё одной подлинной реплики общее число превысит spec.replicas, и контроллер удалит лишнюю копию, чтобы вернуть точное значение.
kubectl get pods
kubectl create -f my-test-pod.yml
kubectl get pods
Подробности о ReplicaSet:
kubectl get replicaset
kubectl describe replicaset nginx-proxy
Создание Pod без меток
Если создать Pod без меток, ReplicaSet его не тронет. Пример my-test-pod-no-label.yml:
apiVersion: v1
kind: Pod
metadata:
name: pod1
spec:
containers:
- name: nginx
image: nginx
Команды и результат:
kubectl get pods
kubectl create -f my-test-pod-no-label.yml
kubectl get pods
Объяснение: селектор ReplicaSet ищет Pod по меткам. Если у Pod нет меток, совпадения не происходит, и ReplicaSet не считает этот Pod своей репликой.
Удаление Pod, управляемого ReplicaSet
Если удалить один из Pod, которыми управляет ReplicaSet, контроллер автоматически создаст новый, чтобы снова получить нужное количество.
kubectl get pods
kubectl delete pod nginx-proxy-6gc46
kubectl get pods
Удаление ReplicaSet и ручных Pod
Чтобы удалить ReplicaSet и все Pod, которые он создаёт, выполните:
kubectl get replicaset
kubectl delete replicaset nginx-proxy
kubectl get replicaset
kubectl get pods
Ручные Pod, не принадлежащие ReplicaSet, нужно удалять отдельно:
kubectl get pods
kubectl delete pod pod1
kubectl get pods
Когда ReplicaSet не подходит
- Если вам нужны управляемые обновления и откаты — используйте Deployment.
- Если вам нужно горизонтальное масштабирование с правилом автошкалирования — чаще используют HorizontalPodAutoscaler вместе с Deployment.
- Для одиночных, нестабильных или состояния-специфичных приложений лучше использовать StatefulSet.
Альтернативные подходы
- Deployment: создаёт ReplicaSet и управляет им; предоставляет стратегии обновления и отката. Рекомендуется для большинства рабочих нагрузок.
- StatefulSet: для приложений с сохранением состояния и стабильными идентификаторами Pod.
- DaemonSet: чтобы запускать Pod на каждом узле.
Правила и эвристики
- Всегда контролируйте селекторы: убедитесь, что они точные и не пересекаются с метками других Pod.
- Предпочитайте Deployment для управления жизненным циклом приложения.
- Если нужны простые тесты или учебные сценарии, ReplicaSet уместен.
Чек-листы по ролям
Оператор:
- Проверить apiVersion и корректность полей metadata/spec
- Убедиться, что selector совпадает с метками в template
- Проверить созданные Pod через kubectl get pods
Разработчик:
- Убедиться, что приложение корректно стартует с указанным образом
- Не назначать лишние метки, которые могут совпасть с продовыми селекторами
Критерии приёмки
- ReplicaSet создан без ошибок
- Число Pod соответствует spec.replicas
- При удалении Pod ReplicaSet создаёт новый
- Ручные Pod с совпадающими метками удаляются, Pod без меток остаются
Краткая методология миграции с ReplicationController на ReplicaSet/Deployment
- Создайте манифест Deployment, соответствующий текущему RC.
- Примените Deployment с правильным селектором и шаблоном Pod.
- Подтвердите, что новые Pod работают корректно.
- Удалите старый ReplicationController, если он больше не нужен.
Глоссарий
- Pod — минимальная развертываемая единица в Kubernetes, контейнеры в одном Pod делят сеть и тома.
- ReplicaSet — контроллер, обеспечивающий заданное число копий Pod.
- Selector — правило на основе меток для поиска соответствующих Pod.
Резюме
ReplicaSet — простой и надёжный способ обеспечить заданное число копий Pod. Для большинства рабочих сценариев рекомендуется использовать Deployment, который создаёт и управляет ReplicaSet и добавляет возможности безопасного развёртывания и отката.
Если нужна быстрая шпаргалка команд, вот они:
- kubectl create -f
- kubectl get replicaset
- kubectl describe replicaset
- kubectl get pods
- kubectl delete replicaset
- kubectl delete pod
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента