Middle
144
Қандай қолданба үшін StatefulSet қолдану керек және неге?
AI-дан жауап
sobes.tech AI
StatefulSet қолдану керек қосымшалар үшін:
- Тұрақты желілік идентификация. Pod-тар
<statefulset-name>-<pod-index>форматында бірегей, тұрақты hostname алады. - Тұрақты, тұрақты сақтау. Әр Pod репликасына өзінің PersistentVolume тағайындалады. Pod қайта іске қосылғанда да оның деректері оған байланысты қалады.
- Тәртіппен орналастыру және масштабтау. Pod-тар қатаң анықталған тәртіпте жасалады және жойылады (өсу тәртібімен жасау, кему тәртібімен жою).
- Тәртіппен немесе параллель жаңарту. Біртіндеп (rolling update) немесе параллель (in-place немесе parallel) жаңарту қолдау көрсетіледі, бірақ тәртіпті бақылау мүмкіндігімен.
Мұндай қосымшалардың мысалдары:
- Дерекқорлар (MySQL, PostgreSQL, MongoDB)
- Хабарламалар брокерлері (Kafka, RabbitMQ)
- Кэш жүйелері (Redis, Memcached)
- Таралған файл жүйелері (мысалы, Ceph, Kubernetes-те іске қосылғанда)
- Қайта іске қосылудан кейін күйін сақтау қажет болатын кез келген қосымша.
Deployment-пен салыстырғанда, мұнда Pod-тар өзара ауыстырылмайды және stateless емес, ал StatefulSet әр реплика үшін бірегейлікті және күйді сақтауды қамтамасыз етеді, бұл тұрақты сақтау және желілік тұрақтылыққа тәуелді қосымшалар үшін маңызды.
Мысал ретінде дерекқор үшін ең қарапайым StatefulSet:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
serviceName: "mysql" # 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" # Өндіріс үшін Secrets пайдалану керек
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql # Тұрақты сақтау орнатылатын жол
volumeClaimTemplates:
- metadata:
name: mysql-persistent-storage # PVC шаблонының атауы
spec:
accessModes: [ "ReadWriteOnce" ] # Қол жеткізу режимі
resources:
requests:
storage: 10Gi # Сұралған сақтау көлемі