Ҷойгиркунии кабуд-сабз ва канарӣ
Ҷойгиркунии кабуд-сабз ва канарӣ
1) Мушкилот ва ғояҳои асосӣ
Blue-Green ва Canary стратегияҳои беист озодкунӣ мебошанд, ки хатари қабули онҳоро коҳиш медиҳанд:- Кабуд-Сабз: ду версияи параллелиро нигоҳ доред (кабуд - фаъол, сабз - нав), трафики атомӣ гузаред. Бозгашти зуд → фавран Blue-ро бармегардонад.
- Canary: версияи навро дар марҳилаҳо фаъол созед (1% → 5% → 25% → 50% → 100%), ченакҳои SLO-ро назорат кунед ва ҳангоми таназзул бозистед/бозгардонед.
Принсипи умумӣ ҷудо кардани "расонидани артефакт" аз "фарогирии трафик" ва автоматикунонии мушоҳида + гардишҳо мебошад.
2) Кай интихоб кардан
Кабуд-Сабз вақте мувофиқ аст, ки:- ба коммутатсияи фаврӣ (RTO-и сахт), хидматҳои оддии давлатӣ ниёз доранд;
- тирезаҳои қатъии озодкунӣ/яхкунӣ ва санҷиши тозаи дуд мавҷуданд;
- нигоҳ доштани иқтидори дукарата гарон аст - аммо он дар муддати кӯтоҳ имконпазир аст.
- тағироти мураккаб, санҷиши зина ба зина дар трафики воқеӣ талаб карда мешавад;
- телеметрияи баркамол (SLO, ченакҳои бизнес), қобилияти худкори таваққуф вуҷуд дорад;
- радиуси зарарро шадидан маҳдуд мекунад (ҷараёнҳои fintech/IGaming).
Намунаи Combo: Сабзро печонед ва ба марҳилаҳои канарӣ гузаред (Блу-Грин ҳамчун чаҳорчӯба, Канария ҳамчун усули интиқоли трафик).
3) Меъмории масири ҳаракат
Интихобҳо барои гузариш/илова кардани трафик:1. L4/L7 мувозинаткунанда (ALB/NLB, Cloud Load Balancer) - гурӯҳҳои мақсадноки вазн.
2. Дарвозаи API/WAF - масир/вазн аз рӯи версияҳо, сарлавҳаҳо, кукиҳо, минтақаҳо.
3. Service Mesh (Istio/Linkerd/Consul) - тақсимоти фоизҳо, сӯзандоруи хато, дастакҳои вақт/бозгашт/маҳдудият.
4. Ingress/NGINX/Envoy - вазнҳои болооб ва масири атрибут.
5. Argo Rollouts/Flagger - оператор-контролер, пешрафти автоматӣ, ҳамгироӣ бо Prometheus/New Relic/Datadog.
4) Кубернетҳо: қолабҳои амалӣ
4. 1 Кабуд-Сабз (тавассути интихобкунандаи хидмат)
Ҷойгиркунӣ: 'app-blue' i 'app-green'.
Як хидмат 'app-svc' бо селектор барои 'версияи' дилхоҳ.
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}]
Гузариш - тағирёбии атомии селектор (ё тамғакоғазҳо) бо дренажи идорашаванда.
4. 2 Канарӣ (Хидмати виртуалии Istio)
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
"Вазн" -ро марҳила ба марҳила иваз кунед; илова кардани retry, timeout, outlier-detector ба Destination
4. 3 Rollouts Argo (Auto Canary Run)
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 ва гардиши худкор
Ченакҳои ҳифзшуда (намунаҳо):- Техникӣ: 'p95 _ latency', '5xx _ rate', 'хато _ budget _ burn', 'CPU/drottling Memory'.
- Хӯрокворӣ: 'CR (амонат)', 'муваффақияти пардохтҳо', 'қаллобӣ ба даст овардан', 'ARPPU' (дар тирезаҳои хунук).
- Агар '5xx _ rate' -и версияи нав> 0 бошад. 5% барои 10 дақиқа - таваққуф ва бозгашт.
- Агар 'p95 _ latency' →> 20% пойгоҳ - бозгашт.
- Агар таблиғи канарӣ гузарад, аммо SLO буҷа сӯзонда мешавад> 2 %/соат - нигоҳ доред.
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) Маълумот ва мутобиқат (сабаби маъмултарини дард)
Васеъгардонии → migrate → стратегияи шартномаро истифода баред:- Васеъкунӣ: илова кардани сутунҳо/индексҳои нави беэътибор, ҳарду схемаҳоро дастгирӣ кунед.
- Муҳоҷират: Навиштани дукарата/Хондан, Бозгашт-Пур.
- Шартнома: пас аз баромадан аз 100% трафик майдонҳо/рамзи кӯҳнаро нест кунед.
- Ҳодиса/навбатҳо: сарбории версия (v1/v2), idempotency дастгирӣ.
- Кэш/ҷаласаҳо: калидҳои версия; Мутобиқати форматро таъмин кунед.
7) Ҳамгироӣ бо CI/CD ва Gits
CI: як маротиба сохтан, имзои тасвир, SBOM, санҷишҳо.
CD: таблиғи артефакт тавассути муҳит; Кабуд-Сабз/Канария бо манифест идора карда мешаванд.
Gitops: MR → контролер (Argo CD/Flux) вазнҳо/интихобкунандагонро истифода мебарад.
Муҳит/Тасдиқҳо: барои қадамҳои истеҳсолӣ - дарвозаи дастӣ + қарорҳои аудит.
8) NGINX/Фиристанда ва Cloud 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 (Гурӯҳҳои мақсадноки вазн)
TG-Blue: 90, TG-Green: 10 → тағир додани вазн тавассути IA/CLI.
Огоҳии Link Cloud-Watch дар бораи баргардонидани скриптҳои худкор (тағир додани вазн ба 0/100).
9) Бехатарӣ ва риояи
Боварӣ ба сифр байни версияҳо: байни сирри рамзгузорӣ/калидҳои ғалтак фарқ кунед.
Policy-as-Code: манъ кардани ҷойгиркунии тасвири имзошуда, 'охирин нест'.
Асрҳо ва конфигуратсияҳо ҳамчун артефактҳои версия; бозпас баргардонидани конфигуратсияҳоро дар бар мегирад.
Аудит: кӣ, вақте ки вазнро бардошт/селекторро иваз кард, бо кадом чипта.
10) Арзиш ва қобилият
Blue-Green барои давраи озодкунӣ ду маротиба қувваи барқро талаб мекунад → нақшаи тиреза.
Canary метавонад аз арзиши телеметрия/назорат, мундариҷаи параллелии ду версия дарозтар бошад.
Оптимизатсия: autoscaling аз ҷониби HPA/VPA, тирезаҳои кӯтоҳи кабуд-сабз, релизҳои шабона барои хидматҳои "вазнин".
11) Китобҳои корӣ
1. Таблиғотро таваққуф кунед.
2. Вазни сабзро то 0% (канарӣ) кам кунед/селекторро ба кабуд (кабуд-сабз) баргардонед.
3. Санҷед: хатогиҳо/дермонӣ ба пайвастҳои асосӣ, дренажӣ бармегарданд.
4. Ҳодисаро кушоед, артефактҳо ҷамъ кунед (гузоришҳо, роҳҳо, муқоисаи ченакҳо).
5. Ба саҳна ислоҳ кунед/сарзаниш кунед, дудро кашед, пешрафтро дубора оғоз кунед.
12) Анти-намунаҳо
Барқарор кардани артефакт дар байни саҳна ва прод (вайрон кардани "як маротиба сохтан").
Канарияи "кар" бидуни SLO/ченакҳо як расмият аст, на мудофиа.
Набудани парчамҳои хусусият: озодкунӣ маҷбур аст, ки рафторро якбора 100% дар бар гирад.
Санҷишҳои ғайрифаъол дар соҳаи тандурустӣ/зинда будан → поёни "часпанда" ва устувории бардурӯғ.
Мутобиқати пойгоҳи додаҳо "ба таври тасодуфӣ": шартнома ҳангоми гузариш вайрон мешавад.
Барчаспҳои тасвири мувофиқ/' охирин 'дар prod.
13) Рӯйхати санҷиши амалисозӣ (0-45 рӯз)
0-10 рӯз
Стратегияи хидматҳоро интихоб кунед: B/G, Canary ё якҷоя.
Фаъол кардани имзои тасвир, санҷиши саломатӣ, намунаҳои омодагӣ, 'охирин нест'.
Панелҳои SLO-ро тайёр кунед (сатҳи/хатогӣ/ченакҳои бизнес).
11-25 рӯз
Автоматикунонии вазнҳо (Istio/Argo Rollouts/ALB-вазнҳо).
Танзими қолабҳои таҳлил, огоҳиҳо ва худкори бозгашт.
Шаблон зоҳир мешавад (Helm/Kustomize), бо GIT-ҳо ҳамҷоя кунед.
26-45 рӯз
Татбиқи стратегияи тавсеаи муҳоҷират барои пойгоҳи додаҳо.
Пӯшонидани парчамҳои интиқодӣ.
"Рӯзи бозӣ" -ро сарф кунед: тақлид ва ҳодисаро тақлид кунед.
14) Нишондиҳандаҳои камолот
% релизҳо тавассути Blue-Green/Canary (ҳадаф> 90%).
Вақти миёнаи гузариш/бозгашт (ҳадаф <3 дақиқа).
Ҳиссаи релизҳо бо автономияи SLO (ва бидуни ҳодисаҳо).
Фарогирии хидмат тавассути телеметрия (пайгирӣ/гузоришҳо/ченакҳо)> 95%.
Ҳиссаи муҳоҷирати DB аз рӯи нақшаи тавсеаи муҳоҷират-шартнома> 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])
}
Қиматҳои чарх барои канарӣ (соддакардашуда)
yaml canary:
enabled: true steps:
- weight: 5 pause: 300
- weight: 25 pause: 600
- weight: 50 pause: 900 sloGuards:
max5xxPct: 0. 5 maxP95IncreasePct: 20
Амалҳои GIT Hub - пешбурди вазн (псевдо)
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) Хулоса
Кабуд-Грин ва Канария стратегияҳои мутақобила нестанд, балки стратегияҳои иловагӣ мебошанд. Онҳоро дар болои артефактҳои имзошуда, мушоҳидаи SLO, дарвозаҳои худкор ва назорати Gits созед. Таҳвили ҷудогона аз фарогирӣ, интизоми зуд ва интизоми муҳоҷиратро нигоҳ доред - ва релизҳо пешгӯишаванда, бехатар ва зуд мешаванд.