Ответ
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), чтобы второй мог смотреть, что первый там понаписал. Проще некуда, ебать мои старые костыли.