Как будут называться поды в ReplicaSet и в StatefulSet?

«Как будут называться поды в ReplicaSet и в StatefulSet?» — вопрос из категории Kubernetes, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В ReplicaSet имена подов генерируются по шаблону: <replicaset-name>-<random-string>, где random-string — это уникальный идентификатор, создаваемый Kubernetes (например: myapp-abc123). Это недетерминированное именование.

В StatefulSet имена подов предсказуемы и следуют шаблону: <statefulset-name>-<ordinal-index> (например: db-0, db-1, db-2). Порядковый номер (ordinal-index) сохраняется при пересоздании пода, что критично для stateful-приложений (базы данных, очереди), где каждый под имеет уникальную идентичность и хранилище.

Пример StatefulSet для базы данных:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: postgres-cluster
spec:
  serviceName: "postgres"
  replicas: 3
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
      - name: postgres
        image: postgres:15
        ports:
        - containerPort: 5432
  volumeClaimTemplates:
  - metadata:
      name: data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 10Gi

Этот манифест создаст поды с именами postgres-cluster-0, postgres-cluster-1, postgres-cluster-2. Каждому поду будет соответствовать свой PersistentVolumeClaim (data-postgres-cluster-0 и т.д.).