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:
- Nasadenie kanárskej skupiny: Nová verzia aplikácie sa nasadí na malé podmnožstvo serverov alebo používateľov.
- Monitorovanie: Precízne sa sledujú metriky (chyby, výkon, správanie používateľov) pre kanársku skupinu.
- 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.