Middle
Pentru ce aplicație ar trebui să folosiți StatefulSet în loc de Deployment și de ce?
sobes.tech AI
Răspuns de la AI
StatefulSet trebuie utilizat pentru aplicații care necesită:
- Identificare de rețea stabilă. Pod-urile primesc un hostname unic și permanent în formatul
<numele-statefulset-ului>-<indexul-pod-ului>. - Stocare stabilă și persistentă. Fiecărui replica de Pod i se atribuie un PersistentVolume propriu. Chiar și după repornirea Pod-ului, datele sale rămân atașate.
- Implementare și scalare ordonată. Pod-urile sunt create și șterse într-o ordine strict definită (ascendent pentru creare, descendent pentru ștergere).
- Actualizare ordonată sau paralelă. Suportă atât actualizări progresive (rolling update), cât și actualizări paralele (in-place sau parallel), cu control asupra ordinii.
Exemple de astfel de aplicații:
- Baze de date (MySQL, PostgreSQL, MongoDB)
- Brokeri de mesaje (Kafka, RabbitMQ)
- Sisteme de cache (Redis, Memcached)
- Sisteme de fișiere distribuite (de exemplu, Ceph, dacă rulează în Kubernetes)
- Orice aplicație care trebuie să păstreze stare între reporniri și să aibă o identificare constantă.
Spre deosebire de Deployment, unde Pod-urile sunt interschimbabile și fără stare, StatefulSet garantează unicitatea și păstrarea stării pentru fiecare replică, ceea ce este critic pentru aplicațiile dependente de stocare persistentă și identificare de rețea stabilă.
Exemplu de un StatefulSet foarte simplu pentru o bază de date:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
serviceName: "mysql" # Necesită pentru identificarea de rețea stabilă a Pod-urilor
replicas: 3
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:5.7
ports:
- containerPort: 3306
env:
- name: MYSQL_ROOT_PASSWORD
value: "password" # În producție, folosiți Secrets
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql # Calea unde se montează stocarea persistentă
volumeClaimTemplates:
- metadata:
name: mysql-persistent-storage # Numele șablonului PVC
spec:
accessModes: [ "ReadWriteOnce" ] # Mod de acces
resources:
requests:
storage: 10Gi # Volumul de stocare solicitat