Blue-Green va Canary deploy
Blue-Green va Canary deploy
1) Vazifa va asosiy g’oyalar
Blue-Green va Canary - joriy etish xavfini kamaytiradigan to’xtovsiz relizlar strategiyalari:- Blue-Green: Biz ikkita parallel versiyani (Blue - faol, Green - yangi) ushlab turamiz, trafikni atom bilan almashtiramiz. Tez orqaga qaytish → Darhol Blue ga qaytish.
- Canary: Biz yangi versiyani bosqichma-bosqich yoqamiz (1% → 5% → 25% → 50% → 100%), SLO metrikasini kuzatamiz va tanazzulga uchraganda to’xtatamiz/qaytaramiz.
Umumiy printsip: «artefaktni yetkazib berish» ni «trafikni yoqishdan» ajratish va kuzatish + orqaga qaytishni avtomatlashtirish.
2) Qachon nimani tanlash
Blue-Green quyidagi hollarda mos keladi:- zudlik bilan o’zgartirish (qattiq RTO), oddiy state-less xizmatlari;
- qattiq reliz/muzlatish oynalari va tushunarli smoke tekshiruvlari mavjud;
- ikki baravar uzoq sig’imni ushlab turish qimmatga tushadi - lekin qisqa vaqt ichida.
- murakkab o’zgarishlar, real trafikda bosqichma-bosqich validatsiya qilish talab etiladi;
- etuk telemetriya (SLO, biznes metrika), avto-to’xtash imkoniyati mavjud;
- shikastlanish radiusini keskin cheklash (fintech/iGaming-oqimlar).
Kombo-pattern: Green’ni haydash va unga canary-bosqichlar orqali o’tish (Blue-Green ramka sifatida, Canary trafikni o’tkazish usuli sifatida).
3) Trafikni yo’naltirish arxitekturasi
Trafikni almashtirish/toʻldirish variantlari:1. L4/L7-balanslovchi (ALB/NLB, Cloud Load Balancer) - target groups.
2. API-shlyuz/WAF - route/weight versiyalari, sarlavhalari, kukilari, mintaqalari bo’yicha.
3. Service Mesh (Istio/Linkerd/Consul) - foiz taqsimoti, fault-inyeksiya, taymaut/retraj/cheklovlar ruchkalari.
4. Ingress/NGINX/Envoy - upstream-og’irlik va atributlar bo’yicha marshrutlash.
5. Argo Rollouts/Flagger - boshqaruvchi operator, avtomatik progress, Prometheus/New Relic/Datadog bilan integratsiya.
4) Kubernetes: amaliy shablonlar
4. 1 Blue-Green (Service selector orqali)
Два Deployment: `app-blue` и `app-green`.
Kerakli’version’uchun bitta Service’app-svc’selektori.
yaml apiVersion: apps/v1 kind: Deployment metadata: { name: app-green, labels: { app: app, version: green } }
spec:
replicas: 4 selector: { matchLabels: { app: app, version: green } }
template:
metadata: { labels: { app: app, version: green } }
spec:
containers:
- name: app image: ghcr. io/org/app:1. 8. 0 apiVersion: v1 kind: Service metadata: { name: app-svc }
spec:
selector: {app: app, version: blue} # ← switch to green - change ports: [{port: 80, targetPort: 8080}]
Almashtirish - nazorat qilinadigan drain bilan selektorni (yoki belgilarni) atom almashtirish.
4. 2 Canary (Istio VirtualService)
yaml apiVersion: networking. istio. io/v1beta1 kind: VirtualService metadata: { name: app }
spec:
hosts: ["app. example. com"]
http:
- route:
- destination: { host: app. blue. svc. cluster. local, subset: v1 }
weight: 90
- destination: { host: app. green. svc. cluster. local, subset: v2 }
weight: 10
’weight’ ni zinapoyalar bo’yicha o’zgartiring; DestinationRule’ga retry, timeout, outlier-detector qoʻshing.
4. 3 Argo Rollouts (avto-kanareykali yugurish)
yaml apiVersion: argoproj. io/v1alpha1 kind: Rollout metadata: { name: app }
spec:
replicas: 6 strategy:
canary:
canaryService: app-canary stableService: app-stable steps:
- setWeight: 5
- pause: {duration: 300} # 5 min observation
- analysis:
templates:
- templateName: slo-guard
- setWeight: 25
- pause: { duration: 600 }
- analysis:
templates: [{ templateName: slo-guard }]
- setWeight: 50
- pause: {}
trafficRouting:
istio:
virtualService:
name: app routes: ["http-route"]
Tahlil namunasi metriklar bilan bog’liq (quyida qarang).
5) SLO-geytlar va avtotransport
Muhofaza etiladigan metriklar (misollar):- Texnik:’p95 _ latency’,’5xx _ rate’,’error _ budget _ burn’,’CPU/Memory throttling’.
- Mahsulotlar:’CR (depozit)’,’to’lovlarning muvaffaqiyati’,’skoring-froda’,’ARPPU’(sovuq derazalarda).
- Agar’5xx _ rate’yangi versiyasi boʻlsa> 0. 5% 10 daqiqa davomida - pause va rollback.
- Agar’p95 _ latency’↑> bazadan 20% - rollback.
- Agar kanareykalar targ’ib qilinsa, lekin byudjetning SLOsi yoqib yuborilsa> 2 %/soat - xold.
yaml apiVersion: argoproj. io/v1alpha1 kind: AnalysisTemplate metadata: { name: slo-guard }
spec:
metrics:
- name: http_5xx_rate interval: 1m successCondition: result < 0. 005 provider:
prometheus:
address: http://prometheus. monitoring:9090 query:
sum(rate(http_requests_total{app="app",status=~"5.."}[5m])) /
sum(rate(http_requests_total{app="app"}[5m]))
6) Ma’lumotlar va muvofiqlik (og’riqning eng ko’p uchraydigan sababi)
expand → migrate → contract strategiyasidan foydalaning:- Expand: yangi nullable/indeks qoʻshish, ikkala sxemani ham qoʻllab-quvvatlash.
- Migrate: ikki marta yozish/oʻqish, orqa fill.
- Contract: 100% trafik chiqqandan keyin eski maydonlarni/kodni olib tashlash.
- Hodisa/navbatlar: payload (v1/v2) versiyasini, idempotency’ni qoʻllab-quvvatlang.
- Kesh/seanslar: kalitlarni versiya qiling; formatning mos kelishini ta’minlang.
7) CI/CD va GitOps bilan integratsiya
CI: yagona artefaktni yigʻish (build once), tasvir imzosi, SBOM, testlar.
CD: atrof-muhit orqali artefaktni targ’ib qilish; Blue-Green/Canary manifestlar bilan boshqariladi.
GitOps: merj MR → kontroller (Argo CD/Flux) ogʻirlik/selektorni qoʻllaydi.
Environments/Approvals: prod-steplar uchun - qo’lda gate + yechimlar auditi.
8) NGINX/Envoy va bulutli LB: tezkor misollar
8. 1 NGINX (apstrimlarning og’irligi)
nginx upstream app_upstream {
server app-blue:8080 weight=90;
server app-green:8080 weight=10;
}
server {
location / { proxy_pass http://app_upstream; }
}
8. 2 AWS ALB (Weighted Target Groups)
TG-Blue: 90, TG-Green: 10 → IaC/CLI orqali og’irlikni o’zgartiring.
CloudWatch-ni rollback avto-skriptlariga bogʻlang (ogʻirlikni 0/100 ga oʻzgartirish).
9) Xavfsizlik va muvofiqlik
Zero trust versiyalari orasida: shifrlash sirlarini/rolling kalitlarini ajrating.
Policy-as-Code: Imzo qoʻyilmagan tasvirlarni taqiqlash,’no latest’.
Sirlar va konfigurlar versiyalar artefaktlari sifatida; orqaga qaytish konfiguratsiyalarning orqaga qaytishini o’z ichiga oladi.
Audit: kim, qachon og’irlikni ko’tardi/selektorni qanday tiket bilan o’zgartirdi.
10) Qiymati va sig’imi
Blue-Green ikki marta quvvat talab qiladi → oynani rejalashtiring.
Canary ikki versiyaning parallel mazmuni bo’lgan telemetriya/kuzatuv qiymatidan uzoqroq davom etishi mumkin.
Optimallashtirish: HPA/VPA autoscaling, Blue-Green qisqa oynalar, «og’ir» xizmatlar uchun tungi relizlar.
11) Orqaga qaytish (runbook)
1. Oldinga siljishni toʻxtatish (pause).
2. Green ogʻirligini 0% gacha pasaytirish (canary )/selektorni Blue (blue-green) ga qaytarish.
3. Tekshirish: xatolar/yashirlik bazaga qaytdi, ulanishlarni drenaj qilish.
4. Hodisani ochish, artefaktlarni (loglar, trassalar, metriklarni taqqoslash) to’plash.
5. Fix/reprod stage, smoke haydash, progressiyani qayta boshlash.
12) Anti-patternlar
Stage va prod o’rtasida artefaktni qayta yig’ish («build once» buzilishi).
SLO/metriksiz «kar» kanari - himoya emas, rasmiyatchilik.
Fich bayroqlarining yo’qligi: reliz darhol 100% xatti-harakatlarni o’z ichiga oladi.
Ishlamaydigan health-checks/liveness → «yopishib qolgan» podalar va yolg’on barqarorlik.
BD «tasodifan» mosligi: kontrakt almashtirilganda buziladi.
Namunadagi mutabel tasvirlar teglari/’ latest’.
13) Joriy etish chek-varaqasi (0-45 kun)
0-10 kun
B/G, Canary yoki kombinatsiyalangan xizmatlar uchun strategiyani tanlang.
Rasmlar, health-checks, readiness-testlar,’no latest’imzolashni yoqish.
SLO (latency/error rate/biznes metrika) dashbordlarini tayyorlash.
11-25 kun
Ogʻirlikni avtomatlashtirish (Istio/Argo Rollouts/ALB-weights).
Analysis templates, alertlar va avto-rollbackni moslash.
Manifestlarni shablon qilish (Helm/Kustomize), GitOps bilan integratsiya qilish.
26-45 kun
DB uchun expand-migrate-contract strategiyasini joriy etish.
Tanqidiy flou kill-switch bayroqlari bilan qoplash.
«game day» ni oʻtkazish: orqaga qaytish va hodisani simulyatsiya qilish.
14) Etuklik metrikasi
Blue-Green/Canary orqali% relizlar (maqsad> 90%).
O’rtacha o’zgartirish/qaytish vaqti (maqsad <3 min).
SLO bo’yicha avtostopli relizlar ulushi (va hodisalarsiz).
Servislarni telemetriya bilan qoplash (traces/logs/metrics)> 95%.
expand-migrate-contract sxemasi bo’yicha DB migratsiyalarining ulushi> 90%.
15) Ilovalar: siyosat va payplaynlar shablonlari
OPA (imzolanmagan tasvirlarni taqiqlash)
rego package admission. image
deny[msg] {
input. request. kind. kind == "Deployment"
some c img:= input. request. object. spec. template. spec. containers[c].image not startswith(img, "ghcr. io/org/")
msg:= sprintf("Image not from trusted registry: %v", [img])
}
Helm-values for canary (soddalashtirilgan)
yaml canary:
enabled: true steps:
- weight: 5 pause: 300
- weight: 25 pause: 600
- weight: 50 pause: 900 sloGuards:
max5xxPct: 0. 5 maxP95IncreasePct: 20
GitHub Actions - ogʻirlik tarkibi (psevdo)
yaml
- name: Promote canary to 25%
run: kubectl patch virtualservice app \
--type=json \
-p='[{"op":"replace","path":"/spec/http/0/route/1/weight","value":25}]'
16) Xulosa
Blue-Green va Canary - o’zaro istisno emas, balki qo’shimcha strategiyalar. Ularni imzolangan artefaktlar, SLO, avtomatik geytlar va GitOps boshqaruvi orqali quring. Etkazib berishni kiritishdan ajrating, migratsiya intizomini va tezlikni saqlang - va relizlar oldindan aytib bo’ladigan, xavfsiz va tezkor bo’ladi.