EKS ile StatefulSet Mimarileri: Veritabanlarını Kubernetes'te Çalıştırmak
EKS ile StatefulSet Mimarileri
Kubernetes ilk başta durumsuz (Stateless) uygulamalar için tasarlanmıştı ancak günümüzde veritabanları (PostgreSQL, MongoDB), mesaj kuyrukları (Kafka, RabbitMQ) gibi durumlu (Stateful) iş yüklerini de başarıyla yönetiyor. Amazon EKS üzerinde bu tür uygulamalar için StatefulSet kaynağı kullanılır.
Deployment vs StatefulSet
- Deployment: Podlar birbirinin aynısıdır, isimleri rastgeledir (
app-5f4b-xyz). Biri ölürse yerine yenisi gelir, kimlik önemli değildir. - StatefulSet: Podların benzersiz ve kalıcı bir kimliği vardır (
app-0,app-1). Sırayla başlarlar ve kapanırlar. Kalıcı diskleri (PVC) de pod ile eşleşir.
Depolama: EBS vs EFS vs Local NVMe
EKS üzerinde StatefulSet'ler için 3 ana depolama seçeneği vardır:
- Amazon EBS (gp3): En yaygın blok depolama. Yüksek performans. Dezavantaj: Tek bir AZ'ye bağlıdır. Pod başka AZ'ye taşınamaz.
- Amazon EFS: Dosya sistemi. Multi-AZ destekler (Pod her yerde çalışabilir). Dezavantaj: EBS'e göre biraz daha yavaştır (Latency).
- Local NVMe: EC2 instance üzerindeki fiziksel disk. En yüksek performans. Dezavantaj: Node ölürse veri kaybolur (Veri replikasyonunu uygulama yapmalıdır, örn: Cassandra, ElasticSearch).
Headless Service
StatefulSet ile birlikte genellikle bir Headless Service (ClusterIP: None) kullanılır. Bu servis, load balancing yapmaz; bunun yerine podların DNS adreslerini (örn: redis-0.redis.default.svc.cluster.local) doğrudan döner. Bu sayede veritabanı üyeleri (Master/Slave) birbirini tanır.
EKS üzerinde StatefulSet yönetmek, disk yedeklemesi (Snapshot) ve felaket kurtarma planlarıyla birlikte düşünülmelidir.