Progressive Delivery는 제품의 업데이트를 제어하고 점진적인 방식으로 릴리스하는 프로세스로, 일반적으로 자동화와 메트릭 분석을 결합하여 업데이트의 자동 승격 또는 롤백을 유도합니다.
Progressive Delivery은 CI/CD에서 제공하는 속도 이점을 구축 프로세스로 확장하는 continuous delivery의 발전으로 설명되기도 합니다. 이는 새 버전의 노출을 사용자 하위 집합에 제한하고 올바른 동작을 관찰 및 분석한 다음, 정확성을 지속적으로 검증하면서 더 넓고 광범위한 대상자에 대한 노출을 점진적으로 증가시킴으로써 가능합니다.
Argo Rollouts는 Kubernetes 컨트롤러이자 CRD 집합으로, Blue/green과 canary 배포 및 분석, 실험 및 Kubernetes에 대한 점진적 제공 기능과 같은 고급 배포 기능을 제공합니다.
Argo Rollouts은 수신 컨트롤러 및 서비스 메시와 통합되어 트래픽 조절 기능을 활용하여 업데이트 중에 트래픽을 점차 새 버전으로 전환합니다. 또한 다양한 공급자의 메트릭을 쿼리하고 해석하여 주요 KPI를 확인하고 업데이트 중에 자동화된 프로모션 또는 롤백을 수행할 수 있습니다.
파일 rollout.yaml, service.yaml, ingress.yaml, bluegreen.yaml 이렇게 4개 파일이 있어야 합니다.
rollout.yaml 파일을 보면 아래와 같이 canary strategy가 정의되어 있습니다.
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: rollouts-demo
spec:
strategy:
canary:
# canaryService and stableService are references to Services which the Rollout will modify
# to target the canary ReplicaSet and stable ReplicaSet respectively (required).
canaryService: rollouts-demo-canary
stableService: rollouts-demo-stable
trafficRouting:
alb:
# The referenced ingress will be injected with a custom action annotation, directing
# the AWS Load Balancer Controller to split traffic between the canary and stable
# Service, according to the desired traffic weight (required).
ingress: rollouts-demo-ingress
# Reference to a Service that the Ingress must target in one of the rules (optional).
# If omitted, uses canary.stableService.
rootService: rollouts-demo-root
# Service port is the port which the Service listens on (required).
servicePort: 443
...