Deployment
Тема дорожной карты · Kubernetes
Deployment Kubernetes — стандартный объект API рабочей нагрузки для запуска stateless-приложений, управляющий ReplicaSet, который поддерживает нужное количество идентичных Pod'ов работающими и здоровыми в любое время. Deployment поддерживает декларативные rolling-обновления через поле spec.strategy.type: RollingUpdate, управляя темпом выкатки с помощью параметров maxSurge и maxUnavailable; его можно приостановить, возобновить или откатить командами kubectl rollout pause, kubectl rollout resume и kubectl rollout undo deployment/<name>. Поле spec.selector.matchLabels связывает Deployment с его Pod'ами и ассоциированным Service, а поля spec.template.spec.containers[].resources.requests и .limits управляют планированием CPU и памяти на узлах Kubernetes. Deployment является основной целью для правил масштабирования HPA и обычно определяется как шаблон Helm-чарта или база Kustomize в GitOps-рабочих процессах, управляемых Argo CD или Flux CD.
Как это работает
Deployment — один из workload-примитивов Kubernetes. Определяет желаемое состояние набора pods — число реплик, pod template, стратегия обновления — а контроллер непрерывно сводит реальное состояние к желаемому. При падении pod или ноды контроллер планирует замену. При обновлении pod template контроллер оркестрирует rolling update с health-проверками между батчами.
Когда применять
Выбирайте Deployment по характеристикам нагрузки: Deployment для stateless-сервисов (HTTP API, воркеры), StatefulSet для stateful с stable network identity (БД, очереди), DaemonSet для one-pod-per-node инфраструктуры (log-коллекторы, CNI), Job для batch-задач, CronJob для запланированных batch. Смешивание типов без нужды создаёт операционную сложность; выбирайте простейший подходящий примитив.
Типичные ошибки
Workload-ловушки: слишком низкие resource requests (pods scheduled, но выселяются под нагрузкой) или слишком высокие (кластер выглядит полным при малом реальном использовании); отсутствие liveness/readiness-проб (load balancer шлёт трафик на полу-стартанутые pods); использование Deployment для stateful-нагрузок, которым нужна StatefulSet-упорядоченность. Всегда измеряйте реальное использование ресурсов до sizing.