Sobes.tech
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:

  1. Barqaror tarmoq identifikatsiyasi. Podlar <statefulset-nomi>-<pod-indeksi> formatida noyob va doimiy hostname oladi.
  2. Barqaror va doimiy saqlash. Har bir Pod replikasiga o'zining PersistentVolume tayinlanadi. Hatto Pod qayta ishga tushirilganda, uning ma'lumotlari unga bog'liq qoladi.
  3. Tartibli joylashtirish va kengaytirish. Podlar qat'iy belgilangan tartibda yaratiladi va o'chiriladi (yaratishda o'sish bo'yicha, o'chirishda kamayish bo'yicha).
  4. 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