Ответ
Pause-контейнер (также называемый "инфраструктурным контейнером" или sandbox) — это специальный контейнер, который Kubernetes создает первым для каждого Pod'а. Он служит основой для организации изоляции и совместного использования ресурсов между основными контейнерами внутри Pod.
Его ключевая роль:
- Создание общего сетевого пространства имен (network namespace): Pause-контейнер создает сетевой стек (IP-адрес, сетевые интерфейсы, таблицы маршрутизации). Все последующие контейнеры Pod'а (реальные приложения) используют это пространство, разделяя один IP-адрес и портовое пространство (localhost для них общий).
- Удержание Linux namespaces: Он удерживает эти пространства имен активными, даже если все основные контейнеры завершились. Это гарантирует, что ресурсы (например, IP-адрес) не будут освобождены преждевременно.
- Основа для PID namespace (при использовании
shareProcessNamespace: true): Позволяет контейнерам внутри Pod'а видеть процессы друг друга.
Как это выглядит на практике:
# Посмотрим контейнеры внутри Pod'а на ноде
$ docker ps --filter "label=io.kubernetes.pod.name=my-app-pod"
CONTAINER ID IMAGE COMMAND STATUS
a1b2c3d4e5f6 my-app:latest "/docker-entrypoint.…" Up 5 minutes # Основной контейнер приложения
f6e5d4c3b2a1 registry.k8s.io/pause:3.9 "/pause" Up 5 minutes # Pause-контейнер (скрыт от kubectl)
Технические детали для DevOps:
- Образ: Используется минимальный образ (например,
registry.k8s.io/pause:3.9), который практически не потребляет ресурсы (~300KB RAM). - В
kubectl: Pause-контейнер не отображается в выводеkubectl get pods. СчетчикREADY(2/2) показывает только количество пользовательских контейнеров. - Важность: Без pause-контейнера невозможно было бы реализовать модель сети "контейнеры в Pod'е делят сетевой стек", которая является фундаментальной для Kubernetes. Он обеспечивает стабильность сетевой идентификации Pod'а на протяжении всего его жизненного цикла.