В чем разница между Pod и контейнером в Kubernetes?

«В чем разница между Pod и контейнером в Kubernetes?» — вопрос из категории Kubernetes, который задают на 35% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Pod — это минимальная и неделимая единица развертывания в Kubernetes. Контейнер — это изолированный процесс, который выполняется внутри Pod.

Ключевые отличия:

  • Масштаб: Pod может содержать один или несколько контейнеров, которые совместно используют сеть, хранилище и IPC (межпроцессное взаимодействие). Контейнер — это одиночный процесс.
  • Сетевое пространство: Все контейнеры внутри одного Pod разделяют одно сетевое пространство имён (network namespace) и имеют один IP-адрес. Они могут общаться друг с другом через localhost.
  • Хранилище: Контейнеры в Pod могут монтировать одни и те же тома (volumes).
  • Жизненный цикл: Kubernetes управляет жизненным циклом Pod, а не отдельных контейнеров внутри него. Если один из контейнеров в Pod завершается с ошибкой, Kubernetes по политике перезапускает весь Pod.

Типичный use-case: Паттерн "sidecar", где основной контейнер (например, веб-сервер) работает вместе со вспомогательным (например, для синхронизации логов или проксирования трафика).

Пример манифеста Pod с двумя контейнерами:

apiVersion: v1
kind: Pod
metadata:
  name: webapp-with-logger
spec:
  containers:
  - name: web-app
    image: nginx:alpine
    ports:
    - containerPort: 80
  - name: log-tailer
    image: busybox
    command: ['sh', '-c', 'tail -f /var/log/nginx/access.log']
    volumeMounts:
    - name: shared-logs
      mountPath: /var/log/nginx
  volumes:
  - name: shared-logs
    emptyDir: {}