Вопрос проверяет понимание управления stateful-приложениями в Kubernetes и различий между StatefulSet и Deployment.
StatefulSet и Deployment — это два контроллера в Kubernetes, которые управляют развертыванием и масштабированием подов. Основное отличие заключается в том, что StatefulSet предназначен для приложений, которые хранят состояние (stateful), а Deployment — для приложений без состояния (stateless).
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
serviceName: "nginx"
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates:
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1GiStatefulSet идеально подходит для баз данных (MySQL, PostgreSQL), систем очередей (Kafka, RabbitMQ) и других приложений, где каждый экземпляр должен иметь уникальные данные и стабильный сетевой адрес. Deployment лучше использовать для веб-серверов, API-сервисов и микросервисов, где поды могут быть заменены без потери данных.
Вывод: StatefulSet применяется для stateful-приложений, требующих стабильности и упорядоченности, в то время как Deployment — для stateless-сервисов, где важна простота и масштабируемость.