📝 Kubernetes

Pod: минимальная единица в Kubernetes

P
Автор
Pyland
📅
Опубликовано
30.06.2026
⏱️
Время чтения
2 мин
👁️
Просмотров
90
🌱
Уровень
Начальный
🐦 💼 ✈️

В Docker ты запускаешь контейнер. В Kubernetes минимальная единица — Pod. Это не просто обёртка над контейнером, а принципиально иная абстракция.

Что такое Pod

Pod — это группа из одного или нескольких контейнеров, которые:

  • Запускаются вместе на одном узле
  • Разделяют одну сеть (один IP-адрес, localhost между собой)
  • Разделяют одни volumes (общая файловая система)
  • Имеют общий жизненный цикл — стартуют и умирают вместе

Чаще всего в Pod живёт один контейнер. Несколько контейнеров используют, когда нужен sidecar-паттерн: основное приложение + логгер/прокси/агент.

Аналогия: Pod — это квартира. В ней могут жить несколько жильцов (контейнеров), у них общий почтовый ящик (IP) и общая кладовка (volume). Жильцы свободно общаются через localhost.

Создание Pod императивно

# Запустить Pod с nginx
kubectl run nginx --image=nginx:1.25

# Запустить Pod и сразу попасть внутрь
kubectl run -it busybox --image=busybox --restart=Never -- sh

# Удалить Pod
kubectl delete pod nginx

Создание Pod декларативно (YAML)

# pod.yaml
apiVersion: v1
kind: Pod
metadata:
  name: my-app
  labels:
    app: my-app
    env: production
spec:
  containers:
    - name: app
      image: nginx:1.25
      ports:
        - containerPort: 80
      resources:
        requests:
          memory: "64Mi"
          cpu: "100m"
        limits:
          memory: "128Mi"
          cpu: "200m"
# Применить манифест
kubectl apply -f pod.yaml

# Удалить через манифест
kubectl delete -f pod.yaml

Pod с несколькими контейнерами (sidecar)

apiVersion: v1
kind: Pod
metadata:
  name: app-with-sidecar
spec:
  containers:
    - name: app
      image: my-app:1.0
      ports:
        - containerPort: 8000
    - name: log-shipper
      image: fluentd:v1.16
      volumeMounts:
        - name: logs
          mountPath: /var/log/app
  volumes:
    - name: logs
      emptyDir: {}

Оба контейнера видят один и тот же volume /var/log/app. Приложение пишет логи, fluentd их собирает.

Жизненный цикл Pod

Pending → Running → Succeeded
                  ↘ Failed
                  ↘ Unknown
  • Pending — Pod принят кластером, но ещё не запущен. Scheduler ищет подходящий узел, образ скачивается.
  • Running — Pod размещён на узле, хотя бы один контейнер запущен.
  • Succeeded — все контейнеры завершились успешно (код 0). Типично для Job.
  • Failed — хотя бы один контейнер завершился с ошибкой.
  • Unknown — состояние не удаётся определить (проблемы с узлом).

Статусы контейнеров внутри Pod: Waiting, Running, Terminated.

kubectl команды для работы с подами

# Список всех подов в namespace default
kubectl get pods

# Список с дополнительной информацией (IP, Node)
kubectl get pods -o wide

# Подробная информация о поде (события, состояние)
kubectl describe pod my-app

# Логи контейнера
kubectl logs my-app

# Логи конкретного контейнера в multi-container Pod
kubectl logs my-app -c log-shipper

# Следить за логами в реальном времени
kubectl logs -f my-app

# Выполнить команду внутри контейнера
kubectl exec -it my-app -- bash

# Пробросить порт с пода на localhost
kubectl port-forward pod/my-app 8080:80
# Пример вывода kubectl get pods
NAME       READY   STATUS    RESTARTS   AGE
my-app     1/1     Running   0          5m
busybox    0/1     Completed 0          2m

Почему Pod не используют напрямую в production

Pod — это смертная единица. Если узел упал или Pod завершился с ошибкой, никто его не перезапустит — Pod просто исчезнет навсегда.

В production нужно гарантировать, что нужное количество подов всегда работает. Для этого используют Deployment → он создаёт ReplicaSet → который управляет подами.

Единственный случай, когда Pod создают напрямую — это отладка и разовые задачи (kubectl run для диагностики).

Правило: в production всегда создавай Deployment, никогда не создавай Pod напрямую.

Ваша реакция на статью

💬 Комментарии (0)

🔐 Войдите в систему, чтобы оставить комментарий
🚪 Войти
💭

Комментариев пока нет

Станьте первым, кто поделится мнением об этой статье!

🔗 Похожие

Похожие статьи

Продолжите изучение с этими материалами

📝

AI-агенты: ReAct loop и автономные действия

Чат-бот отвечает на вопросы. Агент — действует: вызывает инструменты, получает реальные данные и использует их...

📅 30.06.2026 👁️ 101
📝

RAG: чат с документами через векторный поиск

RAG (Retrieval-Augmented Generation) — паттерн для работы с собственными документами. Вместо того чтобы переобучать модель,...

📅 30.06.2026 👁️ 94
📝

Health Checks: liveness и readiness в Kubernetes

Контейнер запущен — не значит, что приложение работает. Может быть дедлок, переполнение памяти или медленная...

📅 30.06.2026 👁️ 93

Понравилась статья?

Подпишитесь на наши обновления и получайте новые статьи первыми. Развивайтесь вместе с PyLand!