Вопрос с собеседования · DevOps

Чем Pod, ReplicaSet и Deployment отличаются друг от друга?

JuniorKubernetes
Ещё спрашивают так:
  • Почему не создают поды напрямую?
  • Зачем в поде несколько контейнеров?
Коротко

Pod — минимальная единица: один или несколько контейнеров с общей сетью (один IP, localhost) и томами; под смертен, его IP меняется. ReplicaSet поддерживает заданное число одинаковых подов. Deployment управляет ReplicaSet-ами и даёт обновления и откаты: при смене образа создаёт новый ReplicaSet и постепенно переносит поды.

  • Поды напрямую не создают — некому будет их пересоздать
  • Несколько контейнеров в поде — sidecar (прокси, сборщик логов) и init-контейнеры
  • Для stateful-сервисов — StatefulSet, для агента на каждом узле — DaemonSet, для разовых задач — Job/CronJob

А ещё Обращаются к подам не по IP, а через Service

Подробно

Связь через метки. ReplicaSet находит «свои» поды по selector. Service тоже выбирает поды по меткам. Метки — основной механизм связи объектов.

Контроллеры рабочих нагрузок:

объектдля чего
Deploymentstateless-сервисы, обновления и откаты
StatefulSetстабильные имена и свои тома (БД, Kafka)
DaemonSetпо поду на каждом узле (агенты логов, мониторинга)
Job / CronJobзадачи до завершения, по расписанию

Многоконтейнерный под. Контейнеры пода делят сетевое пространство и могут делить тома. Init-контейнеры выполняются по порядку до основных (миграции, ожидание зависимостей). Sidecar добавляет функциональность, не меняя приложение.

Пример

apiVersion: apps/v1
kind: Deployment
metadata:
  name: orders
spec:
  replicas: 3
  selector:
    matchLabels: { app: orders }
  template:
    metadata:
      labels: { app: orders }
    spec:
      containers:
        - name: app
          image: registry.example.com/orders:1.4.2
          ports: [{ containerPort: 8080 }]

Что хотят услышать

  • Иерархия Deployment → ReplicaSet → Pod.
  • Почему поды не создают напрямую.
  • Другие контроллеры и многоконтейнерные поды.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✗Pod — группа узлов, ReplicaSet — копия кластера, Deployment — образ контейнера
  • ✗Поды лучше создавать напрямую — Deployment нужен только для сбора статистики
  • ✓Pod — контейнеры с общей сетью, ReplicaSet — копии, Deployment — версии
  • ✗Deployment создаёт поды напрямую без ReplicaSet и поэтому не умеет откатываться к прошлой версии

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования