Skip to content

deployment

Deployment(Развертывание) - объект Kubernetes, который хранит в себе информацию о желаемом состоянии одного или нескольких подов, и передает эту информацию kube-controller-manager, который передает дальше управляющие команды для манипуляции с подами: создание, обновление, удаление и пр.

Основная функция объекта deployment поддерживать указанное состояние сервиса запущенного этим развертыванием: следить за работаспособностью подов и необходимым количеством развернутых реплик сервиса. Жизненным циклом подов в deployment можно гибко управлять.

Deployment - это декларация того состояния котнейнеров, упакованных в pod-оболочки, которое мы хотим видеть.

Самый простой способ создать объект deployment - через консоль передать необходимые характеристики желаемого состояния развертывания:

kubectl create
kubectl create deployment my-deployment --image=nginx:latest --replicas=3

# Данная команда создаст Развертывание с тремя репликами пода с nginx-контейнером внутри,
# и будет следить за работоспособностью данного deployment, пока мы его не удалим

Команды для управления 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 и пр..

Deployment
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

Применить и обновить созданный манифест можно с помощью команды:

kubectl apply
kubectl apply -f /file_name.yaml

StatefulSet

StatefulSet - объект k8s, с помощью которого разворачиваются stateful-приложения с сохраняемыми состояниями. Например, малонагруженные БД, кэши приложений, Бд для тестирования.

Основные отличия от ресурса deployment:

  1. Поды созданные с помощью statefulset закрепляются за нодами.
  2. Имена подов не меняются.
  3. Данные созданные подами сохраняются.
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), логирование, агенты сетевых решений.