Middle
Milyen alkalmazáshoz kell a StatefulSet-et a Deployment helyett használni, és miért?
sobes.tech MI
Válasz az MI-től
StatefulSet-et olyan alkalmazásokhoz kell használni, amelyek:
- Stabil hálózati azonosítást igényelnek. A Podok egyedi, állandó hostnevet kapnak a
<statefulset-neve>-<pod-index>formátumban. - Stabil, tartós tárolást. Minden Pod replikához saját PersistentVolume van hozzárendelve. Még a Pod újraindítása után is az adatok hozzá vannak kötve.
- Sorrendben történő telepítést és skálázást. A Podok szigorúan meghatározott sorrendben jönnek létre és törlődnek (növekvő sorrendben a létrehozás, csökkenő sorrendben a törlés).
- Sorrendben vagy párhuzamos frissítést. Támogatja mind a fokozatos (rolling update), mind a párhuzamos (in-place vagy parallel) frissítést, sorrend ellenőrzésével.
Ezek példái:
- Adatbázisok (MySQL, PostgreSQL, MongoDB)
- Üzenetközvetítők (Kafka, RabbitMQ)
- Gyorsítótárrendszerek (Redis, Memcached)
- Elosztott fájlrendszerek (pl. Ceph, ha Kubernetesben fut)
- Bármilyen alkalmazás, amelynek állapotot kell megőriznie újraindások között, és állandó azonosítást igényel.
A Deployment-től eltérően, ahol a Podok cserélhetők és stateless-ek, a StatefulSet garantálja az egyediségét és az állapot megőrzését minden replikánál, ami kritikus az olyan alkalmazásoknál, amelyek függnek a tartós tárolástól és a stabil hálózati azonosítástól.
Egy nagyon egyszerű példája egy StatefulSet-nek egy adatbázishoz:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
serviceName: "mysql" # Szükséges a stabil hálózati azonosításhoz
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" # Éles környezetben Secrets használata ajánlott
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql # A tartós tárolás csatlakoztatási útvonala
volumeClaimTemplates:
- metadata:
name: mysql-persistent-storage # PVC sablon neve
spec:
accessModes: [ "ReadWriteOnce" ] # Hozzáférési mód
resources:
requests:
storage: 10Gi # Kért tárolókapacitás