Sobes.tech
Middle

Hansı tətbiq üçün Deployment əvəzinə StatefulSet istifadə edilməlidir və niyə?

sobes.tech Süni İntellekt

AI-dan cavab

StatefulSet, aşağıdakı tətbiqlər üçün istifadə edilməlidir:

  1. Stabil şəbəkə identifikasiyası tələb edən tətbiqlər. Pod'lar <statefulset-ismi>-<pod-indeksi> formatında unikal və daimi hostname alır.
  2. Stabil və davamlı saxlama. Hər Pod replikasına öz PersistentVolume təyin edilir. Hətta Pod yenidən başladıldıqda, onun məlumatları ona bağlı qalır.
  3. Təşkil olunmuş yerləşdirmə və miqyaslandırma. Pod'lar dəqiq müəyyən olunmuş ardıcıllıqla yaradılır və silinir (artım üçün yuxarıdan aşağıya, silmək üçün aşağıdan yuxarıya).
  4. Təşkil olunmuş və ya paralel yeniləmə. Həm mərhələli (rolling update), həm də paralel (in-place və ya parallel) yeniləməni dəstəkləyir, ardıcıllıq üzərində nəzarətlə.

Belə tətbiqlərə nümunələr:

  • Verilənlər bazaları (MySQL, PostgreSQL, MongoDB)
  • Mesaj brokerləri (Kafka, RabbitMQ)
  • Keş sistemləri (Redis, Memcached)
  • Paylanmış fayl sistemləri (məsələn, Ceph, Kubernetes-də işlədiləndə)
  • Hər hansı bir tətbiq, hansı ki, vəziyyəti saxlamalı və daimi identifikasiya tələb edir.

Deployment-dən fərqli olaraq, Pod'lar bir-birinin yerini ala bilər və stateless olsa da, StatefulSet hər replik üçün unikal və vəziyyətin qorunmasını təmin edir, bu da davamlı saxlama və stabil şəbəkə identifikasiyası olan tətbiqlər üçün vacibdir.

Ən sadə StatefulSet nümunəsi üçün verilənlər bazası:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  serviceName: "mysql" # Stabil şəbəkə identifikasiyası üçün vacib
  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" # İstehsalda Secrets istifadə edin
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql # Davamlı saxlama üçün yol
  volumeClaimTemplates:
  - metadata:
      name: mysql-persistent-storage # PVC şablonunun adı
    spec:
      accessModes: [ "ReadWriteOnce" ] # Giriş rejimi
      resources:
        requests:
          storage: 10Gi # Tələb olunan saxlama həcmi