Blue-Green we Canary deploy
Blue-Green we Canary deploy
1) Wezipe we esasy pikirler
"Blue-Green" we "Canary" - durmuşa geçirmek howpuny azaldýan yzygiderli goýberiş strategiýalary:- Blue-Green: iki sany paralel wersiýany saklaýarys (Blue - işjeň, Green - täze), traffigi atomiki geçirýäris. Çalt yza gaýdyp → Derrew Blue-a gaýdyp geliň.
- Canary: täze wersiýany tapgyrlaýyn açýarys (1% → 5% → 25% → 50% → 100%), SLO metrikasyna gözegçilik edýäris we zaýalananda durýarys/yzyna gaýdýarys.
Umumy ýörelge: "artefaktyň eltilmegini" "traffigiň goşulmagyndan" aýyrmak we synlanmagy + yza gaýdyp gelmegi awtomatlaşdyrmak.
2) Haçan näme saýlamaly
Blue-Green:- derrew geçmeli (gaty RTO), ýönekeý state-less hyzmatlary;
- berk goýberiş/aýaz penjireleri we düşnükli smoke barlaglary bar;
- uzak möhletli goşa kuwwaty saklamak gymmat - ýöne gysga wagtda mümkin.
- çylşyrymly üýtgeşmeler, hakyky traffikde tapgyrlaýyn tassyklama talap edilýär;
- kämillik ýaşyna ýeten telemetri (SLO, iş metrikleri), awto-durmak mümkinçiligi bar;
- (fintech/iGaming-akymlary).
"Combo-pattern": "Green" -i çykaryň we "canary-step" ("Blue-Green") arkaly geçiň.
3) Traffigi ugrukdyrmagyň arhitekturasy
Traffigi üýtgetmek/doldurmak üçin wariantlar:1. L4/L7-balanslaýjy (ALB/NLB, Cloud Load Balancer) - deňagramly maksatly toplar.
2. API-şlýuz/WAF - wersiýalara, sözbaşylara, kukilere, sebitlere görä route/weight.
3. Service Mesh (Istio/Linkerd/Consul) - göterim paýlanyşy, fault-sanjym, wagt/retraut/çäklendirmeler.
4. Ingress/NGINX/Envoy - upstream-agram we atributlar boýunça marşrut.
5. Argo Rollouts/Flagger - dolandyryjy operator, awtomatiki ösüş, Prometheus/New Relic/Datadog bilen integrasiýa.
4) Kubernetes: amaly şablonlar
4. 1 Blue-Green (Service selector arkaly)
Два Deployment: `app-blue` и `app-green`.
Bir Service 'app-svc' selektor bilen islenýän 'version'.
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}]
Geçiş - dolandyrylýan drain bilen selektoryň (ýa-da bellikleriň) atom çalşygy.
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
Basgançaklara 'weight' çalyşyň; DestinationRule-a retry, timeout, outlier-detector goşuň.
4. 3 Argo Rollouts
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"]
Derňew şablony metrikler bilen baglanyşyklydyr (aşakda serediň).
5) SLO-geýtlar we awto-yza gaýdyp gelmek
Goralýan metrikler (mysallar):- Tehniki: 'p95 _ latency', '5xx _ rate', 'error _ budget _ burn', 'CPU/Memory throttling'.
- Önümler: 'CR (goýum)', 'tölegleriň üstünligi', 'skoring-froda', 'ARPPU' (sowuk penjirelerde).
- Eger '5xx _ rate' täze wersiýasy> 0. 10 minudyň dowamynda 5% - pause we rollback.
- Eger 'p95 _ latency' ↑> 20% -den esasy - rollback.
- Kanareýalar mahabatlandyrylsa, ýöne býudjetiň SLO ýakylsa> 2 %/sagat - hold.
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) Maglumatlar we laýyklyk (agyrynyň iň köp duş gelýän sebäbi)
expand → migrate → contract strategiýasyny ulanyň:- Expand: täze nullable sütünleri/indeksleri goşmak, iki shemany goldamak.
- Migrate: goşa ýazmak/okamak, yzyna doldurmak.
- Contract: 100% traffik çykandan soň köne meýdanlary/kody aýyryň.
- Wakalar/nobatlar: payload (v1/v2) wersiýasyny, idempotency goldaň.
- Kesiş/sessiýa: açarlary wersiýa ediň; formatyň gabat gelmegini üpjün ediň.
7) CI/CD we GitOps bilen integrasiýa
CI: ýekeje artefaktyň ýygyndysy (build once), şekiliň goly, SBOM, synaglar.
CD: daşky gurşaw arkaly artefaktyň mahabaty; Blue-Green/Canary manifestler bilen dolandyrylýar.
GitOps: MR → kontroller (Argo CD/Flux )/selektor agramyny ulanýar.
Environments/Approvals: sähralar üçin - gollanma gate + çözgütleriň barlagy.
8) NGINX/Envoy we bulut LB: çalt mysallar
8. 1 NGINX (apstrimleriň agramy)
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 arkaly agramyňyzy üýtgediň.
CloudWatch-alertleri rollback awto-skriptlerine baglaň (agramy 0/100 üýtgetmek).
9) Howpsuzlyk we laýyklyk
Wersiýalaryň arasynda Zero trust: şifrlemek syrlaryny/rolling açarlaryny kesgitläň.
Policy-as-Code: gol çekmedik şekilleri bölmek gadagandyr, 'no latest'.
Syr we konfigikler wersiýalaryň artefaktlary hökmünde; yzyna gaýtarmak konfigurasiýalaryň yzyna gaýtarylmagyny öz içine alýar.
Audit: kim, haçan agramyny ýokarlandyrdy/saýlaýjyny çalşdy, haýsy bilet bilen.
10) Bahasy we kuwwaty
Blue-Green çykmak üçin iki esse güýç talap edýär → penjiräni meýilleşdiriň.
Canary has uzaga çekip biler → telemetriýanyň/synyň bahasy, iki wersiýanyň paralel mazmuny.
Optimizasiýa: HPA/VPA boýunça autoscaling, Blue-Green gysga penjireleri, "agyr" hyzmatlar üçin gijeki goýberişler.
11) Yza gaýdyp gelmek (runbook)
1. Öňe gitmegi doňdur.
2. "Green" -iň agramyny 0% -e (canary) çenli azalt/saýlaýjyny "Blue" -e (gök-ýaşyl) gaýtaryň.
3. Barlamak: ýalňyşlyklar/gizlinlik esasy hatalara gaýdyp geldi, baglanyşyklary drene.
4. Wakany açyň, artefaktlary ýygnaň (loglar, ýollar, metrikleri deňeşdirmek).
5. Fix/reprod stage, smoke sürmek, progressiýany täzeden başlamak.
12) Anti-patternler
Artefaktyň stage bilen prod arasynda gaýtadan ýygnalmagy ("build once" bozulmasy).
SLO/metriksiz "kar" kanary - gorag däl-de, resmi.
Fiç baýdaklarynyň ýoklugy: goýberilmegi özüni alyp barşyny birbada 100% goşmaga mejbur bolýar.
Işlemeýän health-checks/liveness → "ýapyşan" podlar we ýalan durnuklylyk.
DB-nyň "mümkin boldugyça" gabat gelýändigi: geçilende şertnama bozulýar.
Prodda/' latest 'şekilleriniň ýalňyş bellikleri.
13) Giriş çek-sanawy (0-45 gün)
0-10 gün
B/G, Canary ýa-da birleşdirilen hyzmatlar üçin strategiýany saýla.
Şekillere gol çekmegi, health-checks, readiness-synaglary, 'no latest'.
SLO (latency/error rate/business-metrics) dashbordlaryny taýýarlamak.
11-25 gün
Agramy awtomatlaşdyrmak (Istio/Argo Rollouts/ALB-weights).
Analysis templates, alertler we awto-rollback.
Manifestleri şablonlaşdyrmak (Helm/Kustomize), GitOps bilen integrasiýa.
26-45 gün
DB üçin expand-migrate-contract strategiýasyny girizmek.
Kritiki kill-switch flowlaryny baýdaklar bilen örtüň.
"Game day" geçiriň: yza gaýdyp we wakany simulýasiýa ediň.
14) Kämillik ölçegleri
"Blue-Green/Canary" arkaly goýberilenleriň% -i (maksat> 90%).
Geçiş/yza gaýdyp gelmegiň ortaça wagty (maksat <3 min).
SLO boýunça awto-stop bilen goýberilişleriň paýy (we hadysasyz).
Hyzmatlary telemetriýa (traces/logs/metrics) bilen ýapmak> 95%.
expand-migrate-contract shemasy boýunça DB migrasiýa paýy> 90%.
15) Goşundylar: syýasatlaryň we paýlaýjylaryň şablonlary
OPA (gol çekilmedik şekillere gadaganlyk)
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])
}
canary üçin Helm-values (ýönekeý)
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 - agram mahabaty (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) Netijenama
"Blue-Green" we "Canary" biri-birinden aýrylmaýan strategiýalardyr. Olary gol çekilen artefaktlaryň, SLO, awtomatiki geýtleriň we GitOps-dolandyryşyň üstünde guruň. Eltip bermegi goşmakdan aýyryň, çalt yza çekilmegini we migrasiýa düzgünini saklaň - we goýberilişler öňünden aýdyp boljak, howpsuz we çalt bolar.