kubernetes StatefulSet

kubernetes StatefulSet

Kubernetes üzerinde uygulamalar dağıtırken genellikle Deploymentnesnesiyle çalışırız. Ancak bazı özel durumlarda, özellikle veri tutan (stateful) uygulamalarda, farklı bir kontrolör olan StatefulSet kullanmamız gerekir.

StatefulSet Nedir?

StatefulSet, Kubernetes’te her bir pod’un benzersiz ve kalıcı kimliğe sahip olması gereken durumlarda kullanılır. Özellikle veritabanları (PostgreSQL, MongoDB, Cassandra, vb.) gibi uygulamalar için idealdir.

StatefulSet Ne İşe Yarar?

• Pod’lara sabit isim verir. (örnek: db-0, db-1)

• Her pod’a kendine özel disk verir.

• Pod’lar sıra ile başlar ve sıra ile kapanır.

• Uygulama yeniden başlasa bile her pod aynı ismi ve diski kullanır.

Ne Zaman Lazım?

• Veritabanı gibi veri tutan uygulamalarda (örnek: PostgreSQL, MongoDB)

• Her pod’un kendine ait veri klasörü olması gerekiyorsa

• Pod sırası önemliyse

Kısacası:

Deployment → “hep aynı uygulama, veri önemli değil”

StatefulSet → “veri önemli, her pod özel”

MongoDB için StatefulSet örneğini yazıyorum, disk tarafında da NFS’i Docker üzerinden kurduğunu ve IP’sini oradan aldığını belirtiyorum:

🧠 Kubernetes’te MongoDB StatefulSet Örneği (NFS Üzerinden Diskli)

MongoDB gibi veri tutan uygulamalar için Kubernetes’te StatefulSetkullanmak şart. Çünkü her pod’un:

• Sabit bir isme (mongo-0, mongo-1 gibi),

• Sabit bir diske (PVC),

• Ve sıralı başlatma/durdurma düzenine ihtiyacı var.

💾 NFS Diski Docker’da Kuruldu

NFS sunucusunu Docker ile çalıştırdım:

docker run -d --name nfs-server --privileged \
-v /Users/ibrahim/Desktop/nfs-data:/nfsshare \
-e SHARED_DIRECTORY=/nfsshare \
-p 2049:2049 \
itsthenetwork/nfs-server-alpine:latest

✅ MongoDB StatefulSet YAML

apiVersion: v1
kind: Service
metadata:
name: mongo
spec:
clusterIP: None
selector:
app: mongo
ports:
- port: 27017
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongo-pv
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
nfs:
server: 10.0.0.73 # ← Docker içindeki NFS sunucu IP'si
path: /nfsshare
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mongo-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
volumeName: mongo-pv
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mongo
spec:
serviceName: mongo
replicas: 1
selector:
matchLabels:
app: mongo
template:
metadata:
labels:
app: mongo
spec:
containers:
- name: mongo
image: mongo:6.0
ports:
- containerPort: 27017
volumeMounts:
- name: mongo-storage
mountPath: /data/db
volumeClaimTemplates:
- metadata:
name: mongo-storage
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 5Gi

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Back To Top