Kubernetes theory
October 28, 2022

StatefulSet

StatefulSet - это контроллер наподобие Deployment, использующийся для управления подами с отслеживанием их состояния.

Где это используется и что же это значит?

Этот контроллер очень популярен для создания подов с разными базами данных. PostgreSQL, MongoDB, Redis, Cassandra, Elasticsearch, etc.

Как и в Deployment, здесь есть директива регламентирующая количество реплик, спецификация контейнеров одна на все поды, одинаковые метки. Но есть и отличие - есть дополнительная проверка на отслеживание состояния. Это позволяет, например, в случае гибели пода передавать созданному вместо него его адрес. Также как и в Deployment есть поддержка политики обновления подов и rollout.

Особенности.

  1. Используется только с restartPolicy: Always.

Пример StetefulSet:

cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: cam-redis
spec:
  serviceName: cam-redis
  replicas: 1
  selector:
    matchLabels:
      app: cam-redis
  template:
    metadata:
      labels:
        app: cam-redis
        env: testing
        type: base
        purpose: cache
    spec:
      containers:
      - name: redis
        image: redis:latest
        imagePullPolicy: IfNotPresent
        resources: 
          requests: 
            cpu: 3 
            memory: 4Gi 
          limits: 
            cpu: 3 
            memory: 5Gi
        ports:
         - containerPort: 6379
         - containerPort: 26379  
EOF

Полезные ссылки.

https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/