3.2. 롤아웃 배포
클러스터 관리자는 사용자 트래픽의 하위 집합을 새 애플리케이션 버전으로 점진적으로 라우팅하도록 Argo 롤아웃을 구성할 수 있습니다. 그런 다음 애플리케이션이 배포되고 작동하는지 여부를 테스트할 수 있습니다.
다음 예제 절차에서는 rollouts-demo
롤아웃 및 서비스를 생성합니다. 롤아웃은 20%의 트래픽을 애플리케이션의 카나리아 버전으로 라우팅하고 수동 승격을 기다린 다음 전체 트래픽을 새 애플리케이션 버전으로 라우팅할 때까지 여러 개의 자동 승격을 수행합니다.
프로세스
-
웹 콘솔의 관리자 화면에서 Operator
설치된 Operator Red Hat OpenShift GitOps 롤아웃 을 클릭합니다. -
프로젝트 드롭다운 메뉴에서
롤아웃
사용자 정의 리소스(CR)를 생성하고 구성할 프로젝트를 생성하거나 선택합니다. 롤아웃 생성 을 클릭하고 YAML 보기에 다음 구성을 입력합니다.
apiVersion: argoproj.io/v1alpha1 kind: Rollout metadata: name: rollouts-demo spec: replicas: 5 strategy: canary: 1 steps: 2 - setWeight: 20 3 - pause: {} 4 - setWeight: 40 - pause: {duration: 45} 5 - setWeight: 60 - pause: {duration: 20} - setWeight: 80 - pause: {duration: 10} revisionHistoryLimit: 2 selector: matchLabels: app: rollouts-demo template: 6 metadata: labels: app: rollouts-demo spec: containers: - name: rollouts-demo image: argoproj/rollouts-demo:blue ports: - name: http containerPort: 8080 protocol: TCP resources: requests: memory: 32Mi cpu: 5m
- 1
- 롤아웃에서 사용해야 하는 배포 전략입니다.
- 2
- 롤아웃 단계를 지정합니다. 이 예에서는 20%, 40%, 60 % 및 80%의 트래픽을 카나리아 버전으로 점진적으로 라우팅합니다.
- 3
- 카나리아 버전으로 이동해야 하는 트래픽의 백분율입니다. 값 20은 트래픽의 20%가 카나리아 버전으로 전달됨을 의미합니다.
- 4
- 승격 요청을 찾을 때까지 무기한 중지하려면 Argo Rollouts 컨트롤러에 지정합니다.
- 5
- Argo Rollouts 컨트롤러에 45초 동안 일시 중지하도록 지정합니다. 기간 값은 초(
s
), 분(m
) 또는 시간(h
)으로 설정할 수 있습니다. 예를 들어 1시간 동안1h
를 지정할 수 있습니다. 값을 지정하지 않으면 duration 값은 기본값을 초로 설정합니다. - 6
- 생성할 Pod를 지정합니다.
생성을 클릭합니다.
참고생성 시 롤아웃을 빠르게 사용할 수 있도록 Argo Rollouts 컨트롤러는
.spec.template.spec.containers.image
필드에 지정된argoproj/rollouts-demo:blue
초기 컨테이너 이미지를 안정적인 버전으로 자동으로 처리합니다. 초기 인스턴스에서Rollout
리소스 생성은 모든 트래픽을 애플리케이션의 안정적인 버전으로 라우팅하고 트래픽이 카나리아 버전으로 전송되는 부분을 건너뜁니다. 그러나 이후의 모든 애플리케이션에서.spec.template.spec.containers.image
필드를 수정하여 업그레이드하면 Argo Rollouts 컨트롤러는 다음과 같이 카나리아 단계를 수행합니다.다음 명령을 실행하여 롤아웃이 올바르게 생성되었는지 확인합니다.
$ oc argo rollouts list rollouts -n <namespace> 1
- 1
Rollout
리소스가 정의된 네임스페이스를 지정합니다.
출력 예
NAME STRATEGY STATUS STEP SET-WEIGHT READY DESIRED UP-TO-DATE AVAILABLE rollouts-demo Canary Healthy 8/8 100 5/5 5 5 5
rollouts-demo
롤아웃을 대상으로 하는 Kubernetes 서비스를 생성합니다.-
웹 콘솔의 관리자 화면에서 네트워킹
서비스를 클릭합니다. 서비스 생성 을 클릭하고 YAML 보기에 다음 구성을 입력합니다.
apiVersion: v1 kind: Service metadata: name: rollouts-demo spec: ports: 1 - port: 80 targetPort: http protocol: TCP name: http selector: 2 app: rollouts-demo
생성을 클릭합니다.
롤아웃은 카나리아
ReplicaSet
의 Pod 템플릿 해시를 사용하여 생성된 서비스를 자동으로 업데이트합니다. 예를 들어rollouts-pod-template-hash: 687d76d795
.
-
웹 콘솔의 관리자 화면에서 네트워킹
다음 명령을 실행하여 롤아웃 진행을 확인합니다.
$ oc argo rollouts get rollout rollouts-demo --watch -n <namespace> 1
- 1
Rollout
리소스가 정의된 네임스페이스를 지정합니다.
출력 예
Name: rollouts-demo Namespace: spring-petclinic Status: ✔ Healthy Strategy: Canary Step: 8/8 SetWeight: 100 ActualWeight: 100 Images: argoproj/rollouts-demo:blue (stable) Replicas: Desired: 5 Current: 5 Updated: 5 Ready: 5 Available: 5 NAME KIND STATUS AGE INFO ⟳ rollouts-demo Rollout ✔ Healthy 4m50s └──# revision:1 └──⧉ rollouts-demo-687d76d795 ReplicaSet ✔ Healthy 4m50s stable ├──□ rollouts-demo-687d76d795-75k57 Pod ✔ Running 4m49s ready:1/1 ├──□ rollouts-demo-687d76d795-bv5zf Pod ✔ Running 4m49s ready:1/1 ├──□ rollouts-demo-687d76d795-jsxg8 Pod ✔ Running 4m49s ready:1/1 ├──□ rollouts-demo-687d76d795-rsgtv Pod ✔ Running 4m49s ready:1/1 └──□ rollouts-demo-687d76d795-xrmrj Pod ✔ Running 4m49s ready:1/1
롤아웃이 생성되면 롤아웃의 Status 필드에 Phase: Healthy 가 표시되는지 확인할 수 있습니다.
롤아웃 탭의 롤아웃 섹션에서
rollouts-demo
롤아웃의 Status 필드가 Phase: Healthy 로 표시되는지 확인합니다.작은 정보또는 다음 명령을 실행하여 롤아웃이 정상인지 확인할 수 있습니다.
$ oc argo rollouts status rollouts-demo -n <namespace> 1
- 1
Rollout
리소스가 정의된 네임스페이스를 지정합니다.
출력 예
Healthy
이제 Rollout
CR의 다음 업데이트로 카나리아 배포를 수행할 준비가 되었습니다.