Kubernetes Rolling Updates ile Zero Downtime Deployment

Codecode123
2 min readSep 20, 2020

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.

Rolling Update ile, uygulamalar kademeli olarak sıfır kesinti ile güncellenir.

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…

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

Codecode123
Codecode123

Written by Codecode123

Kubernetes,Rancher,Docker,Azure DevOps,Jenkins,Bamboo,Bitbucket, Git,SonarQube,JFrog,Powershell, .Net, JIRA-Confluence Administrator ,New Relic,Grafana

No responses yet