GH GambleHub

블루 그린 및 카나리아 배포

청록색 및 카나리아 배포

1) 도전과 핵심 아이디어

Blue-Green 및 Canary는 채택 위험을 줄이는 논스톱 릴리스 전략입니다

Blue-Green: 두 가지 병렬 버전 (파란색-액티브, 녹색-새) 을 유지하고 트래픽을 원자 적으로 전환하십시오. 빠른 롤백 → 즉시 Blue를 반환합니다.
카나리아: 새 버전을 단계적으로 켜고 (1% → 5% → 25% → 50% → 100%) SLO 메트릭을 모니터링하고 분해 중에 중지/롤백합니다.

일반적인 원칙은 "아티팩트 전달" 을 "트래픽 포함" 과 분리하고 관찰 가능성 + 롤백을 자동화하는 것입니다.

2) 선택시기

Blue-Green은 다음과 같은 경우에 적합

즉각적인 전환 (하드 RTO), 간단한 상태없는 서비스가 필요합니다.
엄격한 방출/동결 창과 맑은 연기 점검이 있습니다.
긴 이중 용량을 유지하는 것은 비용이 많이 들지만 짧은 시간 동안 가능합니다.

카나리아는 다음과 같은 경우에 적합합니다

복잡한 변경, 실제 트래픽에 대한 단계별 검증이 필요합니다.
성숙한 원격 측정 (SLO, 비즈니스 메트릭), 자동 정지 기능이 있습니다.
손상 반경 (핀 테크/아이 게임 스트림) 을 크게 제한합니다.

콤보 패턴: 그린을 출시하고 카나리아 단계 (프레임으로 Blue-Green, 트래픽을 운반하는 방법으로 Canary) 를 통해 전환하십시오.

3) 트래픽 라우팅 아키텍처

트래픽 전환/추가 옵션:

1. L4/L7 밸런서 (ALB/NLB, 클라우드로드 밸런서) -가중 대상 그룹.

2. 게이트웨이/WAF-버전 별 경로/무게, 헤더, 쿠키, 지역.

3. 서비스 메시 (Istio/Linkerd/Consul) -백분율 분포, 결함 분사, 타임 아웃/리트레이/제한 핸들.

4. Ingress/NGINX/Envoy-업스트림 가중치 및 속성 라우팅.

5. Argo Rollouts/Flagger-운영자 컨트롤러, 자동 진행, Prometheus/New Relic/Datadog과의 통합.

4) Kubernetes: 실제 템플릿

4. 1 청록색 (서비스 선택기 경유)

자격증 배포: 'app-blue' 겠습니다. '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 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

단계별로 '무게' 를 변경하십시오. DestinationRule에 재 시도, 타임 아웃, 이상 탐지기를 추가하십시오.

4. 아르고 롤 아웃 3 개 (자동 카나리아 런)

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', 'orm _ budment _ burn', 'CPU/Memory throttling'.
  • 식료품 점: 'CR (예금)', '지불 성공', '사기 점수', 'ARPPU' (차가운 창문).
정책 중지 (예):
  • 새 버전의 '5xx _ rate' 가> 0 인 경우. 10 분 동안 5% - 일시 정지 및 롤백.
  • 'p95 _ latency' TP> 베이스의 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), demempotency 지원.
캐시/세션: 버전 키; 형식 호환성을 확인하십시오.

7) CI/CD 및 GitOps와의 통합

CI: 한 번 빌드, 이미지 서명, SBOM, 테스트.
CD: 환경을 통한 아티팩트 프로모션; Blue-Green/Canary는 선언문이 적용됩니다.
GitOps: MR → 컨트롤러 (Argo CD/Flux) 는 가중치/선택기를 적용합니다.
환경/승인: 생산 단계-수동 게이트 + 감사 결정.

8) NGINX/특사 및 클라우드 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. AWS ALB 2 개 (가중 대상 그룹)

TG-Blue: 90, TG-Green: 10 → IaC/CLI를 통해 무게를 변경합니다.
Link CloudWatch는 자동 스크립트를 롤백하도록 경고합니다 (가중치를 0/100으로 변경).

9) 안전 및 준수

버전간에 제로 신뢰: 암호화 비밀/롤링 키를 구분하십시오.
코드 정책: 서명되지 않은 이미지 배포를 허용하지 않습니다 ('최신' 없음).
버전 아티팩트로서의 비밀과 구성; 롤백에는 컨피그의 롤백이 포함됩니다.
감사: 누가 무게를 들어 올렸을 때, 어떤 티켓으로 셀렉터를 바꿨습니다.

10) 비용과 용량

Blue-Green은 릴리스 기간 동안 두 배의 전력이 필요합니다. → 창을 계획하십시오.
카나리아는 원격 측정/감시 비용, 두 버전의 병렬 내용을 더 오래 지속할 수 있습니다.
최적화: HPA/VPA에 의한 자동 스케일, 짧은 Blue-Green 창, "무거운" 서비스를위한 야간 출시.

11) 런북

1. 프로모션을 일시 중지하

2. 녹색 무게를 0% (카나리아) 로/반환 선택기를 파란색 (청록색) 으로 줄입니다.
3. 체크: 오류/대기 시간이 기본, 드레인 연결로 돌아 왔습니다.
4. 사고를 열고 아티팩트 (로그, 트랙, 메트릭 비교) 를 수집하십시오.
5. 무대로 수정/비난, 연기 운전, 진행 상황 다시 시작.

12) 반 패턴

무대와 prod 사이의 인공물 재구성 ("한 번 빌드" 위반).
SLO/metrics가없는 "청각 장애인" 카나리아는 방어가 아닌 형식입니다.
기능 플래그 부족: 릴리스에는 한 번에 100% 동작이 포함되어야합니다.
작동하지 않는 건강 검진/활력 → "끈적 끈적한" 바지 및 잘못된 안정성.
"무작위로" 데이터베이스 호환성: 전환 할 때 계약이 중단됩니다.
prod에서 돌연변이 이미지 태그/' 최신 '.

13) 구현 점검표 (0-45 일)

0-10 일

B/G, 카나리아 또는 결합 된 서비스 전략을 선택하십시오.
이미지 서명, 건강 검진, 준비 샘플, '최신 없음' 사용.
SLO 대시 보드 준비 (대기 시간/오류율/비즈니스 지표).

11-25 일

무게 (Istio/Argo Rollout/ALB-weight) 를 자동화하십시오.
분석 템플릿, 알림 및 자동 롤백을 설정합니다.
템플릿 표시 (Helm/Kustomize) 는 GitOps와 통합됩니다.

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

GitHub 조치-웨이트 프로모션 (의사)

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는 상호 배타적 인 것이 아니라 보완적인 전략입니다. 서명 된 아티팩트, SLO 관측 가능성, 자동 게이트 및 GitOps 제어 위에 빌드하십시오. 포함에서 분리 된 배송, 빠른 롤백 및 마이그레이션 규율 유지 및 릴리스가 예측 가능하고 안전하며 빠릅니다.

Contact

문의하기

질문이나 지원이 필요하시면 언제든지 연락하십시오.우리는 항상 도울 준비가 되어 있습니다!

통합 시작

Email — 필수. Telegram 또는 WhatsApp — 선택 사항.

이름 선택 사항
Email 선택 사항
제목 선택 사항
메시지 선택 사항
Telegram 선택 사항
@
Telegram을 입력하시면 Email과 함께 Telegram에서도 답변드립니다.
WhatsApp 선택 사항
형식: +국가 코드 + 번호 (예: +82XXXXXXXXX).

버튼을 클릭하면 데이터 처리에 동의하는 것으로 간주됩니다.