Ответ
Pod в Kubernetes — это минимальная deployable unit, которая может содержать один или несколько контейнеров, разделяющих сетевое пространство и, опционально, тома. Основные типы:
-
Основные контейнеры (Main Application Containers): Контейнеры, описанные в
spec.containers[]. Они выполняют основную бизнес-логику пода (например, веб-сервер Nginx, backend-приложение на Go). Пода существует, пока работает хотя бы один из этих контейнеров. -
Init-контейнеры (Init Containers): Описываются в
spec.initContainers[]. Они запускаются строго последовательно и только один раз перед стартом основных контейнеров. Их задача — выполнить подготовительные работы: дождаться готовности зависимого сервиса, настроить разрешения, скачать конфигурацию или данные.spec: initContainers: - name: wait-for-db image: busybox:1.28 command: ['sh', '-c', 'until nc -z database 5432; do echo waiting for database...; sleep 2; done;'] containers: - name: app image: myapp:latest -
Sidecar-контейнеры (Sidecar Containers): Это тоже основные контейнеры (
spec.containers[]), но с вспомогательной функцией. Они работают параллельно с главным контейнером, расширяя или дополняя его. Классические примеры:- Агент логирования: Контейнер, который забирает логи главного приложения из общего volume и отправляет их в централизованную систему (Fluentd, Filebeat).
- Прокси или адаптер сети: Например, контейнер с Envoy или Linkerd-proxy в service mesh.
- Синхронизатор конфигураций: Контейнер, который следит за ConfigMap/Secret и обновляет файлы конфигурации в общем volume для основного приложения.
-
Ephemeral Containers (Временные контейнеры): Специальный тип контейнеров, который можно добавить в уже работающий Pod только для целей отладки (например, через
kubectl debug). Они не являются частью оригинальной спецификации пода, не могут иметь гарантий ресурсов (resources) или постоянных томов (persistent volumes).