deployment
Deployment(Развертывание) - объект Kubernetes, который хранит в себе информацию о желаемом состоянии одного или нескольких подов, и передает эту информацию kube-controller-manager, который передает дальше управляющие команды для манипуляции с подами: создание, обновление, удаление и пр.
Основная функция объекта deployment поддерживать указанное состояние сервиса запущенного этим развертыванием: следить за работаспособностью подов и необходимым количеством развернутых реплик сервиса. Жизненным циклом подов в deployment можно гибко управлять.
Deployment - это декларация того состояния котнейнеров, упакованных в pod-оболочки, которое мы хотим видеть.
Самый простой способ создать объект deployment - через консоль передать необходимые характеристики желаемого состояния развертывания:
kubectl create deployment my-deployment --image=nginx:latest --replicas=3
# Данная команда создаст Развертывание с тремя репликами пода с nginx-контейнером внутри,
# и будет следить за работоспособностью данного deployment, пока мы его не удалим
Команды для управления deployment
# Создать deployment из командной строки
kubectl create deployment test --image=nginx
# Масштабировать deployment до 5 реплик
kubectl scale deployment test --replicas=5
# Посмотреть развернутые deployments
kubectl get deployments
# Посмотреть подробное описание deployment
kubectl describe deployments/my-deployment
# Посмотреть ReplicaSets
kubectl get replicasets
# Удалить deployment
kubectl delete deployment my-deployment
ReplicaSet
За реплики отвечает другой объект Кубера - ReplicaSet, но напрямую с ним взаимодействовать нет особого смысла, Deployment сделает все сам.
ReplicaSet отвечает за масштабирование и версионирование
Для одного и того же Deployment может существовать несколько ReplicaSet.Фактически Deployment управляет объектами ReplicaSet. Например, при обновлении версии приложения будет создан новый объект ReplicaSet, с его помощью будут развернуты новые Поды, и только потом будут удалены старые объекты: поды и реплики.
Deployment manifests
Объектами Deployment проще и удобней управлять с помощью манифестов ресурсов.
Deployment manifests - конфигурационные файлы в формате yaml(json), в которых описано желаемое состояние подов в конкретном развертывании. Описание дается подробное: количество реплик, найменование образов, переменные, порты, volumes и пр..
apiVersion: apps/v1 # версия API
kind: Deployment # Тип ресурса
metadata: # Метаданные развертывания
name: my-deployment # Имя
spec: # Спецификация - описывает декларируемое состояние
replicas: 3 # Количество реплик
selector: # С помощью меток, можно пределять к каким подом применим данный манифест
matchLabels:
app: my-app # Будут развернуты поды с меткой app, со значением my app
template: # Шаблон для создания пода: конкретные контейнеры, переменные, сетевый настройки и пр.
metadata:
labels:
app: my-app # Метки для подов этого шаблона
spec: # Спецификация контейнеров включенных в под
containers:
- name: my-container
image: nginx:latest
Применить и обновить созданный манифест можно с помощью команды:
StatefulSet
StatefulSet - объект k8s, с помощью которого разворачиваются stateful-приложения с сохраняемыми состояниями. Например, малонагруженные БД, кэши приложений, Бд для тестирования.
Основные отличия от ресурса deployment:
- Поды созданные с помощью statefulset закрепляются за нодами.
- Имена подов не меняются.
- Данные созданные подами сохраняются.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mystatefulset
spec:
selector:
matchLabels:
app: myapp
serviceName: <ServiceName>
replicas: 2
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: registry.k8s.io/nginx-slim:0.8
ports:
- containerPort: 80
name: web
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
DaemonSet
DaemonSet - ресурс Кубера, который гарантированно разворачивает указанные в спецификации поды на всех нодах кластера.
Обычно используется для создания системных служб и приложений: мониторинг (node-exporter), логирование, агенты сетевых решений.