Ответ
Replication Controller (RC) — это устаревший объект API Kubernetes, который я встречал только в legacy-системах. Его основная функция — поддерживать заданное количество идентичных реплик подов в рабочем состоянии.
Как он работал:
apiVersion: v1
kind: ReplicationController
metadata:
name: web-rc
spec:
replicas: 3 # Желаемое количество подов
selector:
app: web-server # Селектор для поиска управляемых подов
template: # Шаблон для создания новых подов
metadata:
labels:
app: web-server
spec:
containers:
- name: nginx
image: nginx:1.18
ports:
- containerPort: 80
Почему от него отказались в пользу Deployment:
-
Нет стратегических обновлений: RC не поддерживает rolling updates. Чтобы обновить образ, нужно было либо:
- Удалить RC и создать новый (даунтайм)
- Вручную менять поды по одному
-
Жесткая привязка к селекторам: Если нужно было изменить селектор, приходилось создавать новый RC и мигрировать поды.
-
Отсутствие истории ревизий: Не было возможности откатиться к предыдущей версии, как в Deployment с
kubectl rollout undo.
Современная альтернатива — Deployment:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
spec:
replicas: 3
selector:
matchLabels:
app: web-server
strategy:
type: RollingUpdate # Стратегия бесшовного обновления
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
template:
# ... такой же template как в RC
Где можно встретить RC сегодня: В очень старых кластерах (Kubernetes 1.2 и ранее), в учебных материалах или в системах, которые не обновлялись годами. Во всех production-средах я использую только Deployments, StatefulSets или DaemonSets.