Sobes.tech
Middle+

Čo sú kanárske nasadenia?

sobes.tech AI

Odpoveď od AI

Kanárske nasadenie je stratégia uvozu nových funkcií, pri ktorej sa aktualizácia postupne nasadzuje na malú časť používateľov a potom, ak nie sú problémy, sa rozšíri na celú skupinu.

Hlavné kroky:

  1. Nasadenie kanárskej skupiny: Nová verzia aplikácie sa nasadí na malé podmnožstvo serverov alebo používateľov.
  2. Monitorovanie: Precízne sa sledujú metriky (chyby, výkon, správanie používateľov) pre kanársku skupinu.
  3. Rozšírenie alebo rollback:
    • Ak monitorovanie ukazuje úspešnosť, nasadenie sa postupne rozširuje na väčšiu skupinu používateľov.
    • Pri zistení problémov sa nasadenie vráti pre kanársku skupinu, čím sa chráni väčšina používateľov.

Výhody:

  • Minimalizácia rizík: Problémy ovplyvňujú malú skupinu používateľov.
  • Rýchly rollback: Jednoducho sa vráti na predchádzajúcu verziu.
  • Testovanie v reálnych podmienkach: Hodnotenie správania novej funkcie pod reálnou záťažou.

Nevýhody:

  • Zložitosť infraštruktúry: Vyžaduje podporu viacerých verzií aplikácie súčasne.
  • Riadenie prenosu: Sú potrebné mechanizmy na smerovanie prenosu k rôznym verziám.
  • Analýza dát: Vyžaduje efektívny zber a analýzu metrík.

Príklad implementácie v Kubernetes:

// Deployment pre v1
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-v1
spec:
  replicas: 10 // Hlavný počet
  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

---

// Deployment pre kanársku v2
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-v2-canary
spec:
  replicas: 1 // Kanárska skupina
  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

---

// Service na smerovanie prenosu (pomocou selektorov)
apiVersion: v1
kind: Service
metadata:
  name: my-app-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

Na riadenie rozdelenia prenosu medzi v1 a v2 sa používajú Ingress kontroléry (napríklad Nginx Ingress, Istio) s možnosťou váženého rozdeľovania prenosu.