Kubernetes üzerinde uygulama güncellemeleri yaparken en büyük endişe, hizmetin kesintiye uğramadan yenilenmesini sağlamaktır. Bu noktada, Kubernetes’in sunduğu Rolling Update stratejisi devreye girer. Bu yöntem, yeni pod'ları aşamalı şekilde devreye alarak, eski pod'ları kademeli olarak kaldırır; böylece uygulama hiç durmadan güncellenebilir.
Rolling Update, temel olarak aşağıdaki prensiplere dayanır:
Paralel Güncellemeler: Uygulamanın belirli sayıda pod'u aynı anda güncellenir. Bu sayı, maxUnavailable ve maxSurge parametreleriyle kontrol edilir. Mesela, maxUnavailable=1 ve maxSurge=1 ayarlarıyla, güncelleme sırasında en az bir pod her zaman çalışır durumda kalır.
Adım Adım Güncelleme: Güncelleme işlemi, yeni sürümle uyumlu yeni pod'lar oluşturularak, eski pod'lar kademeli olarak kaldırılır. Bu süreç, otomatik veya manuel olarak başlatılabilir.
Hata Yönetimi ve Geri Alma: Eğer yeni pod'lar beklendiği gibi çalışmazsa, Kubernetes otomatik olarak geri alma veya durdurma işlemi gerçekleştirerek, sistemi stabil tutar.
Güvenli bir Rolling Update için dikkat edilmesi gerekenler:
- Liveness ve Readiness Probe: Pod'ların sağlığını düzenli kontrol eden probe'lar, yeni pod'un düzgün çalışmasını garanti eder.
- İzleme ve Loglama: Güncelleme sırasında loglar ve metriklerle sistem durumu sürekli izlenmelidir.
- Test Ortamında Denemeler: Canlıya almadan önce, staging ortamında detaylı testler yapılmalı.
Örnek bir deployment.yaml yapılandırması şu şekilde olabilir:
1234567891011121314151617181920212223242526272829303132333435363738394041
apiVersion: apps/v1
kind: Deployment
metadata:
name: ornek-uygulama
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
selector:
matchLabels:
app: ornek
template:
metadata:
labels:
app: ornek
spec:
containers:
[list]
[*]name: ornek-container
[/list]
image: ornek:son
ports:
[list]
[*]containerPort: 80
[/list]
readinessProbe:
httpGet:
path: /health
port: 80
initialDelaySeconds: 5
periodSeconds: 10
livenessProbe:
httpGet:
path: /health
port: 80
initialDelaySeconds: 15
periodSeconds: 20
Yukarıdaki yapılandırma, güncelleme sırasında minimum kesinti sağlamak için idealdir. Bu stratejiyle, uygulama yeni versiyonuna sorunsuz ve kesintisiz geçiş yapabilir. Sizler de bu yöntemi kullanarak, yüksek erişilebilirlik ve kullanıcı memnuniyetini sürdürebilirsiniz.
Sizlerin deneyimleri ve karşılaştığınız sorunlar neler? Kubernetes Rolling Update ile ilgili en kritik noktalar veya önerileriniz nelerdir?