Kesintisiz Dağıtımlar Neden Bu Kadar Önemli?
Modern yazılım geliştirme dünyasında, kullanıcı deneyimi her şeyden önemlidir. Bir uygulamanın yeni bir sürümünü canlıya alırken yaşanan kesintiler, müşteri kaybına, marka itibarının zedelenmesine ve dolayısıyla ciddi finansal zararlara yol açabilir. Özellikle rekabetin yoğun olduğu sektörlerde, kesintisiz hizmet sunmak adeta bir zorunluluk haline gelmiştir. Peki, bu zorluğun üstesinden nasıl gelinebilir? Geleneksel dağıtım yöntemleri genellikle hizmet kesintileriyle sonuçlanırken, Mavi-Yeşil dağıtım stratejileri bu soruna zarif bir çözüm sunar. Bu makalede, DigitalOcean Kubernetes (DOKS) üzerinde, Kubernetes Gateway API’nin gücünü kullanarak nasıl kesintisiz ve güvenli Mavi-Yeşil dağıtımlar gerçekleştirebileceğinizi adım adım keşfedeceğiz. Böylece, yeni özelliklerinizi hızla ve güvenle kullanıcılarınıza ulaştırırken, olası sorunlarda hızlıca geri dönebilme yeteneği kazanacaksınız.
Günümüzün çevik geliştirme döngülerinde, yazılım güncellemelerinin sıklığı giderek artmaktadır. Her güncelleme, beraberinde potansiyel riskleri de getirir. Bir yandan yeni özellikler sunmak ve hataları düzeltmek isterken, diğer yandan mevcut kullanıcıların kesintisiz bir deneyim yaşamasını sağlamak kritik bir dengedir. İşte tam da bu noktada, Mavi-Yeşil dağıtım stratejileri devreye girerek bu dengeyi kurmamıza yardımcı olur. Bu yaklaşım, üretim ortamında iki özdeş ortamın paralel olarak çalıştırılması prensibine dayanır: biri “mavi” (mevcut canlı sürüm), diğeri ise “yeşil” (yeni sürüm). Trafiği bu iki ortam arasında akıllıca yönlendirerek, kesinti yaşanmadan geçiş yapma imkanı sağlanır. Dijital dönüşümle birlikte, bulut tabanlı platformlar ve konteyner teknolojileri bu tür stratejilerin uygulanmasını çok daha kolay hale getirmiştir. DigitalOcean Kubernetes (DOKS) gibi yönetilen Kubernetes hizmetleri, altyapı karmaşıklığını azaltırken, Kubernetes Gateway API ise gelişmiş trafik yönetimi yetenekleri sunarak dağıtım süreçlerimizi bir üst seviyeye taşımaktadır. Bu makalede, teorik bilgileri pratik uygulamalarla birleştirerek, DOKS ve Gateway API kullanarak güvenilir bir Mavi-Yeşil dağıtım boru hattı oluşturmanın inceliklerini ele alacağız. Bu sayede, dağıtım risklerini minimize ederken, uygulamanızın sürekli erişilebilirliğini garanti altına alabileceksiniz.
Mavi-Yeşil Dağıtım, DOKS ve Gateway API Nedir?
Kesintisiz dağıtım stratejilerini anlamak için öncelikle temel taşları iyi kavramamız gerekiyor. Bu bölümde, Mavi-Yeşil dağıtımın ne anlama geldiğini, DigitalOcean Kubernetes (DOKS) platformunun neden tercih edilmesi gerektiğini ve Kubernetes’in yeni nesil trafik yönetim aracı olan Gateway API’nin sunduğu avantajları detaylı bir şekilde inceleyeceğiz. Bu kavramları anlamak, daha sonraki adımlarda uygulayacağımız pratik çözümlerin temelini oluşturacaktır.
Mavi-Yeşil Dağıtım Nasıl Çalışır?
Mavi-Yeşil dağıtım, bir uygulamanın yeni sürümünü canlıya alırken kesinti süresini sıfıra indirmeyi hedefleyen bir stratejidir. Bu modelde, üretim ortamında biri mevcut kararlı sürümü (mavi ortam) barındıran, diğeri ise yeni sürümü (yeşil ortam) içeren iki özdeş altyapı kümesi veya ortamı bulunur. Her iki ortam da aynı kaynaklara (veritabanları, depolama vb.) erişebilir, ancak kullanıcılara sadece “mavi” ortam hizmet verirken, “yeşil” ortam arka planda hazırlanır.
Dağıtım süreci şu adımları izler:
- Mevcut Sürüm (Mavi): Uygulamanızın mevcut, çalışan sürümü “mavi” ortamda aktif olarak hizmet vermektedir. Tüm kullanıcı trafiği bu ortama yönlendirilmiştir.
- Yeni Sürümün Hazırlanması (Yeşil): Uygulamanızın yeni sürümü, “yeşil” ortamda dağıtılır. Bu yeni ortam, mavi ortamla tamamen aynı altyapıya sahiptir ancak henüz canlı trafiği almamaktadır.
- Test ve Doğrulama: Yeşil ortamda yeni sürüm dağıtıldıktan sonra, kapsamlı testler yapılır. Bu testler, entegrasyon testleri, performans testleri ve kullanıcı kabul testlerini içerebilir. Amaç, yeni sürümün sorunsuz çalıştığından ve tüm gereksinimleri karşıladığından emin olmaktır.
- Trafik Geçişi: Yeni sürümün başarılı bir şekilde test edilmesinin ardından, trafik yönlendirme mekanizması (load balancer, API Gateway vb.) kullanılarak tüm kullanıcı trafiği anında veya kademeli olarak “mavi” ortamdan “yeşil” ortama geçirilir. Bu geçiş, genellikle birkaç saniye içinde tamamlanır ve kullanıcılar için fark edilmez bir deneyim sunar.
- Mavi Ortamın Korunması: Trafik yeşil ortama yönlendirildikten sonra, mavi ortam hemen kapatılmaz. Bir süre daha yedek olarak tutulur. Eğer yeşil ortamda beklenmedik bir sorun ortaya çıkarsa, trafik hızla tekrar mavi ortama yönlendirilebilir (rollback). Bu, hızlı bir geri alma mekanizması sağlar ve olası felaket senaryolarına karşı bir güvenlik ağı oluşturur.
- Mavi Ortamın Güncellenmesi/Kapatılması: Yeşil ortamın sorunsuz çalıştığından emin olunduktan sonra, mavi ortam ya bir sonraki dağıtım için “yeşil” ortam olarak güncellenir ya da kaynak tüketimini azaltmak için kapatılır.
Bu stratejinin en büyük avantajları arasında sıfır kesinti süresi, hızlı geri alma yeteneği ve üretim ortamında güvenli test imkanı bulunur. Ancak, iki özdeş ortamın yönetilmesi nedeniyle altyapı maliyetlerinin artması ve veritabanı şema değişiklikleri gibi durumların dikkatli yönetilmesi gibi bazı zorlukları da vardır.
DigitalOcean Kubernetes (DOKS) Neden Tercih Edilmeli?
Kubernetes, konteynerli uygulamaları yönetmek için endüstri standardı haline gelmiş güçlü bir platformdur. Ancak, Kubernetes kümesi kurmak ve yönetmek, özellikle küçük ve orta ölçekli ekipler için karmaşık ve zaman alıcı olabilir. İşte bu noktada DigitalOcean Kubernetes (DOKS) gibi yönetilen Kubernetes hizmetleri devreye girer.
DOKS, DigitalOcean’ın sunduğu tam yönetilen bir Kubernetes hizmetidir. Bu, ana düğümlerin (master nodes) ve kontrol düzleminin (control plane) DigitalOcean tarafından yönetildiği anlamına gelir, böylece siz sadece iş yüklerinizi dağıtmaya ve uygulamalarınıza odaklanabilirsiniz. DOKS’u tercih etmek için birçok geçerli neden bulunmaktadır:
- Kolay Kurulum ve Yönetim: DOKS, birkaç tıklama veya basit bir CLI komutu ile Kubernetes kümesi oluşturmanıza olanak tanır. Küme yükseltmeleri, güvenlik yamaları ve altyapı yönetimi DigitalOcean tarafından üstlenilir, bu da operasyonel yükü önemli ölçüde azaltır.
- Maliyet Etkinliği: DigitalOcean, diğer bulut sağlayıcılarına göre daha uygun fiyatlı Droplet’ler (sanal makineler) sunar. DOKS ile sadece kullandığınız kaynaklar için ödeme yaparsınız, bu da özellikle başlangıç aşamasındaki projeler ve bütçe dostu çözümler arayanlar için cazip hale gelir.
- Entegrasyonlar: DigitalOcean ekosistemi içinde, yük dengeleyiciler (Load Balancers), blok depolama (Block Storage), veritabanları (Managed Databases) ve izleme araçları (Monitoring) gibi hizmetlerle sorunsuz entegrasyon sağlar. Bu, uygulamanız için eksiksiz bir altyapı oluşturmayı kolaylaştırır.
- Ölçeklenebilirlik: Uygulamanızın ihtiyaçlarına göre düğüm havuzlarını kolayca ölçeklendirebilirsiniz. DOKS, otomatik ölçeklendirme seçenekleri de sunarak trafiğin yoğun olduğu zamanlarda kaynakları otomatik olarak artırıp azaltabilir.
- Geliştirici Dostu: DigitalOcean, basit ve anlaşılır arayüzleri, kapsamlı dokümantasyonu ve güçlü API’si ile geliştiriciler için kullanımı kolay bir platform sunar.
Kısacası, DOKS, Kubernetes’in gücünden faydalanmak isteyen ancak altyapı yönetimi karmaşıklığıyla uğraşmak istemeyen geliştiriciler ve ekipler için ideal bir çözümdür. Mavi-Yeşil dağıtım gibi karmaşık stratejileri uygularken, yönetilen bir hizmet kullanmak, dağıtım sürecine odaklanmanızı ve altyapı sorunlarıyla daha az vakit kaybetmenizi sağlar.
Kubernetes Gateway API Ne İşe Yarar?
Kubernetes ekosisteminde harici trafiği küme içindeki hizmetlere yönlendirmek için uzun süredir Ingress API kullanılıyordu. Ancak Ingress, zamanla ortaya çıkan karmaşık trafik yönetimi senaryoları ve farklı kullanım durumları için yetersiz kalmaya başlamıştır. İşte bu noktada, Kubernetes Gateway API, Ingress’in eksikliklerini gidermek ve daha esnek, genişletilebilir bir trafik yönetimi çözümü sunmak üzere tasarlanmıştır.
Gateway API, temel olarak üç ana kaynak etrafında döner:
- GatewayClass: Bu kaynak, bir Gateway uygulamasının (örneğin, NGINX, Istio, Envoy gibi bir proxy) yeteneklerini ve yapılandırma şablonunu tanımlar. Küme yöneticileri tarafından oluşturulur.
- Gateway: Bu kaynak, bir veya daha fazla ağ dinleyicisini (listener) ve bu dinleyicilerin hangi ağ adreslerinde (IP adresi, port) trafik kabul edeceğini belirtir. Aynı zamanda, hangi HTTPRoute’ların bu Gateway’e bağlanabileceğini de kontrol eder. Temel olarak, trafik giriş noktasını temsil eder.
- HTTPRoute (veya diğer Route türleri): Bu kaynak, belirli bir alan adı (domain) veya yol (path) için trafiğin nasıl yönlendirileceğini, hangi servislere gönderileceğini ve gelişmiş özelliklerin (yüzde tabanlı trafik bölme, başlık manipülasyonu, yeniden yönlendirme vb.) nasıl uygulanacağını tanımlar. Uygulama geliştiricileri ve ekip üyeleri tarafından yönetilir.
Gateway API’nin Ingress’e göre sunduğu başlıca avantajlar şunlardır:
- Rol Tabanlı Mimari: Küme yöneticileri (GatewayClass, Gateway) ve uygulama geliştiricileri (HTTPRoute) arasındaki sorumlulukları net bir şekilde ayırır. Bu, büyük organizasyonlarda daha iyi bir yönetim ve güvenlik sağlar.
- Gelişmiş Trafik Yönetimi: Yüzde tabanlı trafik bölme (weight-based routing), başlık veya sorgu parametrelerine göre yönlendirme, yeniden yazma ve yeniden yönlendirme gibi gelişmiş özellikler doğrudan API’de yer alır. Bu özellikler, Mavi-Yeşil ve Canary dağıtımlar için hayati öneme sahiptir.
- Genişletilebilirlik: Gateway API, özel eklentiler ve uzantılarla kolayca genişletilebilir. Bu, belirli bir proxy’nin veya altyapının benzersiz yeteneklerinden tam olarak faydalanmanızı sağlar.
- Taşınabilirlik: Farklı Gateway uygulamaları arasında daha tutarlı bir yapılandırma deneyimi sunar, bu da sağlayıcılar arasında geçiş yapmayı kolaylaştırır.
Mavi-Yeşil dağıtım bağlamında, Gateway API’nin yüzde tabanlı trafik bölme yeteneği (weight alanı) kritik bir rol oynar. Bu sayede, trafiği mavi ortamdan yeşil ortama kademeli olarak geçirebilir veya bir sorun durumunda hızla geri alabiliriz. Bu esneklik, kesintisiz dağıtım stratejilerinin temelini oluşturur.
DOKS Üzerinde Mavi-Yeşil Ortamın Kurulumu: Altyapımızı Nasıl Hazırlarız?
Mavi-Yeşil dağıtım stratejisini DOKS üzerinde uygulamak için öncelikle temel altyapımızı kurmamız ve yapılandırmamız gerekiyor. Bu bölümde, bir DOKS kümesi oluşturmaktan, Gateway API kontrolörünü kümemize dağıtmaya ve son olarak mavi ile yeşil ortamlarımızı temsil edecek uygulama sürümlerini hazırlamaya kadar adım adım ilerleyeceğiz. Bu adımlar, dağıtım sürecinin sorunsuz işlemesi için sağlam bir temel oluşturacaktır.
DOKS Kümesi Oluşturma ve Yapılandırma
DOKS kümesi oluşturmak, DigitalOcean kontrol panelinden veya doctl CLI aracıyla oldukça basittir. Genellikle birkaç dakika içinde çalışan bir Kubernetes kümesine sahip olabilirsiniz. İşte temel adımlar:
- DigitalOcean Hesabı Oluşturma: Henüz bir hesabınız yoksa, DigitalOcean web sitesi üzerinden bir hesap oluşturun.
- Kubernetes Kümesi Oluşturma: DigitalOcean kontrol paneline giriş yapın. Sol menüden “Kubernetes” seçeneğine tıklayın, ardından “Create a Kubernetes Cluster” düğmesine basın.
- Bölge Seçimi: Uygulamanızın kullanıcılarına en yakın bölgeyi seçin (örneğin, Frankfurt, New York).
- Kubernetes Sürümü: En son kararlı sürümü seçmeniz önerilir.
- Düğüm Havuzu (Node Pool) Yapılandırması: Uygulamanızın ihtiyaçlarına göre Droplet boyutunu ve düğüm sayısını belirleyin. Mavi-Yeşil dağıtım için en az iki ortamı barındırabilecek yeterli kaynağa sahip olmanız önemlidir. Başlangıç için 3 adet 2vCPU / 4GB RAM Droplet yeterli olabilir.
- Küme Adı: Kümenize açıklayıcı bir ad verin (örneğin,
blue-green-doks-cluster).
- Küme Kimlik Bilgilerini İndirme: Küme oluşturulduktan sonra,
kubeconfigdosyasını indirmeniz gerekecektir. Bu dosya,kubectlaracının kümenizle iletişim kurmasını sağlar.doctl kubernetes cluster kubeconfig save [küme-adı]komutu ile de bu işlemi yapabilirsiniz. - kubectl Yapılandırması: İndirdiğiniz
kubeconfigdosyasını genellikle~/.kube/configdizinine yerleştirin veyaKUBECONFIGortam değişkenini ayarlayarakkubectl‘in doğru kümeyi hedeflemesini sağlayın.
Artık çalışan bir DOKS kümesine sahipsiniz. Kümenizin hazır olup olmadığını kontrol etmek için aşağıdaki komutu kullanabilirsiniz:
kubectl get nodes
Bu komut, kümenizdeki tüm düğümleri listelemelidir.
Gateway API Kurulumu ve Temel Bileşenleri
Kubernetes Gateway API, Ingress gibi varsayılan olarak bir kontrolörle gelmez. Bir Gateway API uygulayıcısını (controller) kümenize dağıtmanız gerekir. Bu örnekte, popüler ve hafif bir seçenek olan NGINX Gateway Fabric’i kullanacağız. Diğer seçenekler arasında Istio, Contour, Envoy Gateway gibi projeler de bulunmaktadır.
NGINX Gateway Fabric’i kurmak için aşağıdaki adımları izleyebilirsiniz:
- Gateway API CRD’lerini Kurma: Öncelikle, Gateway API’nin özel kaynak tanımlarını (Custom Resource Definitions – CRD’ler) kümenize kurmanız gerekir. Bu, Gateway API kaynaklarını kullanabilmenizi sağlar.
kubectl apply -f https://github.com/kubernetes-sigs/gateway-api/releases/download/v1.0.0/standard-install.yaml
Bu komut, Gateway API’nin temel CRD’lerini kuracaktır. Sürüm numarasını en güncel olanla değiştirmeyi unutmayın.
- NGINX Gateway Fabric Kontrolörünü Kurma: Şimdi NGINX Gateway Fabric kontrolörünü dağıtabiliriz. Bu kontrolör, Gateway ve HTTPRoute kaynaklarını izleyecek ve NGINX proxy’sini yapılandıracaktır.
kubectl apply -f https://raw.githubusercontent.com/nginxinc/nginx-gateway-fabric/v1.0.0/deploy/manifests/full.yaml
Yine, sürüm numarasını kontrolörün en güncel sürümüyle güncelleyin. Bu komut, nginx-gateway adlı bir namespace oluşturacak ve kontrolörü oraya dağıtacaktır. Kontrolörün çalıştığını doğrulamak için:
kubectl get pods -n nginx-gateway
Pod’ların “Running” durumunda olması gerekir.
Kontrolör kurulduktan sonra, bir GatewayClass kaynağı otomatik olarak oluşturulur. Bu, NGINX Gateway Fabric’in Gateway API’yi nasıl uygulayacağını tanımlar:
kubectl get gatewayclass
Çıktıda nginx adında bir GatewayClass görmelisiniz.
Mavi ve Yeşil Ortamların Dağıtımı
Mavi-Yeşil dağıtım için, aynı uygulamanın iki farklı sürümünü temsil eden iki ayrı Deployment ve Service oluşturmamız gerekiyor. Bu örnekte, basit bir web uygulamasını kullanacağız ve sürüm bilgisini göstereceğiz.
Öncelikle, “mavi” ortam için Deployment ve Service tanımlayalım. Bu, uygulamanızın mevcut canlı sürümünü temsil edecek:
# app-blue.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-blue
labels:
app: my-app
version: blue
spec:
replicas: 3
selector:
matchLabels:
app: my-app
version: blue
template:
metadata:
labels:
app: my-app
version: blue
spec:
containers:
- name: my-app
image: nginxdemos/hello:plain-text # Örnek bir uygulama imajı
ports:
- containerPort: 80
env:
- name: MESSAGE
value: "Merhaba! Bu Mavi (v1) ortam."
---
apiVersion: v1
kind: Service
metadata:
name: my-app-blue-service
labels:
app: my-app
version: blue
spec:
selector:
app: my-app
version: blue
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP
Bu YAML dosyasını app-blue.yaml olarak kaydedin ve kümenize uygulayın:
kubectl apply -f app-blue.yaml
Şimdi de “yeşil” ortam için Deployment ve Service tanımlayalım. Bu, uygulamanızın yeni sürümünü temsil edecek:
# app-green.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-green
labels:
app: my-app
version: green
spec:
replicas: 3
selector:
matchLabels:
app: my-app
version: green
template:
metadata:
labels:
app: my-app
version: green
spec:
containers:
- name: my-app
image: nginxdemos/hello:plain-text # Aynı imajı kullanıyoruz, sadece mesaj farklı
ports:
- containerPort: 80
env:
- name: MESSAGE
value: "Merhaba! Bu Yeşil (v2) ortam. Yeni özellikler burada!"
---
apiVersion: v1
kind: Service
metadata:
name: my-app-green-service
labels:
app: my-app
version: green
spec:
selector:
app: my-app
version: green
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP
Bu YAML dosyasını app-green.yaml olarak kaydedin ve kümenize uygulayın:
kubectl apply -f app-green.yaml
Bu adımlarla, DOKS kümenizde Gateway API kontrolörünü kurmuş ve uygulamanızın mavi (v1) ve yeşil (v2) sürümlerini bağımsız servisler olarak dağıtmış oldunuz. Artık trafiği bu iki ortam arasında yönlendirmeye hazırız.
my-app:v1.0 ve my-app:v2.0) kullanmak, hangi sürümün hangi ortamda çalıştığını daha net takip etmenizi sağlar. Bu, özellikle karmaşık CI/CD boru hatlarında hata ayıklama sürecini kolaylaştırır.
Gateway API ile Trafik Yönetimi ve Dağıtım Stratejileri: Kesintisiz Geçişleri Nasıl Sağlarız?
Altyapımızı hazırlayıp mavi ve yeşil ortamlarımızı dağıttıktan sonra, sıra geldi Gateway API’nin gücünü kullanarak trafiği bu ortamlar arasında nasıl yöneteceğimize. Bu bölüm, Gateway API ile basit bir Mavi-Yeşil geçişin nasıl yapılandırılacağını ve daha gelişmiş bir strateji olan aşamalı geçişin (Canary dağıtım) nasıl uygulanabileceğini adım adım açıklayacaktır. Bu stratejiler, uygulamalarınızın kesintisiz ve güvenli bir şekilde güncellenmesini sağlar.
Basit Mavi-Yeşil Geçiş Uygulaması
Mavi-Yeşil dağıtımın temel prensibi, tüm trafiği bir anda eski sürümden yeni sürüme geçirmektir. Gateway API, Gateway ve HTTPRoute kaynakları aracılığıyla bu geçişi kolayca yönetmemizi sağlar.
Öncelikle, trafiği dış dünyaya açacak bir Gateway kaynağı tanımlamamız gerekiyor. Bu Gateway, DigitalOcean Load Balancer ile entegre olacak ve dışarıdan gelen istekleri alacaktır.
# my-gateway.yaml
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
name: my-app-gateway
spec:
gatewayClassName: nginx # NGINX Gateway Fabric'in sağladığı GatewayClass
listeners:
- name: http
protocol: HTTP
port: 80
allowedRoutes:
namespaces:
from: Same
Bu YAML dosyasını my-gateway.yaml olarak kaydedin ve kümenize uygulayın:
kubectl apply -f my-gateway.yaml
Gateway kaynağı dağıtıldıktan sonra, NGINX Gateway Fabric kontrolörü otomatik olarak bir DigitalOcean Load Balancer oluşturacak ve bu Load Balancer’ın dış IP adresini Gateway durumunda gösterecektir. Bu IP adresini almak için:
kubectl get gateway my-app-gateway
ADDRESS sütunundaki IP adresini not alın. Bu, uygulamanıza erişeceğiniz IP adresidir.
Şimdi, başlangıçta tüm trafiği “mavi” ortama yönlendirecek bir HTTPRoute tanımlayalım:
# httproute-blue.yaml
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: my-app-route
spec:
parentRefs:
- name: my-app-gateway
hostnames:
- "my-app.example.com" # Kendi alan adınızı buraya yazın veya test için kullanmayın
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: my-app-blue-service
port: 80
weight: 100 # Tüm trafiği mavi servise yönlendir
Bu YAML dosyasını httproute-blue.yaml olarak kaydedin ve kümenize uygulayın:
kubectl apply -f httproute-blue.yaml
Artık, my-app.example.com adresine (veya Gateway’in dış IP adresine) gelen tüm istekler my-app-blue-service‘e yönlendirilecektir. Tarayıcınızdan veya curl ile eriştiğinizde “Merhaba! Bu Mavi (v1) ortam.” mesajını görmelisiniz.
Uygulamanızın yeni sürümünü (yeşil) dağıttığınızı ve test ettiğinizi varsayalım. Şimdi tüm trafiği “mavi”den “yeşil” ortama geçirme zamanı geldi. Bunun için tek yapmanız gereken, HTTPRoute kaynağını güncellemektir. backendRefs bölümündeki name alanını my-app-green-service olarak değiştireceğiz:
# httproute-green.yaml (Güncellenmiş HTTPRoute)
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: my-app-route
spec:
parentRefs:
- name: my-app-gateway
hostnames:
- "my-app.example.com"
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: my-app-green-service
port: 80
weight: 100 # Tüm trafiği yeşil servise yönlendir
Bu güncellenmiş YAML dosyasını (aynı httproute-blue.yaml dosyasını düzenleyip kaydedebilirsiniz) kümenize uygulayın:
kubectl apply -f httproute-green.yaml
Gateway API kontrolörü, HTTPRoute‘daki değişikliği algılayacak ve NGINX proxy yapılandırmasını anında güncelleyecektir. Artık uygulamanıza eriştiğinizde “Merhaba! Bu Yeşil (v2) ortam. Yeni özellikler burada!” mesajını görmelisiniz. Bu geçiş, kullanıcılar için tamamen kesintisiz gerçekleşir.
Herhangi bir sorun yaşanması durumunda, aynı yöntemle HTTPRoute‘u tekrar my-app-blue-service‘e yönlendirerek hızlı bir geri alma (rollback) işlemi yapabilirsiniz. Bu, Mavi-Yeşil dağıtımın en güçlü yanlarından biridir.
Aşamalı Geçiş (Canary) ile Riskleri Azaltma
Mavi-Yeşil dağıtım hızlı bir geçiş sağlarken, bazen yeni sürümün küçük bir kullanıcı grubuna sunulması ve performansının veya hatalarının gözlemlenmesi istenebilir. Bu, Canary dağıtım stratejisidir. Gateway API, weight alanını kullanarak bu tür aşamalı geçişleri de kolayca yapmanızı sağlar.
Canary dağıtım için HTTPRoute‘u şu şekilde güncelleyebiliriz. Bu örnekte, trafiğin %90’ı mavi ortama, %10’u ise yeşil ortama yönlendirilecektir:
# httproute-canary.yaml
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: my-app-route
spec:
parentRefs:
- name: my-app-gateway
hostnames:
- "my-app.example.com"
rules:
- matches:
- path:
type: PathPrefix
value: /
backendRefs:
- name: my-app-blue-service
port: 80
weight: 90 # %90 trafik mavi servise
- name: my-app-green-service
port: 80
weight: 10 # %10 trafik yeşil servise
Bu YAML dosyasını uyguladığınızda, DigitalOcean Load Balancer üzerinden gelen isteklerin %90’ı eski sürüme, %10’u ise yeni sürüme gidecektir. Bu sayede, yeni sürümün gerçek dünya koşullarındaki davranışını gözlemleyebilir, herhangi bir sorun durumunda hızlıca geri dönerek sadece küçük bir kullanıcı grubunu etkileyebilirsiniz.
kubectl apply -f httproute-canary.yaml
Bu strateji, özellikle kritik uygulamalar ve büyük kullanıcı tabanına sahip sistemler için risk yönetimini önemli ölçüde artırır. Gateway API’nin esnekliği sayesinde, bu tür gelişmiş dağıtım desenlerini DOKS üzerinde kolayca uygulayabilirsiniz.
Vaka Analizi: E-ticaret Uygulaması Güncellemesi
Teorik bilgileri ve teknik adımları öğrendik. Şimdi bu bilgileri gerçek dünya bir senaryo üzerinde nasıl uygulayabileceğimizi bir vaka analizi ile pekiştirelim. Büyük bir e-ticaret platformunun, Black Friday gibi yoğun bir alışveriş döneminden önce yeni bir ödeme ağ geçidi entegrasyonu ve kullanıcı arayüzü iyileştirmeleri içeren büyük bir güncelleme yapması gerektiğini hayal edelim. Bu tür bir güncelleme, en ufak bir kesintinin bile milyonlarca dolarlık kayba yol açabileceği anlamına gelir. Bu senaryoda Mavi-Yeşil dağıtım ve Gateway API nasıl bir kurtarıcı rol oynayabilir?
Senaryo: Black Friday Öncesi Kritik Güncelleme
Uygulama: E-ticaret platformu (shop-app)
Mevcut Durum (Mavi Ortam):
shop-app-v1(Deployment ve Service) aktif olarak hizmet veriyor.- Tüm kullanıcı trafiği (
shop.example.com) bu ortama yönlendirilmiş durumda. - Mevcut ödeme sistemi sorunsuz çalışıyor.
Yeni Sürüm (Yeşil Ortam):
- Yeni ödeme ağ geçidi entegrasyonu.
- Yenilenmiş ürün listeleme sayfası (UI iyileştirmeleri).
- Performans optimizasyonları.
- Bu sürüm
shop-app-v2olarak etiketlenmiş.
Uygulama Adımları ve Gateway API Kullanımı
- Yeşil Ortamın Dağıtımı:
Geliştirme ekibi,
shop-app-v2‘yi içeren konteyner imajını oluşturur ve DOKS kümesinde ayrı bir Deployment (shop-app-green) ve Service (shop-app-green-service) olarak dağıtır. Bu ortam, henüz canlı trafiği almaz.# shop-app-green.yaml apiVersion: apps/v1 kind: Deployment metadata: name: shop-app-green labels: app: shop-app version: v2 spec: replicas: 5 selector: matchLabels: app: shop-app version: v2 template: metadata: labels: app: shop-app version: v2 spec: containers: - name: shop-app image: your-registry/shop-app:v2.0 # Yeni sürüm imajı ports: - containerPort: 8080 --- apiVersion: v1 kind: Service metadata: name: shop-app-green-service labels: app: shop-app version: v2 spec: selector: app: shop-app version: v2 ports: - protocol: TCP port: 80 targetPort: 8080 type: ClusterIPkubectl apply -f shop-app-green.yaml - Kapsamlı Testler:
Dağıtım ekibi ve QA, yeşil ortamın iç URL’leri veya geçici bir
HTTPRouteüzerinden erişim sağlayarak yeni sürümü kapsamlı bir şekilde test eder. Bu testler şunları içerir:- Yeni ödeme ağ geçidi ile gerçek işlem akışları.
- Yenilenmiş UI’ın farklı cihazlarda ve tarayıcılarda doğru görüntülenmesi.
- Performans ve yük testleri (yoğun dönem simülasyonu).
- Mevcut veritabanı ile uyumluluk.
Tüm testler başarıyla geçtikten sonra, yeni sürümün canlıya alınmaya hazır olduğuna karar verilir.
- Trafik Geçişi (Gateway API ile):
Canlıya alma anı geldiğinde, mevcut
HTTPRoutekaynağı güncellenir.backendRefsbölümündeki referans,shop-app-blue-service‘tenshop-app-green-service‘e yönlendirilir veweightdeğeri 100 olarak ayarlanır.# shop-app-route-to-green.yaml apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: shop-app-route spec: parentRefs: - name: my-app-gateway # Daha önce oluşturduğumuz Gateway hostnames: - "shop.example.com" rules: - matches: - path: type: PathPrefix value: / backendRefs: - name: shop-app-green-service # Yeni sürüm servisine yönlendir port: 80 weight: 100kubectl apply -f shop-app-route-to-green.yamlBu komut çalıştırıldıktan sonra, Gateway API kontrolörü saniyeler içinde NGINX yapılandırmasını günceller ve tüm yeni istekler
shop-app-green-service‘e yönlendirilir. Kullanıcılar, sayfayı yenilediklerinde veya yeni bir oturum başlattıklarında yeni UI’ı ve ödeme sistemini görmeye başlarlar, herhangi bir kesinti yaşanmaz. - İzleme ve Geri Alma (Rollback):
Trafik geçişi yapıldıktan sonra, operasyon ekibi, yeni sürümün performansını ve hata oranlarını yakından izler. Prometheus ve Grafana gibi araçlar kullanılarak CPU kullanımı, bellek tüketimi, HTTP hata kodları ve ödeme işlem başarı oranları sürekli kontrol edilir.
Eğer beklenmedik bir sorun (örneğin, yeni ödeme sisteminde hata oranlarında ani bir artış) tespit edilirse, trafik anında eski mavi ortama geri yönlendirilir. Bunun için tek yapılması gereken,
HTTPRoute‘u tekrarshop-app-blue-service‘e yönlendirecek şekilde güncellemektir:# shop-app-route-to-blue-rollback.yaml apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: shop-app-route spec: parentRefs: - name: my-app-gateway hostnames: - "shop.example.com" rules: - matches: - path: type: PathPrefix value: / backendRefs: - name: shop-app-blue-service # Eski sürüm servisine geri yönlendir port: 80 weight: 100kubectl apply -f shop-app-route-to-blue-rollback.yamlBu sayede, Black Friday gibi kritik bir dönemde bile e-ticaret platformu kesintisiz hizmet vermeye devam eder, olası sorunların etkisi minimumda tutulur.
- Mavi Ortamın Temizlenmesi/Güncellenmesi:
Yeşil ortamın uzun süre sorunsuz çalıştığından emin olunduktan sonra, eski mavi ortamın kaynakları serbest bırakılabilir veya bir sonraki dağıtım için güncellenebilir.
Bu vaka analizi, DOKS ve Gateway API’nin Mavi-Yeşil dağıtım stratejisiyle nasıl birleşerek kritik iş yükleri için kesintisiz ve güvenli güncellemeler sağladığını net bir şekilde göstermektedir. Özellikle yoğun dönemlerde veya yüksek riskli değişikliklerde bu yöntem, işletmeler için hayati öneme sahiptir.
İleri Düzey İpuçları ve En İyi Uygulamalar: Performansı ve Güvenliği Nasıl Artırırız?
Mavi-Yeşil dağıtım stratejisini DOKS üzerinde Gateway API ile başarıyla uyguladınız. Ancak, bu süreci daha da sağlam, güvenli ve verimli hale getirmek için bazı ileri düzey ipuçları ve en iyi uygulamalar bulunmaktadır. Bu bölümde, dağıtım boru hattınızı otomatikleştirmek, sisteminizi izlemek, güvenlik önlemlerini artırmak ve test stratejilerinizi geliştirmek için neler yapabileceğinizi keşfedeceğiz.
Otomatik Geri Alma (Rollback) Mekanizmaları
Mavi-Yeşil dağıtımın en büyük avantajlarından biri hızlı geri alma yeteneğidir. Ancak, bu geri alma işlemini manuel olarak yapmak, özellikle acil durumlarda zaman kaybına ve insan hatasına yol açabilir. Bu nedenle, otomatik geri alma mekanizmaları kurmak hayati önem taşır.
- CI/CD Entegrasyonu: Dağıtım boru hattınızı (örneğin, Jenkins, GitLab CI/CD, GitHub Actions) izleme araçlarınızla entegre edin. Eğer yeni dağıtılan (yeşil) ortamda belirli bir hata oranı eşiği aşılırsa veya performans düşüşü yaşanırsa, CI/CD boru hattı otomatik olarak
HTTPRoute‘u eski (mavi) ortama geri yönlendirecek bir komut tetikleyebilir. - Sağlık Kontrolleri (Health Checks): Kubernetes
Deployment‘larınızdalivenessProbevereadinessProbetanımlamalarını doğru bir şekilde yapın. Gateway API, varsayılan olarak bu sağlık kontrollerini dikkate alarak sadece sağlıklı pod’lara trafik yönlendirecektir. Ancak, uygulamanızın daha derinlemesine sağlık durumunu kontrol eden özel uç noktalar (endpoint) oluşturmak, otomatik geri alma kararlarını daha güvenilir hale getirebilir. - Webhook’lar ve Alerting: Prometheus Alertmanager gibi araçlarla entegrasyon kurarak, kritik metriklerdeki sapmalar için uyarılar oluşturun. Bu uyarılar, bir webhook aracılığıyla CI/CD sisteminizi tetikleyerek otomatik geri alma sürecini başlatabilir.
İzleme ve Gözetim (Monitoring)
Herhangi bir üretim sisteminin vazgeçilmez bir parçası olan izleme ve gözetim, Mavi-Yeşil dağıtımlarda daha da kritik hale gelir. Yeni sürümün davranışını yakından izlemek, olası sorunları hızla tespit etmenizi ve proaktif adımlar atmanızı sağlar.
- Prometheus ve Grafana: DOKS kümenize Prometheus’u (metrik toplama) ve Grafana’yı (görselleştirme) kurarak uygulamanızın ve altyapınızın tüm katmanlarından metrikleri toplayın.
- Uygulama Metrikleri: HTTP istek sayısı, hata oranları (4xx, 5xx), gecikme süreleri, CPU/bellek kullanımı gibi metrikleri izleyin.
- Gateway API Metrikleri: NGINX Gateway Fabric gibi kontrolörler, genellikle kendi metriklerini sunar. Bu metrikler, trafik yönlendirme durumunu, backend servislerinin sağlık durumunu ve geçiş oranlarını anlamak için değerli bilgiler sağlar.
- Merkezi Loglama: Elasticsearch, Fluentd, Kibana (EFK) veya Loki, Promtail, Grafana (LPG) yığınları gibi merkezi loglama çözümleri kullanarak uygulamanızın ve Kubernetes bileşenlerinin loglarını toplayın. Loglar, sorun giderme ve hata ayıklama süreçlerinde kritik öneme sahiptir.
- Distributed Tracing: Jaeger veya Zipkin gibi dağıtık izleme araçları kullanarak isteklerin uygulamanızın farklı servisleri arasında nasıl hareket ettiğini görselleştirin. Bu, özellikle mikroservis mimarilerinde performans darboğazlarını ve hata kaynaklarını bulmak için çok etkilidir.
Güvenlik Katmanları
Uygulamalarınızın güvenliği, dağıtım stratejinizden bağımsız olarak her zaman öncelikli olmalıdır. Gateway API ve DOKS, güvenlik önlemlerini entegre etmek için çeşitli yollar sunar.
- TLS Sonlandırma: Gateway API, TLS sertifikalarını yönetmek ve HTTPS trafiğini sonlandırmak için yerleşik destek sunar. Let’s Encrypt ile otomatik sertifika yönetimi için
cert-managergibi araçları kullanabilirsiniz. Gateway tanımınızdatlsbölümünü yapılandırarak HTTPS’i etkinleştirin. - Yetkilendirme ve Kimlik Doğrulama: Gateway API’nin yetenekleri sayesinde, belirli yollara veya ana bilgisayarlara erişimi kısıtlamak için yetkilendirme politikaları uygulayabilirsiniz. OAuth2/OIDC entegrasyonu için harici kimlik doğrulama sağlayıcılarını Gateway’in önüne entegre edebilirsiniz.
- Web Uygulama Güvenlik Duvarı (WAF): DigitalOcean Load Balancer’ın veya harici bir WAF hizmetinin yeteneklerini kullanarak, SQL enjeksiyonu, XSS gibi yaygın web saldırılarına karşı koruma sağlayın.
- Ağ Politikaları (Network Policies): Kubernetes Ağ Politikaları kullanarak, pod’lar arası ve pod’lar ile dış dünya arasındaki ağ trafiğini kısıtlayın. Bu, güvenlik ihlallerinin yayılmasını önlemeye yardımcı olur.
Test Stratejileri
Mavi-Yeşil dağıtımın başarısı, dağıtımdan önce yapılan testlerin kalitesine bağlıdır.
- Gelişmiş Ön Dağıtım Testleri: Yeni sürümü yeşil ortama dağıtmadan önce, birim testleri, entegrasyon testleri ve uçtan uca (end-to-end) testleri CI/CD boru hattınızda otomatik olarak çalıştırın.
- Yük ve Stres Testleri: Yeşil ortamı canlıya almadan önce, beklenen maksimum trafiğin üzerinde yük testlerine tabi tutarak performans darboğazlarını ve ölçeklenebilirlik sorunlarını önceden tespit edin.
- Gölge Trafik (Shadow Traffic): Bazı gelişmiş Gateway API uygulamaları veya servis mesh’ler (Istio gibi), canlı trafiğin bir kopyasını (ancak yanıtlarını kullanmadan) yeni ortama yönlendirme yeteneği sunar. Bu “gölge trafik”, yeni sürümün gerçek dünya yükü altında nasıl davrandığını gözlemlemenizi sağlar, ancak herhangi bir hatanın canlı kullanıcıları etkilemesini önler.
- Gözlem ve Doğrulama: Dağıtım sonrası, yeni sürümün beklenen şekilde çalıştığından emin olmak için otomatik doğrulama kontrolleri (örneğin, belirli bir URL’ye istek atıp beklenen yanıtı almak) uygulayın.
Sonuç: Mavi-Yeşil Dağıtımların Geleceği ve DOKS ile Gateway API’nin Önemi
Modern yazılım geliştirme pratiklerinde, kesintisiz dağıtım yeteneği artık bir lüks değil, bir zorunluluktur. Mavi-Yeşil dağıtım stratejisi, uygulamalarınızı minimum riskle ve sıfır kesinti süresiyle güncellemeyi mümkün kılarak, hem geliştirici ekiplerine hem de son kullanıcılara büyük faydalar sunar. DigitalOcean Kubernetes (DOKS) gibi yönetilen bir Kubernetes hizmeti, altyapı yönetiminin karmaşıklığını ortadan kaldırırken, Kubernetes Gateway API ise esnek ve güçlü trafik yönetimi yetenekleri sağlayarak bu stratejinin uygulanmasını son derece kolay ve verimli hale getirir.
Bu makalede, DOKS üzerinde bir Kubernetes kümesi kurmaktan, Gateway API kontrolörünü dağıtmaya, uygulamanızın mavi ve yeşil sürümlerini hazırlamaya ve son olarak Gateway API kullanarak trafiği bu ortamlar arasında kesintisiz bir şekilde nasıl yöneteceğinize dair adım adım bir rehber sunduk. Ayrıca, bir e-ticaret uygulaması güncelleme senaryosu ile gerçek dünya bir uygulamayı ele aldık ve otomatik geri alma, kapsamlı izleme, güvenlik katmanları ve gelişmiş test stratejileri gibi ileri düzey ipuçlarıyla sisteminizi daha da güçlendirmenin yollarını gösterdik.
Gateway API, Kubernetes’te trafik yönetimi için geleceğin standardı olarak konumlanmaktadır. Ingress’in sınırlamalarını aşarak, daha rol tabanlı, genişletilebilir ve özellik açısından zengin bir yapı sunar. DOKS ile birleştiğinde, geliştiricilerin ve operasyon ekiplerinin karmaşık dağıtım stratejilerini güvenle uygulamasına olanak tanır. Bu sayede, yeni özelliklerin pazara sunulma süresi kısalır, hataların etkisi minimize edilir ve genel sistem güvenilirliği artırılır.
Özetle, DOKS’ta Gateway API ile Mavi-Yeşil dağıtımlar, modern bulut tabanlı uygulamalar için vazgeçilmez bir kombinasyondur. Bu yaklaşımı benimseyerek, işletmeler rekabet avantajı elde edebilir, müşteri memnuniyetini artırabilir ve sürekli yenilik yapma yeteneklerini güçlendirebilirler. Bu araçların ve stratejilerin doğru kullanımıyla, dağıtım süreçleriniz artık bir endişe kaynağı olmaktan çıkıp, işinize değer katan sorunsuz bir akışa dönüşecektir.
Sıkça Sorulan Sorular
Mavi-Yeşil dağıtım her uygulama için uygun mudur?
Mavi-Yeşil dağıtım, çoğu web uygulaması ve API hizmeti için oldukça uygundur. Ancak, veritabanı şema değişiklikleri gibi durumlar özel dikkat gerektirir. Eğer yeni sürüm eski sürümle aynı veritabanı şemasını kullanıyorsa, geçiş genellikle sorunsuz olur. Ancak, şema değişiklikleri varsa, hem ileri hem de geri yönde uyumlu olacak şekilde tasarlanmaları veya veritabanı geçişlerinin ayrı bir aşamada ve dikkatlice yönetilmesi gerekir. Durum bilgisi olan uygulamalar (stateful applications) için de ek stratejiler (örneğin, veri çoğaltma) gerekebilir.
Gateway API yerine Ingress kullanabilir miyim?
Evet, Ingress API hala Kubernetes’te harici trafiği yönetmek için geçerli bir seçenektir ve birçok senaryo için yeterlidir. Ancak, Gateway API, Ingress’e göre daha gelişmiş trafik yönetimi (yüzde tabanlı yönlendirme, başlık bazlı kurallar), daha net rol ayrımı ve daha iyi genişletilebilirlik sunar. Mavi-Yeşil veya Canary gibi karmaşık dağıtım stratejileri için Gateway API’nin sunduğu esneklik ve yetenekler genellikle daha avantajlıdır. Eğer basit HTTP/HTTPS yönlendirmelerden fazlasına ihtiyacınız varsa, Gateway API’ye geçiş yapmayı düşünmelisiniz.
Geri alma (rollback) işlemi ne kadar sürer?
Gateway API ile yapılan bir geri alma işlemi genellikle saniyeler içinde tamamlanır. Bunun nedeni, trafiğin yönlendirildiği servis referansının güncellenmesi ve Gateway kontrolörünün bu değişikliği anında proxy yapılandırmasına uygulamasıdır. Uygulama pod’larının yeniden başlatılması veya yeni imajların çekilmesi gibi işlemler gerekmediği için, geri alma süresi oldukça kısadır ve kullanıcılar için neredeyse hiç kesinti anlamına gelmez.
DOKS dışında başka Kubernetes platformlarında da bu yöntem uygulanabilir mi?
Evet, kesinlikle. Mavi-Yeşil dağıtım stratejisi ve Kubernetes Gateway API, bulut sağlayıcısından bağımsız (cloud-agnostic) kavramlardır. AWS EKS, Google GKE, Azure AKS gibi diğer yönetilen Kubernetes hizmetlerinde veya kendi kurduğunuz on-premise Kubernetes kümelerinde de bu yöntemleri uygulayabilirsiniz. Tek fark, Gateway kaynağının bir dış yük dengeleyiciyi (Load Balancer) nasıl sağlayacağı olabilir (örneğin, DOKS’ta DigitalOcean Load Balancer, GKE’de Google Cloud Load Balancer). Ancak temel Gateway API kaynakları (GatewayClass, Gateway, HTTPRoute) aynı şekilde çalışır.
Mavi-Yeşil dağıtımın Canary dağıtımdan farkı nedir?
Her ikisi de kesintisiz dağıtım stratejileridir ancak farklı risk profillerine sahiptirler:
- Mavi-Yeşil Dağıtım: İki özdeş ortam (mavi ve yeşil) kurulur. Yeni sürüm (yeşil) tamamen test edildikten sonra, tüm trafik bir anda mavi ortamdan yeşile geçirilir. Hızlı bir geçiş ve hızlı geri alma sunar, ancak eğer yeşil ortamda gözden kaçan bir hata varsa, tüm kullanıcıları etkiler.
- Canary Dağıtım: Yeni sürüm (canary) küçük bir kullanıcı alt kümesine veya trafiğin küçük bir yüzdesine sunulur. Bu küçük grup üzerinde performans ve hata oranları izlenir. Eğer her şey yolundaysa, trafik yüzdesi kademeli olarak artırılır. Daha düşük riskli bir yaklaşımdır, ancak geçiş süresi daha uzundur. Gateway API,
weightözelliği ile her iki stratejiyi de kolayca uygulamanıza olanak tanır.