Blue-Green жана Canary деплой
Blue-Green жана Canary деплой
1) Милдет жана негизги идеялар
Blue-Green жана Canary - ишке ашыруу коркунучун азайтуу үзгүлтүксүз релиздер стратегиясы:- Blue-Green: Биз эки параллелдүү версияларды (Blue - активдүү, Green - жаңы) кармап, трафикти атомдук түрдө которуп жатабыз. Тез артка → дароо Blue кайтып.
- Canary: этап-этабы менен жаңы нускасын (1% → 5% → 25% → 50% → 100%), SLO-метрика мониторинг жана токтотуу/деградация учурунда тебүү.
Жалпы принцип: "трафикти күйгүзүүдөн" "артефактты жеткирүүнү" бөлүү жана байкоону + артка кайтарууну автоматташтыруу.
2) Качан тандоо керек
Blue-Green ылайыктуу, качан:- заматта которуу керек (катуу RTO), жөнөкөй state-less кызмат;
- катуу бошотуу/тоңдуруу терезелери жана түшүнүктүү smoke текшерүүлөр бар;
- узакка созулган кош сыйымдуулукту сактоо кымбат - бирок кыска убакытка болушу мүмкүн.
- татаал өзгөрүүлөр, реалдуу трафикте этап-этабы менен валидациялоону талап кылат;
- жетилген телеметрия бар (SLO, бизнес-метрика), авто-токтоо мүмкүнчүлүгү;
- критикалык жоготуу радиусу (fintech/iGaming-агымдар).
Combo-үлгү: Green тоголотуп жана canary-тепкичтери аркылуу ага өтүү (Blue-Green алкагы катары, Canary жол которуу ыкмасы катары).
3) Жол кыймылын багыттоо архитектурасы
Жол которуу/толтуруу параметрлери:1. L4/L7 баланстагыч (ALB/NLB, Cloud Load Balancer) - салмактуу максаттуу топтор.
2. API-шлюз/WAF - версиялары, аталыштары, кукилери, аймактары боюнча route/weight.
3. Service Mesh (Istio/Linkerd/Consul) - пайыздык бөлүштүрүү, fault-инъекция, убакыт туткалары/retraights/чектөөлөр.
4. Ingress/NGINX/Envoy - upstream-салмагы жана сапаттары боюнча багыттоо.
5. Argo Rollouts/Flagger - контроллер оператору, автоматтык прогрессия, Prometheus/New Relic/Datadog менен бириктирүү.
4) Kubernetes: практикалык үлгүлөрү
4. 1 Blue-Green (Service selector аркылуу)
Два Deployment: `app-blue` и `app-green`.
Бир Service 'app-svc' каалаган '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}]
Которуу - башкарылуучу drain менен атомдук селектор (же белги) өзгөртүү.
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' өзгөртүү; DestinationRule боюнча retry, timeout, outlier-detector кошуу.
4. 3 Argo Rollouts (auto-канарейка чуркоо)
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"]
Талдоо үлгүсү метриктер менен байланышкан (төмөндө караңыз).
5) SLO-Гейтс жана Auto-Roll
Корголгон метриктер (мисалдар):- Техникалык: 'p95 _ latency', '5xx _ rate', 'error _ budget _ burn', 'CPU/Memory throttling'.
- Азык-түлүк: 'CR (депозит)', 'төлөмдөрдүн ийгилиги', 'скоринг-фрод', 'ARPPU' (муздак терезелерде).
- Эгерде '5xx _ rate' жаңы версиясы> 0. 5% 10 мин ичинде - пауза жана rollback.
- Эгерде 'p95 _ latency' ↑> 20% негизги - rollback.
- Эгерде промоушен канарейка барат, бирок SLO бюджет өрттөп жатат> 2 %/саат - 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) Маалыматтар жана шайкештик (оору көп себеп)
expand → migrate → contract стратегиясын колдонуңуз:- Expand: жаңы nullable-колонка/индекстер кошуу, эки схемаларды колдоо.
- Migrate: кош жазуу/окуу, кайра толтуруу.
- Contract: 100% трафик чыккандан кийин эски талааларды/кодду алып салуу.
- Окуя/кезек: payload (v1/v2) чыгаруу, idempotency колдоо.
- Кэш/сессиялар: ачкычтарды чыгаруу; формат шайкештигин камсыз кылуу.
7) CI/CD жана GitOps менен бириктирүү
CI: бирдиктүү артефакт (build once) чогултуу, сүрөт кол коюу, SBOM, тесттер.
CD: айлана-чөйрө аркылуу артефакт промоушен; Blue-Green/Canary манифесттер менен башкарылат.
GitOps: MER MR → контроллер (Арго CD/Flux) салмагы/селектор колдонот.
Environments/Approvals: прод-талаа үчүн - кол менен gate + аудит чечимдер.
8) NGINX/Envoy жана булут LB: тез мисалдар
8. 1 NGINX (апстрим салмагы)
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-Жашыл: 10 → IaC/CLI аркылуу салмагын өзгөртүү.
Rollback Auto Script үчүн CloudWatch-Alerts байлап (салмагын өзгөртүү 0/100).
9) Коопсуздук жана шайкештик
Zero trust котормолордун ортосунда: сырларды/Rolling ачкычтарын коддоо.
Саясат-as-Code: кол коюлбаган сүрөттөрдү деплой тыюу, 'no latest'.
Сырлар жана конфиги катары артефакт версиялары; артка кайтаруу конфигурациялардын артка кайтарылышын камтыйт.
Аудит: ким, качан салмагын көтөргөн/селектор которгон, кандай тикет менен.
10) Наркы жана кубаттуулугу
Blue-Green бошотуу мезгил үчүн кош күч талап → терезени пландаштыруу.
Canary узакка созулушу мүмкүн → телеметрия/байкоо наркы, эки версиянын параллелдүү мазмуну.
оптималдаштыруу: HPA/VPA autoscaling, Blue-Green кыска терезелер, "оор" кызматтар үчүн түнкү релиздер.
11) Артка кайтаруу (runbook)
1. тоңдуруп жылдыруу (пауза).
2. Green салмагын төмөндөтүү 0% (canary )/Blue (көк-жашыл) боюнча селектор кайтаруу.
3. Текшерүү: каталар/жашыруун негизги кайтып, дренаждык байланыштар.
4. Окуяны ачуу, артефакттарды чогултуу (логи, трассалар, метриканы салыштыруу).
5. Fix/этап репрод, smoke айдап, прогрессти кайра баштоо.
12) Анти-үлгүлөрү
Стаж менен прод ортосундагы артефактты кайра чогултуу ("build once" бузуу).
SLO/метриги жок "дүлөй" канары - бул формализм, коргоо эмес.
Фич-желектердин жоктугу: релизи дароо 100% жүрүм-турумун камтууга аргасыз.
Иштебей калган ден соолук-текшерүү/жашоо → "жабышып" таман жана жалган туруктуулук.
БДнын "кокус" шайкештиги: контракт которулганда бузулат.
Мутабель теги сүрөттөр/' latest 'прод.
13) киргизүү чек-тизмеси (0-45 күн)
0-10 күн
Кызмат үчүн стратегияны тандоо: B/G, Canary же айкалыштырылган.
Кошуу кол сүрөттөр, health-текшерүү, readiness-тесттер, 'no latest'.
Dashboard SLO даярдоо (latency/error rate/бизнес-метрика).
11-25 күн
Салмакты автоматташтыруу (Istio/Argo Rollouts/ALB-weights).
Орнотуу analysis templates, Алерт жана auto-rollback.
Манифесттерди (Helm/Kustomize), GitOps менен интеграциялоо.
26-45 күн
DB үчүн expand-migrate-contract стратегиясын киргизүү.
критикалык Flow kill-switch желектери менен жабуу.
"Оюн күнү" өткөрүү: артка жана окуя окшоштуруу.
14) Жетилүү метрикасы
Blue-Green/Canary аркылуу чыгаруу% (максаты> 90%).
Орточо которуу/чыгаруу убактысы (максат <3 мин).
SLO боюнча авто-бут менен релиздердин үлүшү (жана инциденттерсиз).
Телеметрия менен тейлөө (traces/logs/metrics)> 95%.
expand-migrate-contract схемасы боюнча DD миграциясынын үлүшү> 90%.
15) Тиркемелер: саясат жана пайплайн үлгүлөрү
OPA (кол коюлбаган сүрөттөргө тыюу салуу)
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 үчүн canary (жөнөкөй)
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 - салмак (псевдо)
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) Корутунду
Blue-Green жана Canary - бири-бирин жокко чыгаруучу эмес, толуктоочу стратегиялар. Аларды кол коюлган артефакттардын, СЛОнун, автоматтык дарбазалардын жана GitOps башкаруунун үстүнөн куруу. Жүктү кошуудан бөлүңүз, тез артка чегинүүнү жана миграциянын тартибин сактаңыз - жана релиздер алдын ала айтууга болот, коопсуз жана тез болот.