0Pricing
Kubernetes Basics · Урок

StatefulSets для приложений с состоянием

Развёртывайте и управляйте приложениями с состоянием, например базами данных, с помощью StatefulSets, обеспечивая стабильные сетевые идентификаторы и постоянное хранилище.

«StatefulSets для приложений с состоянием» — бесплатный урок Kubernetes Basics на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Kubernetes Basics, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Kubernetes Basics содержит 4 уроков всего.

StatefulSets для приложений с состоянием

Добро пожаловать! На этом уроке Вы подробно изучите StatefulSets — объект Kubernetes, предназначенный для управления приложениями с состоянием.

В отличие от приложений без состояния, которые легко масштабировать и заменять, приложениям с состоянием нужны уникальные идентификаторы и постоянное хранилище для каждого экземпляра. К таким приложениям относятся базы данных, очереди сообщений и пользовательские приложения, локально хранящие данные.

Зачем нужны StatefulSets: проблема

Обычные развертывания отлично подходят для приложений без состояния. Если под выходит из строя, его заменяет новый, и не имеет значения, какой именно под обрабатывает запрос.

Однако для приложений с состоянием каждой реплике часто нужны стабильный уникальный идентификатор и собственное выделенное хранилище. Если под базы данных перезапускается, ему необходимо повторно подключиться к своему тому данных.

Стабильная сеть и идентификатор пода

Важная особенность StatefulSets — предоставление стабильных уникальных сетевых идентификаторов каждому поду.

  • Подам присваиваются предсказуемые имена в определенном порядке, например web-0 и web-1.
  • После перезапусков они сохраняют свои имена узлов.
  • Благодаря этому другие службы могут надежно подключаться к определенной реплике.

Стабильное постоянное хранилище

StatefulSets гарантируют, что каждый под получит собственное стабильное постоянное хранилище. Для этого используются утверждения постоянного тома (PVC).

При создании пода StatefulSet автоматически создает PVC на основе определения volumeClaimTemplates. Если под выйдет из строя и будет создан заново, он повторно подключится к тому же PVC и, следовательно, к исходным данным.

Структура YAML StatefulSet

Определение StatefulSet в YAML похоже на Deployment, но содержит несколько важных дополнений. Оно включает:

  • apiVersion, kind, metadata
  • spec.replicas, spec.selector, spec.template (как у развертываний)
  • spec.serviceName: связывает объект с автономной службой.
  • spec.volumeClaimTemplates: определяет способ создания PVC для каждого пода.

Автономная служба для стабильных идентификаторов

Чтобы StatefulSets могли предоставлять стабильные сетевые идентификаторы, им нужна автономная служба. У автономной службы нет IP кластера. Вместо этого она напрямую возвращает IP-адреса выбранных ею подов.

StatefulSet использует эту службу для регистрации DNS-записей каждого своего пода, например pod-0.my-service.my-namespace.svc.cluster.local.

apiVersion: v1
kind: Service
metadata:
  name: my-app-headless
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None # This makes it a headless service
  selector:
    app: my-app

VolumeClaimTemplates

Раздел volumeClaimTemplates уникален для StatefulSets. Это шаблон для утверждений постоянного тома (PVC), которые будут созданы для каждой реплики.

Каждый под в StatefulSet, например my-app-0 и my-app-1, получит собственный PVC, например data-my-app-0 и data-my-app-1, на основе этого шаблона, что обеспечит выделенное хранилище.

volumeClaimTemplates:
- metadata:
    name: data # This name is used in Pod's volumeMounts
  spec:
    accessModes: [ "ReadWriteOnce" ]
    storageClassName: standard
    resources:
      requests:
        storage: 1Gi

Полный пример StatefulSet

Ниже приведен полный пример простого StatefulSet для Nginx. Обратите внимание на serviceName, связывающий объект с автономной службой, и на volumeClaimTemplates.

Чтобы развернуть этот объект, сохраните его в файле nginx-statefulset.yaml и выполните команду kubectl apply -f nginx-statefulset.yaml.

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  serviceName: "nginx-headless" # Must match headless service name
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: k8s.gcr.io/nginx-slim:0.8
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: www # Mounts the volume from the PVC
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates:
  - metadata:
      name: www # This name links to volumeMounts.name
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: standard
      resources:
        requests:
          storage: 1Gi
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-headless
  labels:
    app: nginx
spec:
  ports:
  - port: 80
    name: web
  clusterIP: None
  selector:
    app: nginx

Имена и порядок подов

После развертывания Вы увидите поды с именами вроде web-0 и web-1. Эти индексы стабильны и уникальны.

StatefulSets обеспечивают строгий порядок операций масштабирования. Под создаются по порядку (0, 1, 2...), а завершаются в обратном порядке (..., 2, 1, 0).

Такой порядок крайне важен для многих распределенных систем с состоянием, поскольку помогает сохранять согласованность.

Масштабирование и поэтапные обновления

StatefulSet можно масштабировать так же, как Deployment, с помощью команды kubectl scale statefulset web --replicas=3.

Поэтапные обновления также поддерживаются, сохраняя тот же порядок: поды обновляются по одному в обратном порядке номеров, причем следующий под не обновляется, пока предыдущий не будет готов.

Такая тщательная координация сводит к минимуму перебои в работе приложений с состоянием.

Проверьте свои знания

Какие из следующих характеристик или требований являются ключевыми для StatefulSets в Kubernetes?

Повторение: StatefulSets в действии

Отличная работа! На этом уроке Вы изучили StatefulSets — мощный объект Kubernetes для управления приложениями с состоянием.

  • Они предоставляют стабильные сетевые идентификаторы и обеспечивают выполнение операций в определенном порядке.
  • Они используют volumeClaimTemplates для выделенного постоянного хранилища каждой реплики.
  • Автономная служба необходима для стабильных сетевых идентификаторов.

StatefulSets играют фундаментальную роль в надежном запуске баз данных и других критически важных рабочих нагрузок с состоянием в Kubernetes.

Часто задаваемые вопросы

Урок «StatefulSets для приложений с состоянием» бесплатный?

Да — полный текст урока «StatefulSets для приложений с состоянием» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Kubernetes Basics, подпишись на CoddyKit PRO. Курс Kubernetes Basics содержит 4 уроков всего.

Чему я научусь в уроке «StatefulSets для приложений с состоянием»?

Развёртывайте и управляйте приложениями с состоянием, например базами данных, с помощью StatefulSets, обеспечивая стабильные сетевые идентификаторы и постоянное хранилище. Ты практикуешь Kubernetes Basics с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Kubernetes Basics?

Предыдущий опыт не требуется. Kubernetes Basics на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «StatefulSets для приложений с состоянием»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Kubernetes Basics?

Да. Каждый урок Kubernetes Basics включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. StatefulSets для приложений с состоянием
  2. DaemonSets для задач на узлах
  3. Разбор операторов Kubernetes
  4. Определения пользовательских ресурсов (CRD)
← Назад к Kubernetes Basics