Что ты знаешь про Replication Controller?

«Что ты знаешь про Replication Controller?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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:

  1. Нет стратегических обновлений: RC не поддерживает rolling updates. Чтобы обновить образ, нужно было либо:

    • Удалить RC и создать новый (даунтайм)
    • Вручную менять поды по одному
  2. Жесткая привязка к селекторам: Если нужно было изменить селектор, приходилось создавать новый RC и мигрировать поды.

  3. Отсутствие истории ревизий: Не было возможности откатиться к предыдущей версии, как в 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.