이번 글에서는 Flagger를 이용하여 Istio 환경에서 Canary 배포를 수행하는 방법을 단계별로 실습하고 정리한다. Istio 서비스 메시 환경에서 Flagger를 사용하면 점진적으로 트래픽을 새로운 버전의 애플리케이션으로 전환하면서 배포 안정성을 확인할 수 있다.
Istio가 설치된 Kubernetes 클러스터를 가정한다. Istio 설치가 안 되어 있다면 공식 문서를 따라 설치한다.
# Flagger 설치
helm repo add flagger https://flagger.app
helm upgrade -i flagger flagger/flagger \
--namespace=istio-system \
--set meshProvider=istio \
--set metricsServer=http://prometheus.istio-system:9090
샘플 애플리케이션으로 Podinfo를 활용한다.
kubectl create namespace test
kubectl label namespace test istio-injection=enabled
helm repo add podinfo https://stefanprodan.github.io/podinfo
helm upgrade -i podinfo podinfo/podinfo \
--namespace=test \
--set replicaCount=2 \
--set image.tag=6.0.0
다음과 같은 Canary CRD를 통해 Flagger가 Canary 배포 전략을 수행하도록 설정한다.
apiVersion: flagger.app/v1beta1
kind: Canary
metadata:
name: podinfo
namespace: test
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: podinfo
service:
port: 9898
gateways:
- istio-system/public-gateway
hosts:
- podinfo.example.com
analysis:
interval: 1m
threshold: 5
stepWeight: 20
maxWeight: 50
metrics:
- name: request-success-rate
thresholdRange:
min: 99
interval: 1m
위 설정의 의미:
새로운 버전으로 업그레이드하는 예시이다.
helm upgrade -i podinfo podinfo/podinfo \
--namespace=test \
--set replicaCount=2 \
--set image.tag=6.0.1
이때 Flagger가 Canary 배포를 감지하여, 점진적으로 새로운 버전에 트래픽을 전환하며 자동으로 상태를 모니터링한다.
배포 진행 상태는 다음 명령으로 확인할 수 있다.
kubectl -n test get canary podinfo -w
배포 로그 확인:
kubectl -n istio-system logs deploy/flagger -f
Istio의 Kiali를 통해 실제 트래픽이 점진적으로 새 버전으로 전환되는 모습을 시각적으로 확인할 수 있다.
이번 실습을 통해 Istio 서비스 메시 환경에서 Flagger를 이용한 Canary 배포의 구성을 실제 코드 레벨까지 수행하였다. Flagger는 배포 과정 중 서비스 품질을 모니터링하고 문제가 발생하면 자동으로 이전 버전으로 롤백하여 서비스의 안정성을 높여준다.