# Deployment Deployments наиболее популярный способ для запуска приложений без сохранения состояния. Это добавляет проверку состояния, масштабирование, восстановление. Реализовано через deployment контроллер. Каждый контроллер управляет одним или несколькими одинаковыми подами. [![k8s_deployments_1.JPG](http://bobrobotirk.ru/uploads/images/gallery/2025-03/scaled-1680-/k8s-deployments-1.JPG)](http://bobrobotirk.ru/uploads/images/gallery/2025-03/k8s-deployments-1.JPG) **Масштабирование (Scalling)** Существуют несколько типов
ТипОписание
Horizontal Pod AutoscalerМасштабирование количества подов, наиболее часто используется.
Vertical Pod AutoscalerМасштабирование ресурсов, потребляемых подами. Не установлен по умолчанию. Редко используется
Cluster AutoscalerДобавляет/удаляет ноды. По умолчанию, часто используется.
Например, указываем кол-во подов от 2 до 10. Нагрузка повысилась, и HPA запрашивает еще 2 пода. Они запускаются. Но нагрузка растет, и запрашивается еще 2 пода. Однако на существующем кластере нет возможности запустить еще 2 пода, и они переходят в статус Pending. CA определяет Pending поды и увеличивает количество нодов, запуская там поды. И наоборот. Масштабирование связано с понятием текущего состояния (state). Есть необходимое состояние и наблюдаемое состояние. При неравенстве контроллер запускает процесс изменений. Важно: архитектура приложения должна поддерживать возможность масштабирования. Микросервисы должны взаимодействовать только через API. При увеличении количества, добавляется новый под. **Реплики** ReplicaSets - набор настроек и подов с одной версией конфигурации. При обновлении yaml создается вторая ReplicaSet и один новый под. Из старой ReplicaSet удаляется один под. И так далее до полного обновления. Но конфигурация сохраняется. Можно вернуть к старым настройкам. **Структура YAML файла** Верхний уровень
ПараметрОписание
kindТип, в данном случае Deployments
specСпецификация
spec
ПараметрОписание
strategyСтратегия восстановления
replicasкол-во реплик
selectorправила выбора меток
templateописание шаблона (все аналогично описанию пода)
**Примеры** ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: hello-deploy spec: replicas: 10 selector: matchLabels: app: hello-world revisionHistoryLimit: 5 progressDeadlineSeconds: 300 minReadySeconds: 10 strategy: type: RollingUpdate rollingUpdate: maxUnavailable: 1 maxSurge: 1 template: metadata: labels: app: hello-world spec: containers: - name: hello-pod image: nigelpoulton/k8sbook:1.0 ports: - containerPort: 8080 resources: limits: memory: 128Mi cpu: 0.1 ``` Пример сервиса для данного приложения ```yaml apiVersion: v1 kind: Service metadata: name: lb-svc labels: app: hello-world spec: type: LoadBalancer ports: - port: 8080 protocol: TCP selector: app: hello-world ``` **Основные команды**
КомандаДоп. пар.Описание
kubectl get deploy dep\_name статус
kubectl describe deploy dep-name Расширенная информация
kubectl get rs Список реплик
kubectl scaledeploy dep\_name --replicas countИмперативное масштабирование. Нежелательно.
kubectl rollout status deployment dep\_name Статус обновления подов
kubectl rollout pause deploy dep\_name Приостановка обновления
kubectl describe deploy dep\_name Отображает в частности список роллбеков
kubectl rollout history deployment dep\_name История роллбеков
kubectl rollout undo deployment hello-deploy --to-revision=1 Возврат. Быстро, но не рекомендуется. Лучше через загрузку старого файла из репозитория и обновление.