Sobes.tech
Middle+

Co jsou kanárské nasazení?

sobes.tech AI

Odpověď od AI

Canar deployment je strategie nasazení nových funkcí, při které je aktualizace postupně nasazována na malou část uživatelů a poté, pokud nejsou problémy, rozšířena na celou cílovou skupinu.

Hlavní fáze:

  1. Nasazení kanárské skupiny: Nová verze aplikace je nasazena na malý podmnožinu serverů nebo uživatelů.
  2. Monitorování: Pečlivě se sledují metriky (chyby, výkon, chování uživatelů) pro kanárskou skupinu.
  3. Rozšíření nebo rollback:
    • Pokud monitorování ukazuje úspěšnost, nasazení se postupně rozšiřuje na větší skupinu uživatelů.
    • Při problémech je nasazení vráceno zpět pro kanárskou skupinu, čímž je chráněna většina uživatelů.

Výhody:

  • Minimalizace rizik: Problémy ovlivní pouze malou část uživatelů.
  • Rychlý rollback: Je snadné se vrátit k předchozí verzi.
  • Testování v reálných podmínkách: Hodnocení chování nové funkce pod reálnou zátěží.

Nevýhody:

  • Složitost infrastruktury: Vyžaduje podporu pro více verzí aplikace současně.
  • Řízení provozu: Je třeba mechanismů pro směrování provozu k různým verzím.
  • Analýza dat: Vyžaduje efektivní sběr a analýzu metrik.

Příklad implementace v Kubernetes:

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

---

// Služba pro směrování provozu (pomocí selectorů)
apiVersion: v1
kind: Service
metadata:
  name: my-app-service
spec:
  selector:
    app: my-app
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

Pro řízení rozdělení provozu mezi v1 a v2 se používají Ingress kontrolery (například Nginx Ingress, Istio) s možností váženého rozdělení provozu.