Canary

Canary 릴리스는 새로운 버전의 소프트웨어를 천천히 노출시키는 방법입니다. 이 이론의 배경에는 처음에 새로운 버전의 소프트웨어를 지원함으로써, 문제가 있는 경우 5%의 요청만이 발견되어 롤백되기 전에 매우 적은 비율의 사용자에게만 영향을 미친다는 것입니다.

이제 Product catalog app 시나리오로 돌아가서 proddetail-v2 서비스가 출시되었으며, "XYZ.com"과 같은 더 많은 제품 카탈로그 공급업체를 포함하고 있습니다.

AWS App Mesh를 사용하여 이 새로운 버전의 proddetail-v2를 canary 방식으로 출시할 수 있는 방법을 살펴보겠습니다. 작업이 완료되면 앱은 다음과 같이 표시됩니다.

1. Canary 배포

이제 Catalog Product Detail backend service의 새 버전(버전 2)을 배포하겠습니다. 또한 Proddetail VirtualRouter를 변경하여 트래픽을 90%를 proddetail-v1 으로, 10%를 proddetail-v2 버전 2로 라우팅합니다. 또한 proddetail-v2에 대한 신뢰도가 높아짐에 따라 선형적으로 %를 증가시킬 수 있습니다.

Catalog Detail V2 서비스를 빌드합니다.

aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com
PROJECT_NAME=eks-app-mesh-demo
export APP_VERSION_2=2.0
for app in catalog_detail; do
  aws ecr describe-repositories --repository-name $PROJECT_NAME/$app >/dev/null 2>&1 || \
  aws ecr create-repository --repository-name $PROJECT_NAME/$app >/dev/null
  TARGET=$ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$PROJECT_NAME/$app:$APP_VERSION_2
  cd apps/$app
  docker build -t $TARGET -f version2/Dockerfile .
  docker push $TARGET
done
cd ../../.

아래에 표시된 canary.yaml 섹션을 보면 새로운 서비스 proddetail-v2에 10% 그리고 기존 서비스 proddetail-v1에 90%의 경로를 추가한 것을 볼 수 있습니다.

이제 proddetail-v2를 배포합니다.

envsubst < ./deployment/canary.yaml | kubectl apply -f -
kubectl get all -n prodcatalog-ns | grep 'proddetail2\|proddetail-v2'

2. Canary 테스트

다시 browser 창으로 돌아가면, Catalog Detail proddetail-v1 Version 1 이 사용되고 있는 것을 확인할 수 있습니다.

이제 Canary Deployment 버튼을 여러번 클릭하면 proddetail-V2 로 10%, proddetail-V1 으로 90%의 트래픽이 이동하는 것을 확인할 수 있습니다. proddetail-V2 에 대해서 XYZ.com 벤더가 추가된것을 확인 할 수 있습니다.

VirtualRouter의 weigh값을 조절하여 V1과 V2로 가는 트래픽 양을 조절할 수 있으며, 쉽게 V1으로 트래픽을 복구할 수도 있습니다.

Last updated