--- status: processing type: concept tags: - devops created: 2025-12-17 updated: 2026-04-29 title: Deployment и ReplicaSet --- # Deployment и ReplicaSet Среди многих kube-controllers, есть два важных контроллера, которые отвечают за развертывание приложений в k8s. - Deployment-controller - Replicaset-controller ## Deployment **Deployment-controller** отвечает за работу с декларативным описанием приложения для его последующего развертывания и обновления. Сущность, которой оперирует deployment-controller называется *Deployment*. ## ReplicaSet Deployment в своей работе использует концепцию набора репликаций **Replicaset** — сущность Kubernetes, отвечающая за поддержку стабильного набора репликаций приложения, работающих в один момент времени. За работу с Replicaset отвечает *Replicaset*-controller. Приложения в k8s представлены в виде объединений контейнеров (**pod**). Набором репликаций объединений контейнеров (**pods**) управляет replicaset. С набором репликаций (replicaset) работает deployment. ## Deployment controller *Deployment-controller* способен самостоятельно создать Deployment на основе образа (Docker image), а может использовать готовое описание Deployment (Manifest) в формате `yaml` или `json`. ```sh kubectl create deployment mariadb --image=mariadb:4.0 ``` ```sh kubectl apply -f nginx-deployment-manifest.yaml ``` Deployment-controller через сущность Deployment работает только с объединением контейнеров (Pods) и наборами их репликаций (Replicasets). Для связи *Pod* с другими *Pods* и внешним миром используется сущность **Service**. *Pod* связывается с *Service* через *Endpoint* (обеспечением работы Endpoints занимается Endpoint-controller). ## Service Создать Service можно выполнив *Expose* существующего *Deployment* или использовав готовое описание *Service* (Manifest) в формате `yaml` или `json`. ```bash kubectl expose deployment mariadb --port=8080 ``` ```sh kubectl apply -f nginx-service-manifest.yaml ``` ## Deployment - replicaset За счет связки *Deployment* - *replicaset*, в кластере Kubernetes гарантируется выполнение следующих операций. - Обновление без downtime (**Rolling update**). - Откат текущего обновления (**Rollback**). - Просмотр истории обновлений (**Revision**). - Откат приложения до конкретной ревизии (**Rollback to revision**). - Скалирование и дескалирование приложения (**Scaling**).