Middle
Za koju aplikaciju treba koristiti StatefulSet umesto Deployment i zašto?
sobes.tech АИ
Одговор од АИ
StatefulSet treba koristiti za aplikacije koje zahtevaju:
- Stabilnu mrežnu identifikaciju. Pod-ovi dobijaju jedinstveno, trajno hostname u formatu
<ime-statefulseta>-<indeks-poda>. - Stabilno, trajno skladište. Svakoj repliki Pod-a dodeljuje se svoj PersistentVolume. Čak i nakon ponovnog pokretanja Pod-a, njegovi podaci ostaju povezani s njim.
- Uređeno postavljanje i skaliranje. Pod-ovi se kreiraju i brišu u strogo definisanom redosledu (uzlazno za kreiranje, silazno za brisanje).
- Uređeno ili paralelno ažuriranje. Podržava kako postepeno (rolling update), tako i paralelno (in-place ili parallel) ažuriranje, sa kontrolom reda.
Primeri takvih aplikacija:
- Baze podataka (MySQL, PostgreSQL, MongoDB)
- Posrednici poruka (Kafka, RabbitMQ)
- Sistem keširanja (Redis, Memcached)
- Distribuirani fajl sistemi (npr. Ceph, ako se pokreće u Kubernetesu)
- Svaka aplikacija koja mora da čuva stanje između restartova i ima konstantnu identifikaciju.
Za razliku od Deployment-a, gde su Pod-ovi zamenjivi i bez stanja, StatefulSet garantuje jedinstvenost i očuvanje stanja za svaku repliku, što je ključno za aplikacije koje zavise od trajnog skladišta i stabilne mrežne identifikacije.
Primer najjednostavnijeg StatefulSet-a za bazu podataka:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
serviceName: "mysql" # Potrebno za stabilnu mrežnu identifikaciju Pod-ova
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" # U produkciji koristite Secrets
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql # Putanja gde se montira trajno skladište
volumeClaimTemplates:
- metadata:
name: mysql-persistent-storage # Ime PVC šablona
spec:
accessModes: [ "ReadWriteOnce" ] # Režim pristupa
resources:
requests:
storage: 10Gi # Zahtevani kapacitet skladišta