Middle
Qaysi ilova uchun Deployment o'rniga StatefulSet ishlatish kerak va nima uchun?
sobes.tech AI
AIdan javob
StatefulSet niyati uchun foydalanilishi kerak bo'lgan ilovalar:
- Barqaror tarmoq identifikatsiyasi. Podlar
<statefulset-nomi>-<pod-indeksi>formatida noyob va doimiy hostname oladi. - Barqaror va doimiy saqlash. Har bir Pod replikasiga o'zining PersistentVolume tayinlanadi. Hatto Pod qayta ishga tushirilganda, uning ma'lumotlari unga bog'liq qoladi.
- Tartibli joylashtirish va kengaytirish. Podlar qat'iy belgilangan tartibda yaratiladi va o'chiriladi (yaratishda o'sish bo'yicha, o'chirishda kamayish bo'yicha).
- Tartibli yoki parallel yangilash. Bu bosqichma-bosqich (rolling update) yoki parallel (in-place yoki parallel) yangilashni qo'llab-quvvatlaydi, tartibni nazorat qilish imkoniyati bilan.
Bunday ilovalarga misollar:
- Ma'lumotlar bazalari (MySQL, PostgreSQL, MongoDB)
- Xabar brokerlari (Kafka, RabbitMQ)
- Kesh tizimlari (Redis, Memcached)
- Tarqalgan fayl tizimlari (masalan, Ceph, Kubernetesda ishga tushirilganda)
- Doimiy saqlash va barqaror identifikatsiya talab qiladigan har qanday ilova.
Deploymentdan farqli o'laroq, Podlar o'zaro o'zini o'rnini bosadigan va stateless bo'lsa-da, StatefulSet har bir replik uchun noyoblik va holatni ta'minlaydi, bu doimiy saqlash va barqaror tarmoq identifikatsiyasiga bog'liq ilovalar uchun muhimdir.
Eng oddiy StatefulSet misoli uchun bazaga:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
serviceName: "mysql" # Barqaror tarmoq identifikatsiyasi uchun zarur
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" # Ishlab chiqarishda Secrets ishlatiladi
volumeMounts:
- name: mysql-persistent-storage
mountPath: /var/lib/mysql # Doimiy saqlash joyi
volumeClaimTemplates:
- metadata:
name: mysql-persistent-storage # PVC shabloni nomi
spec:
accessModes: [ "ReadWriteOnce" ] # Kirish rejimi
resources:
requests:
storage: 10Gi # Talab qilingan saqlash hajmi