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

Ответ

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: {}

Ответ 18+ 🔞

А, ну слушай, объясняю на пальцах, чтобы даже мартышлюшка поняла. Представь себе, что Pod — это такая маленькая квартирка-студия в огромном доме под названием Kubernetes. А контейнер — это чувак, который в этой квартирке живёт.

В чём разница, ёпта?

  • Кто в квартире: В студии (Pod) может жить один чувак (контейнер), а может и несколько — например, два братана или соседа. Они все делят одну квартиру: один IP-адрес, одну сеть, одно хранилище (холодильник общий, блять). Они могут друг с другом через стенку орать, то есть общаться по localhost.
  • Управление: Администратор дома (Kubernetes) следит за квартирами (Pod'ами), а не за каждым жильцом (контейнером) внутри по отдельности. Если один из соседей в студии сдох (контейнер упал), то администратор, по правилам, вышвыривает нахуй всю квартиру целиком и заселяет новую. Жильцы — неделимая команда, пизда рулю.
  • Зачем это надо: Классический пример — паттерн "sidecar". Смотри: в студии живёт основной работяга, веб-сервер. А рядом с ним на диване валяется его кореш-помощник, который, например, логи собирает или трафик проксирует. Один работает, второй ему в помощь — и они неразлучны, как гомосеки.

Вот тебе пример, как эта хитрая жопа выглядит в коде:

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: {}

Видишь? Одна квартира (Pod), а в ней два жильца: web-app и log-tailer. И холодильник у них общий (shared-logs), чтобы второй мог смотреть, что первый там понаписал. Проще некуда, ебать мои старые костыли.