Sobes.tech
Middle

Hangi uygulama için Deployment yerine StatefulSet kullanılmalı ve neden?

sobes.tech yapay zeka

AI'dan gelen yanıt

StatefulSet, aşağıdaki durumlar için kullanılmalıdır:

  1. Stabil ağ tanımlaması gerektiren uygulamalar. Pod'lar, <statefulset-ismi>-<pod-indeksi> formatında benzersiz ve kalıcı bir ana bilgisayar adı alır.
  2. Stabil ve kalıcı depolama. Her Pod replikasına kendi PersistentVolume atanır. Pod yeniden başlatıldığında bile verileri ona bağlı kalır.
  3. Sıralı dağıtım ve ölçeklendirme. Pod'lar, kesinlikle tanımlanmış bir sırayla oluşturulur ve silinir (artışta oluşturma, azalmada silme).
  4. Sıralı veya paralel güncelleme. Hem kademeli (rolling update) hem de paralel (in-place veya parallel) güncellemeleri destekler, ancak sıralama kontrolü ile.

Bunlara örnek uygulamalar:

  • Veritabanları (MySQL, PostgreSQL, MongoDB)
  • Mesaj aracıları (Kafka, RabbitMQ)
  • Önbellek sistemleri (Redis, Memcached)
  • Dağıtık dosya sistemleri (örneğin, Ceph, Kubernetes'te çalıştırıldığında)
  • Durum saklaması gereken ve kalıcı tanımlama isteyen herhangi bir uygulama.

Deployment'tan farklı olarak, Pod'lar birbirinin yerine geçebilir ve stateless iken, StatefulSet her replik için benzersizlik ve durum garantisi sağlar, bu da kalıcı depolama ve stabil ağ tanımlamasına bağlı uygulamalar için kritiktir.

Bir veritabanı için en basit StatefulSet örneği:

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mysql
spec:
  selector:
    matchLabels:
      app: mysql
  serviceName: "mysql" # Pod'ların stabil ağ tanımlaması için gereklidir
  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" # Üretimde Secrets kullanılmalı
        volumeMounts:
        - name: mysql-persistent-storage
          mountPath: /var/lib/mysql # Kalıcı depolama yoludur
  volumeClaimTemplates:
  - metadata:
      name: mysql-persistent-storage # PVC şablonunun adı
    spec:
      accessModes: [ "ReadWriteOnce" ] # Erişim modu
      resources:
        requests:
          storage: 10Gi # Talep edilen depolama alanı