75 lines
3.3 KiB
Markdown
75 lines
3.3 KiB
Markdown
---
|
||
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**).
|
||
|