Что такое pause-контейнер в Kubernetes?

«Что такое pause-контейнер в Kubernetes?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Pause-контейнер (также называемый "инфраструктурным контейнером" или sandbox) — это специальный контейнер, который Kubernetes создает первым для каждого Pod'а. Он служит основой для организации изоляции и совместного использования ресурсов между основными контейнерами внутри Pod.

Его ключевая роль:

  1. Создание общего сетевого пространства имен (network namespace): Pause-контейнер создает сетевой стек (IP-адрес, сетевые интерфейсы, таблицы маршрутизации). Все последующие контейнеры Pod'а (реальные приложения) используют это пространство, разделяя один IP-адрес и портовое пространство (localhost для них общий).
  2. Удержание Linux namespaces: Он удерживает эти пространства имен активными, даже если все основные контейнеры завершились. Это гарантирует, что ресурсы (например, IP-адрес) не будут освобождены преждевременно.
  3. Основа для 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'а на протяжении всего его жизненного цикла.