Kubernetes Rolling Updates ile Zero Downtime Deployment
Merhaba, bu makalemde sizlere kubernetes rolling update ile nasıl kesintisiz deploymentlar yapabileceğimizden bahsedeceğim.
Günümüzde firmalar uygulamalarının yeni versiyonlarını çok daha hızlı ve kesintisiz bir şekilde gün içerisinde bir kaç kez deploy etmek istemektedir.
Kubernetes ‘de bu bu güncellemeler rolling update ile yapılabilir.
Basit bir deployment manifestini inceleyelim
apiVersion: apps/v1
kind: Deployment
metadata:
name: your-app
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: your-app
deployment
template:
metadata:
labels:
app: your-app
spec:
containers:
- image: your-registry-link/your-app:1.0
imagePullPolicy: Always
name: your-app
ports:
- containerPort: 80
kubectl apply -f deployment.yaml komutu ile uygulamamızı deploy edebiliriz.
Daha sonra your-app:2.0 versiyonunu deploy edebilmek için yaml dosyamızı tekrar güncelleyip kubectl apply -f komutunu kullanarak tekrar dağıtmamız gerekecektir. Bu şekilde bir güncellemede eski podların sonlandırılmasından ve yenilerinin oluşturulmasından dolayı uygulamanızda kesintiler görülebilmektedir.
apiVersion: apps/v1
kind: Deployment
metadata:
name: your-app
namespace: default
spec:
replicas: 2
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 25%
selector:
matchLabels:
app: your-app
template:
metadata:
labels:
app: your-app
spec:
containers:
- image: your-registry-link/your-app:2.0
imagePullPolicy: Always
name: your-app
ports:
- containerPort: 80
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 5
successThreshold: 1
Zero Downtime deployment için yukarıda manifest yaml dosyamıza bazı argümanlar ekleyerek editledik gelin isterseniz bunların detaylarına bakalım.
Öncelikle strategy olarak RollingUpdate ibaresini ekledik. Bu argüman eski podları yenileriyle değiştirmektedir.
maxUnavailable : Geçerli replica sayısına göre durdurulabilecek pod sayısını bildirir. Değer bir sayı veya % olabilir (örn.%25). Default değeri % 25'tir.
maxSurge : Replica sayısına göre kaç ek pod sağlanabileceğini bildirir. Değer bir sayı veya % olabilir (örn.%25). Default değeri % 25'tir.
Readiness Probe : Oluşturulan yeni podların eski podları sonlandırmadan önce istekleri almaya hazır olduğuna karar veren yapıdır.
initialDelaySeconds : Kubernetes pod başlatıldıktan sonra, ilk olarak araştırmayı denemeden önce belirtilen saniye kadar bekleyecektir.
periodSeconds : Probun hangi aralıklarla gerçekleştirileceğini belirler. Default değer 10 sn. Min. değer 1'dir.
timeoutSeconds : Probun zaman aşımından sonraki saniye sayısıdır. Default değer 1 sn. Min. değer 1'dir.
successThreshold : Probun başarılı sayılması için minimum değer. Default değer 1 sn. Min. değer 1'dir.
Umarım faydalı olur şimdilik hoşça kalın…