Что такое StatefulSet ?

Спросят с вероятностью 13%



StatefulSet — это контроллер API, предназначенный для управления и обеспечения упорядоченного развертывания и масштабирования набора подов, а также для гарантии порядка и уникальности этих подов. В отличие от Deployment и ReplicaSet, которые предназначены для управления безсостоянием (stateless) приложениями, StatefulSet используется для работы с состоянием (stateful) приложениями.



Основные особенности:



1️⃣Стабильное и уникальное сетевое имя: Каждый под имеет стабильный идентификатор, который сохраняется независимо от пересоздания подов. Эти идентификаторы строятся на базе общего имени и индекса (например, myapp-0, myapp-1).



2️⃣Стабильное хранилище: Может использовать постоянные тома (Persistent Volumes), которые могут быть повторно присоединены к поду в случае его перезапуска. Постоянные тома привязываются к подам на основе их уникальных индексов.



3️⃣Упорядоченное развертывание и масштабирование: Поды создаются и удаляются строго в порядке их индексации. Например, под с индексом n будет создан только после успешного создания пода с индексом n-1.



4️⃣Упорядоченное и грациозное удаление: Поды удаляются и заменяются в обратном порядке к их индексам. Kubernetes дожидается грациозного завершения подов перед их удалением, что важно для поддержания консистентности данных.



StatefulSet часто используются для развертывания систем баз данных, кэшей, хранилищ и любых других приложений, где важны порядок и устойчивость данных. Например, для запуска репликации базы данных PostgreSQL в Kubernetes можно использовать StatefulSet для обеспечения, что каждый экземпляр базы данных будет иметь своё собственное устойчивое хранилище и уникальный сетевой адрес.

apiVersion: apps/v1

kind: StatefulSet

metadata:

name: web

spec:

selector:

matchLabels:

app: nginx

serviceName: "nginx"

replicas: 3

template:

metadata:

labels:

app: nginx

spec:

containers:

- name: nginx

image: nginx:1.14.2

ports:

- containerPort: 80

name: web

volumeClaimTemplates:

- metadata:

name: nginx-storage

spec:

accessModes: ["ReadWriteOnce"]

storageClassName: "my-storage-class"

resources:

requests:

storage: 1Gi




В этом примере:

volumeClaimTemplates используется для автоматического создания постоянного хранилища для каждого пода.

replicas указывает на количество подов, которые нужно управлять.



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



👉 Можно посмотреть Примеры как отвечают люди на этот вопрос, или перейти К списку 1119 вопросов на DevOps. Ставь 👍 если нравится контент



🔐 База собесов | 🔐 База тестовых