Ответ
Kubernetes использует декларативные объекты для управления контейнеризированными приложениями. Основные из них — это рабочие нагрузки (workloads), которые определяют, как и где запускать контейнеры.
Ключевые объекты для запуска приложений:
-
Deployment
- Назначение: Управление stateless-приложениями (например, веб-серверы, API). Обеспечивает масштабирование (через
replicas
), а также стратегии плавного обновления (rolling update) и отката версий. - Пример манифеста:
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: replicas: 3 # Запустить 3 экземпляра (пода) selector: matchLabels: app: nginx template: # Шаблон для создания подов metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.21.0 ports: - containerPort: 80
- Назначение: Управление stateless-приложениями (например, веб-серверы, API). Обеспечивает масштабирование (через
-
StatefulSet
- Назначение: Управление stateful-приложениями (например, базы данных, брокеры сообщений). Гарантирует стабильные сетевые идентификаторы и постоянное хранилище для каждого экземпляра (пода).
-
DaemonSet
- Назначение: Гарантирует, что на каждом (или на определённых) узле кластера будет запущен один экземпляр пода. Используется для агентов мониторинга, сборщиков логов или сетевых плагинов.
-
Job и CronJob
- Назначение: Для задач, которые должны быть выполнены и завершены.
Job
запускает задачу один раз, аCronJob
— по расписанию (аналогично cron в Linux).
- Назначение: Для задач, которые должны быть выполнены и завершены.
-
Pod
- Назначение: Минимальная единица развертывания в Kubernetes. Обычно поды не создаются напрямую, а управляются объектами более высокого уровня, такими как
Deployment
илиStatefulSet
.
- Назначение: Минимальная единица развертывания в Kubernetes. Обычно поды не создаются напрямую, а управляются объектами более высокого уровня, такими как