Middle
Kokiai programai turėtų būti naudojamas StatefulSet vietoj Deployment ir kodėl?
sobes.tech AI
Atsakymas iš AI
StatefulSet reikalingas naudoti programoms, kurioms reikalinga:
- Stabili tinklo identifikacija. Pod'ai gauna unikalų, nuolatinį hostname formatu
<statefulset-name>-<pod-index>. - Stabilus, nuolatinis saugojimas. Kiekvienai Pod'o replikai priskiriamas savo PersistentVolume. Net ir perkraunant Pod'ą, jo duomenys lieka pririšti prie jo.
- Tvarkingas diegimas ir mastelio keitimas. Pod'ai kuriami ir naikinami griežtai nustatytu tvarka (augimo tvarka kuriant, mažėjimo naikinant).
- Tvarkingas arba paralelinis atnaujinimas. Palaikomas tiek palaipsnis (rolling update), tiek paralelinis (in-place arba parallel) atnaujinimas, bet su galimybe kontroliuoti tvarką.
Pavyzdžiai tokių programų:
- Duomenų bazės (MySQL, PostgreSQL, MongoDB)
- Žinučių tarpininkai (Kafka, RabbitMQ)
- Talpyklos sistemos (Redis, Memcached)
- Paskirstytos failų sistemos (pavyzdžiui, Ceph, jei veikia Kubernetes)
- Bet kuri programa, kuri turi išsaugoti būseną tarp perkrovų ir turėti nuolatinę identifikaciją.
Skirtingai nuo Deployment, kur Pod'ai yra pakeičiami ir neturi būsenos, StatefulSet garantuoja unikalumą ir būsenos išsaugojimą kiekvienai replikai, kas yra kritiška programoms, priklausančioms nuo nuolatinio duomenų saugojimo ir stabilios tinklo identifikacijos.
Pavyzdys paprasto StatefulSet duomenų bazei:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
serviceName: "mysql" # Reikalinga stabiliai tinklo identifikacijai Pod'ų
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" # Naudoti Secrets gamyboje
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql # Kelias, kur montuojamas nuolatinis saugojimas
volumeClaimTemplates:
- metadata:
name: mysql-persistent-storage # PVC šablono pavadinimas
spec:
accessModes: [ "ReadWriteOnce" ] # Prieigos režimas
resources:
requests:
storage: 10Gi # Reikalaujamas saugojimo kiekis