Развёртывание, масштабирование и мониторинг stateful-приложения

Введение в Kubernetes

Frank Heilmann

Platform Architect and Freelance Instructor

Повторение: stateless-приложения

  • Краткое повторение: stateless-приложения соответствуют «Deployments» в Kubernetes
  • Используются, когда каждый Pod приложения выполняет одинаковые задачи
  • Stateful-приложения требуют Pods, объединённых в набор, но работающих с разными задачами и данными
  • Многое из изученного о Deployments применимо и к StatefulSets
Введение в Kubernetes

Stateful-приложения

  • Stateful-приложения:

    • общая концепция
    • хорошо вписываются в Kubernetes
    • сохраняют своё состояние
  • При перезапуске или остановке новая реплика (Pod) считывает сохранённое состояние и продолжает работу с него

  • Пример:
    • База данных (например, PostgreSQL) передаёт данные фронтенду через 3 Pod.
    • При каждом обновлении данных через любой из Pod эти данные необходимо сохранять
    • Когда Pod завершает работу, создаётся новый, который должен восстановить сохранённое состояние
Введение в Kubernetes

Kubernetes StatefulSets

  • Stateful-приложения соответствуют «Kubernetes StatefulSets»
  • Пример манифеста содержит те же разделы:
    • apiVersion, kind, metadata, spec, template
  • replicas задаёт количество Pod в StatefulSet
  • Подробнее о selector — далее
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: <deployment name>
  labels:
    app: <a label for the application>
spec:
  replicas: <number of initial replicas>
  selector:
    matchLabels:
      app: <matches the label above>
  template:
    metadata:
      labels:
        app: <label to be given to each pod>
    spec:
      containers:
      - name: <container name>
        image: <the image to be used>
        ports:
        - containerPort: <ports for networking>
Введение в Kubernetes

Развёртывание в кластере Kubernetes

  • StatefulSet развёртывается так же, как Deployments: kubectl apply -f <manifest.yml>
  • После развёртывания StatefulSet создаётся иначе, чем Deployment:
    • Pod создаются последовательно, а не все сразу, как в Deployment
    • Pod получают предсказуемые имена: pod-0, pod-1, pod-2 и т. д.
  • Это означает: в отличие от Pod в Deployment, Pod в StatefulSet имеют идентичность и состояние
  • Поэтому разные Pod StatefulSet с разными идентичностями могут выполнять разные роли в приложении
Введение в Kubernetes

Масштабирование StatefulSet

  • Как и Deployments, StatefulSets можно масштабировать в обоих направлениях:
    • Изменить число replicas в манифесте и применить заново,
    • Или использовать команду kubectl scale statefulsets ...
  • При масштабировании вверх новые Pod добавляются по одному:
    • например, после pod-0, pod-1, pod-2 добавляется pod-3, затем pod-4
  • При масштабировании вниз последние созданные Pod удаляются первыми:
    • например, сначала pod-4, затем pod-3
Введение в Kubernetes

Мониторинг StatefulSet

  • Как и в случае Deployments, мониторинг позволяет реагировать на различные проблемы: сбои, всплески нагрузки или нехватку хранилища
  • Здесь для базовых задач мониторинга используется kubectl
  • Типичные команды — те же, что и для Deployments
  • Пример 1: kubectl get pods возвращает все Pod в StatefulSet с их текущим статусом
  • Пример 2: kubectl get services возвращает все сервисы, которые может использовать StatefulSet
Введение в Kubernetes

Давайте потренируемся!

Введение в Kubernetes

Preparing Video For Download...