Ответ
Непосредственно Pod'ы создаются не только ресурсом Pod, но и, что более важно, контроллерами (workload resources), которые управляют их жизненным циклом. Вот основные ресурсы:
-
Pod: Базовый ресурс для создания одного пода. Используется редко напрямую в production, так как не обеспечивает самовосстановления.
apiVersion: v1 kind: Pod metadata: name: static-web-pod spec: containers: - name: nginx image: nginx:alpine -
Deployment: Основной ресурс для stateless-приложений. Управляет ReplicaSet'ом, который, в свою очередь, обеспечивает нужное количество идентичных подов. Предоставляет rolling updates, rollback и масштабирование.
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.19 -
StatefulSet: Для stateful-приложений (базы данных, очереди). Гарантирует устойчивые идентификаторы подов (
pod-0,pod-1), стабильные сетевые имена и постоянное хранилище (PersistentVolume) для каждого пода. -
DaemonSet: Гарантирует, что Pod будет работать на каждой Node (или на подмножестве по селектору). Идеален для системных демонов (логирование Fluentd, мониторинг Node Exporter).
-
Job / CronJob: Создают Pod'ы для выполнения разовых задач (Job) или задач по расписанию (CronJob). Pod завершает работу после успешного выполнения задачи.
Вывод: В production Pod'ы почти всегда создаются контроллерами (Deployment, StatefulSet и т.д.), которые добавляют к базовому функционалу Pod'а критически важные возможности: отказоустойчивость, масштабирование и управляемые обновления.