Ответ
В 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 и т.д.).