Sobes.tech
Middle+

Kanarya dağıtımları nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Kanar dağıtımı, yeni özelliklerin piyasaya sürülmesi için bir stratejidir; burada güncelleme, kullanıcıların küçük bir bölümüne kademeli olarak sunulur ve sorun yoksa tüm kitleye yayılır.

Ana aşamalar:

  1. Kanar grubu dağıtımı: Uygulamanın yeni sürümü, küçük bir sunucu veya kullanıcı alt kümesine dağıtılır.
  2. İzleme: Kanar grubu için metrikler (hatalar, performans, kullanıcı davranışı) dikkatlice izlenir.
  3. Genişletme veya geri alma:
    • İzleme başarılı gösteriyorsa, dağıtım kademeli olarak daha büyük bir kullanıcı grubuna genişletilir.
    • Sorun tespit edilirse, dağıtım kanar grubu için geri alınır ve ana kitle korunur.

Avantajlar:

  • Risklerin minimize edilmesi: Sorunlar küçük bir kullanıcı alt kümesini etkiler.
  • Hızlı geri alma: Önceki sürüme kolayca dönülebilir.
  • Gerçek koşullarda test: Yeni fonksiyonelliğin gerçek yük altında davranışını değerlendirme.

Dezavantajlar:

  • Altyapı karmaşıklığı: Aynı anda birkaç uygulama sürümüne destek gerektirir.
  • Trafik yönetimi: Trafiği farklı sürümlere yönlendirmek için mekanizmalar gerekir.
  • Veri analizi: Etkili metrik toplama ve analiz gereklidir.

Kubernetes'te uygulama örneği:

// v1 için dağıtım
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-v1
spec:
  replicas: 10 // Ana sayı
  selector:
    matchLabels:
      app: my-app
      version: v1
  template:
    metadata:
      labels:
        app: my-app
        version: v1
    spec:
      containers:
      - name: my-app
        image: my-registry/my-app:v1

---

// v2 kanar dağıtımı
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-v2-canary
spec:
  replicas: 1 // Kanar grubu
  selector:
    matchLabels:
      app: my-app
      version: v2
  template:
    metadata:
      labels:
        app: my-app
        version: v2
    spec:
      containers:
      - name: my-app
        image: my-registry/my-app:v2

---

// Trafiği yönlendiren servis (seçiciler kullanılarak)
apiVersion: v1
kind: Service
metadata:
  name: my-app-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

v1 ve v2 arasındaki trafik dağılımını yönetmek için, Nginx Ingress, Istio gibi ağırlıklı trafik dağıtımı yapabilen Ingress kontrolcüleri kullanılır.