Ответ
Pod — это наименьшая и простейшая единица развертывания в Kubernetes. Это абстракция над одним или несколькими контейнерами, которые всегда размещаются вместе на одном узле и разделяют общие ресурсы.
Ключевые характеристики Pod, которые я учитываю в работе:
- Общее сетевое пространство: Все контейнеры внутри Pod имеют один IP-адрес и могут общаться друг с другом через
localhost. Они также совместно используют пространство портов, поэтому контейнеры не могут использовать один и тот же порт. - Общее хранилище: Pod может определять набор томов (volumes), которые доступны для всех контейнеров внутри него. Это позволяет контейнерам обмениваться данными.
- Единый жизненный цикл: Pod создается, запускается и удаляется как единое целое. Контейнеры внутри Pod запускаются параллельно, а не последовательно.
Типичные сценарии использования Pod'ов:
- Один контейнер: Наиболее распространенный шаблон, где Pod является оберткой вокруг одного контейнера приложения.
- Вспомогательные контейнеры (sidecar): Например, основной контейнер веб-сервера и sidecar-контейнер, который синхронизирует файлы из внешнего хранилища.
Пример манифеста Pod с двумя контейнерами (основным и sidecar):
apiVersion: v1
kind: Pod
metadata:
name: web-app-with-log-shipper
spec:
volumes:
- name: shared-logs
emptyDir: {}
containers:
- name: web-app
image: myapp:latest
volumeMounts:
- name: shared-logs
mountPath: /var/log/myapp
- name: log-shipper
image: fluentd:latest
volumeMounts:
- name: shared-logs
mountPath: /var/log/myapp
Важно: В реальной практике Pod'ы редко создаются напрямую. Вместо этого я использую контроллеры более высокого уровня, такие как Deployment или StatefulSet, которые управляют созданием, репликацией и состоянием Pod'ов, обеспечивая отказоустойчивость и масштабируемость приложения.