Ответ
Pod — это базовая единица выполнения, а Deployment — это контроллер более высокого уровня, который управляет жизненным циклом Pod'ов, обеспечивая надежность и гибкость.
Pod
- Что это: Наименьшая и простейшая deployable единица в Kubernetes. Это обертка для одного или нескольких тесно связанных контейнеров, которые разделяют сетевое пространство (один IP) и хранилище (volumes).
- Характеристики:
- Эфемерный (Ephemeral): Не предназначен для долгой жизни. При сбое или перезапуске ноды Pod умирает.
- Нет самовосстановления: Если контейнер внутри Pod падает, Kubelet попытается его перезапустить, но если упадет вся нода — Pod потерян навсегда.
- Нет масштабирования: Вручную созданный Pod существует в единственном экземпляре.
- Пример (
pod.yaml):apiVersion: v1 kind: Pod metadata: name: my-static-pod spec: containers: - name: nginx image: nginx:alpine
Deployment
- Что это: Объект API, который описывает желаемое состояние для группы идентичных Pod'ов. Deployment создает и управляет другим объектом — ReplicaSet, который, в свою очередь, гарантирует наличие заданного количества реплик Pod'ов.
- Ключевые возможности (чего нет у "голого" Pod):
- Репликация и самовосстановление: Поддерживает заданное количество идентичных Pod'ов (
replicas: 3). Если Pod падает или удаляется, Deployment через ReplicaSet немедленно создает новый. - Бесперебойные обновления (Rolling Update): Позволяет обновить версию образа контейнера с минимальным временем простоя, постепенно заменяя старые Pod'ы новыми.
- Откат (Rollback): Возможность мгновенно вернуться к предыдущей стабильной версии Deployment'а.
- Декларативное управление: Вы описываете, что хотите получить (3 реплики Nginx версии 1.25), а Kubernetes сам приводит кластер в это состояние.
- Репликация и самовосстановление: Поддерживает заданное количество идентичных Pod'ов (
- Пример (
deployment.yaml):apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 selector: matchLabels: app: nginx template: # Шаблон для создания Pod'ов metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.25-alpine ports: - containerPort: 80
Практическое правило: В production-кластерах Pod'ы почти никогда не создаются напрямую. Вместо этого используются контроллеры высшего уровня: Deployment для stateless-приложений, StatefulSet для stateful, DaemonSet для агентов на каждой ноде и Job/CronJob для задач.