Pod (в Kubernetes)

⌘K

Pod (в Kubernetes)

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

localhost
и могут совместно использовать данные через общие тома.

Pod создаётся и управляется как единое целое: если один из контейнеров выходит из строя, Kubernetes может перезапустить весь под. Именно поэтому в один под помещают тесно связанные процессы, например — основной сервис и вспомогательный sidecar-контейнер (логирование, прокси, мониторинг и т.п.).

Каждому поду назначается уникальный IP-адрес внутри кластера, и он становится доступен другим подам по внутренней сети. Команды

kubectl describe pod
,
kubectl logs
,
kubectl exec
позволяют получить детальную информацию о состоянии пода, посмотреть логи или войти внутрь контейнера.

В отличие от контейнера, который — это просто исполняемая среда, pod — это обёртка, которая определяет, как контейнер будет работать в рамках кластера: где хранить данные, как взаимодействовать с другими сервисами, какие порты открыты, и какие ресурсы нужны.

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

Pod vs Container:
Container — это единица запуска (например, процесс в Docker),
Pod — это единица управления и развертывания в Kubernetes, которая может включать несколько контейнеров.

Понимание архитектуры подов — ключевой шаг к работе с Kubernetes, особенно при построении микросервисов, CI/CD пайплайнов и масштабируемых облачных решений.


Пример YAML-файла для Pod

apiVersion: v1 kind: Pod metadata: name: example-pod labels: app: demo spec: containers: - name: nginx-container image: nginx:1.25 ports: - containerPort: 80 resources: limits: memory: "128Mi" cpu: "500m"

Что делает этот Pod:

  • Разворачивает контейнер с образом
    nginx:1.25
    .
  • Открывает порт 80 внутри контейнера.
  • Ограничивает использование ресурсов: до 128 МБ оперативной памяти и 0.5 CPU.
  • Присваивает имя
    example-pod
    и метку
    app: demo
    .

Пример Pod с двумя контейнерами

apiVersion: v1 kind: Pod metadata: name: multi-container-pod labels: app: demo-multi spec: containers: - name: app-container image: nginx:1.25 ports: - containerPort: 80 volumeMounts: - name: shared-logs mountPath: /var/log/nginx - name: log-sidecar image: busybox command: ["sh", "-c", "tail -f /var/log/nginx/access.log"] volumeMounts: - name: shared-logs mountPath: /var/log/nginx volumes: - name: shared-logs emptyDir: {}

Что здесь происходит:

  • Первый контейнер (
    app-container
    )
    запускает NGINX — это основной сервис.
  • Второй контейнер (
    log-sidecar
    )
    запускает
    busybox
    , который просто читает логи NGINX в режиме
    tail -f
    .
  • Оба контейнера используют общий том
    shared-logs
    , созданный через
    emptyDir
    . Это временное хранилище, доступное им одновременно.
  • Контейнеры работают как единый процесс: Kubernetes управляет ими как одним целым.

VPS с перспективой

Планируете VPS на год? С кодом NEWCOM получаете больше, чем рассчитывали.

Месяц в подарок
COPIED
NEWCOM COPIED