Ответ
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: {}