Что является минимальной развертываемой единицей в Kubernetes и каковы её ключевые особенности?

Ответ

Pod (Под) — это минимальная и самая простая развертываемая единица в Kubernetes. Важно понимать, что это не контейнер, а абстракция над одним или несколькими контейнерами.

Pod представляет собой группу из одного или нескольких контейнеров, которые всегда развертываются вместе на одном и том же узле (Node) и разделяют общие ресурсы.

Ключевые особенности Пода:

  1. Общее сетевое пространство: Все контейнеры внутри одного пода имеют общий IP-адрес и диапазон портов. Они могут взаимодействовать друг с другом через localhost.
  2. Общее хранилище (Volumes): Контейнеры в поде могут совместно использовать подключенные к поду тома (volumes), что позволяет им обмениваться данными.
  3. Атомарность и общий жизненный цикл: Все контейнеры в поде создаются, запускаются, останавливаются и удаляются вместе. Если главный контейнер пода завершается, весь под перезапускается (в зависимости от политики restartPolicy).
  4. Основа для паттернов: Модель пода позволяет реализовывать такие паттерны, как "sidecar", где вспомогательный контейнер расширяет функциональность основного (например, для сбора логов, метрик или в качестве прокси).

Пример манифеста простого пода:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod # Имя пода
  labels:
    app: nginx
spec:
  containers:
  - name: nginx-container # Имя контейнера внутри пода
    image: nginx:latest    # Образ для запуска
    ports:
    - containerPort: 80  # Порт, который слушает контейнер

Почему подами не управляют напрямую?

Поды считаются "эфемерными" (недолговечными). Они не восстанавливаются сами после сбоя узла. Поэтому в реальной практике подами управляют через контроллеры более высокого уровня, такие как:

  • Deployment: Обеспечивает декларативное обновление подов и их репликацию (самовосстановление).
  • StatefulSet: Для приложений с состоянием, требующих стабильных идентификаторов и хранилища.
  • DaemonSet: Гарантирует, что на каждом узле кластера будет запущен один экземпляр пода.

Ответ 18+ 🔞

Ну, слушай, давай разберём эту хуйню про Pod (Под) в Kubernetes, а то некоторые думают, что это просто контейнер, а там, блядь, целая философия!

Представь себе, что Под — это не контейнер, а такая абстракция над одним или несколькими контейнерами, типа как квартира для соседей-алкашей. Они все в одной хате живут, ресурсы делят и вместе нахуй летят, если что.

Что там у них общего, этих контейнеров в поде:

  1. Сеть одна на всех: У всех один IP-адрес и порты. Могут друг с другом через localhost общаться, как через стенку в общаге кричать: «Сосед, водки не осталось?».
  2. Хранилище общее: Могут тома (volumes) делить, как холодильник в той же общаге. Один положил пиво, другой взял — всё честно, блядь.
  3. Судьба общая: Запустились вместе — вместе и помрёте. Если основной контейнер загнётся, весь под, ёпта, перезапустится (если restartPolicy позволяет, конечно). Атомарность, сука!
  4. Для паттернов годится: Например, "sidecar" — это когда основной контейнер работает, а рядом прицеплен вспомогательный, который логи собирает или метрики тянет. Как личный штурман, блядь, или тот, кто закуску подаёт.

Вот, смотри, как это в манифесте выглядит:

apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod # Имя пода, чтоб не путать с другими
  labels:
    app: nginx
spec:
  containers:
  - name: nginx-container # Имя контейнера внутри
    image: nginx:latest    # Образ, который будем запускать
    ports:
    - containerPort: 80  # Порт, который слушает контейнер

А теперь, блядь, самое важное!

Поды — они как бабочки-однодневки, эфемерные, сука. Упал узел (Node) — и всем подам на нём пиздец. Они сами не воскреснут. Поэтому умные люди ими напрямую не управляют, а используют контроллеры, это как надсмотрщики, ёба:

  • Deployment: Это чтобы декларативно обновлять поды и чтобы они самовосстанавливались, если их кто-то прибил.
  • StatefulSet: Для приложений с состоянием, где нужны стабильные имена и хранилище, чтоб не потерять, что накопили.
  • DaemonSet: Чтоб на каждом узле кластера по одному такому поду торчало, как ёбаный надзиратель.

Вот так вот, а то думаешь, под — это просто контейнер, а там, оказывается, целая ебёная вселенная!