hostprofi.ru
Подобрать хостинг
Термин·буква D

Deployment

краткое определение

Deployment — объект Kubernetes, описывающий желаемое состояние набора подов: количество реплик, образ контейнера, стратегию обновления. Контроллер автоматически поддерживает это состояние.

Deployment — ключевой объект Kubernetes для управления stateless-приложениями. YAML-манифест описывает: какой образ контейнера запустить, сколько реплик держать, как обновлять. Kubernetes-контроллер следит за соответствием реального состояния желаемому.

Как работает

Deployment управляет объектом ReplicaSet, который в свою очередь управляет подами. При изменении манифеста (например, новый тег образа) Deployment создаёт новый ReplicaSet и постепенно переключает поды — это называется rolling update.

Стратегии обновления: RollingUpdate (по умолчанию) заменяет поды по одному с контролем maxSurge и maxUnavailable. Recreate удаляет все старые поды перед запуском новых — даёт нулевое время параллельной работы старой и новой версии.

При откате (kubectl rollout undo) Deployment переключается на предыдущий ReplicaSet. История обновлений хранится согласно параметру revisionHistoryLimit (по умолчанию 10).

История

Deployment появился в Kubernetes 1.2 в 2016 году как замена устаревшему ReplicationController. До этого разработчики использовали ReplicaSet напрямую, без встроенного механизма rolling update. С версии Kubernetes 1.9 Deployment стал частью стабильного API apps/v1.

Структура манифеста

  • replicas — количество экземпляров пода.
  • selector — метки для поиска подов, которыми управляет Deployment.
  • template — шаблон пода: образ, ресурсы, переменные окружения.
  • strategy — RollingUpdate или Recreate.

Связь с хостингом

В managed Kubernetes-кластерах (EKS, GKE, Яндекс Cloud) Deployment — стандартный способ деплоя веб-приложений. CI/CD-пайплайны (GitLab CI, GitHub Actions) применяют kubectl set image или helm upgrade для обновления Deployment в продакшене.

Ключевые отличия от похожих терминов

StatefulSet используют для stateful-приложений (базы данных): гарантирует порядок запуска и стабильные имена подов. DaemonSet запускает по одному поду на каждом узле кластера. Deployment — для stateless-сервисов с горизонтальным масштабированием.

Жизненный цикл Deployment

Deployment управляет ReplicaSet, который управляет Pod'ами. Rolling Update: постепенная замена старых Pod'ов новыми (maxUnavailable=1, maxSurge=1). Rollback: kubectl rollout undo deployment/myapp. Пауза/возобновление: kubectl rollout pause/resume.

Стратегии деплоя

Recreate: остановить все → запустить новые (простой). RollingUpdate: постепенно (без простоя). Blue-Green через два Deployment + Service-переключение. Canary через несколько Deployment с разными весами. Argo Rollouts — продвинутые стратегии (canary, blue-green с анализом метрик).

Ресурсные лимиты

resources.requests — гарантированные ресурсы (влияют на расписание). resources.limits — максимум (OOM kill при превышении памяти). Без requests/limits Kubernetes не может корректно распределять нагрузку. В production — всегда указывать оба. HPA (Horizontal Pod Autoscaler) масштабирует Deployment по CPU/RAM.

Диагностика проблем Deployment

kubectl rollout status deployment/myapp — статус обновления. kubectl rollout history deployment/myapp — история. Pod CrashLoopBackOff: kubectl logs pod-name --previous — логи предыдущего контейнера. ImagePullBackOff: проблема с registry. OOMKilled: превышен лимит памяти — увеличить resources.limits.memory.

Kubernetes Deployment управляет жизненным циклом подов. Kubernetes обеспечивает rolling update без простоя. Docker-образы загружаются из registry. Namespace изолирует Deployment между командами. CI/CD автоматизирует применение новых версий.

Другие термины