4.2. OpenShift 경로를 사용하여 트래픽을 라우팅하도록 Argo 롤아웃 구성
OpenShift 경로를 사용하여 Argo Rollouts를 구성하여 경로, 롤아웃 및 서비스를 생성할 수 있습니다.
다음 예제 절차에서는 경로, 롤아웃 및 두 개의 서비스를 생성합니다. 그런 다음 카나리아 상태가 성공으로 표시되고 새로운 안정적인 버전이 되기 전에 점차 증가하는 트래픽 백분율을 애플리케이션 카나리아 버전으로 라우팅합니다.
사전 요구 사항
- 관리자로 OpenShift Container Platform 클러스터에 로그인했습니다.
- OpenShift Container Platform 클러스터에 Red Hat OpenShift GitOps를 설치했습니다.
- OpenShift Container Platform 클러스터에 Argo 롤아웃을 설치했습니다. 자세한 내용은 " RolloutManager 사용자 정의 리소스 생성"을 참조하십시오.
- 시스템에 Red Hat OpenShift GitOps CLI를 설치했습니다. 자세한 내용은 " GitOps CLI 설치"를 참조하십시오.
- 시스템에 Argo Rollouts CLI를 설치했습니다. 자세한 내용은 "Argo Rollouts CLI 개요"를 참조하십시오.
프로세스
Route
오브젝트를 생성합니다.-
웹 콘솔의 관리자 화면에서 네트워킹
경로를 클릭합니다. - 경로 생성을 클릭합니다.
경로 생성 페이지에서 YAML 보기를 클릭하고 다음 스니펫을 추가합니다. 다음 예제에서는
rollouts-demo-route
라는 경로를 생성합니다.apiVersion: route.openshift.io/v1 kind: Route metadata: name: rollouts-demo-route spec: port: targetPort: http 1 tls: 2 insecureEdgeTerminationPolicy: Redirect termination: edge to: kind: Service name: argo-rollouts-stable-service 3 weight: 100 4 alternateBackends: - kind: Service name: argo-rollouts-canary-service 5 weight: 0 6
- 생성 을 클릭하여 경로를 생성합니다. 그런 다음 경로 페이지에 표시됩니다.
-
웹 콘솔의 관리자 화면에서 네트워킹
경로에서 참조할 서비스를 생성합니다.
-
웹 콘솔의 관리자 화면에서 네트워킹
서비스를 클릭합니다. - 서비스 생성을 클릭합니다.
서비스 생성 페이지에서 YAML 보기를 클릭하고 다음 스니펫을 추가합니다. 다음 예제에서는
argo-rollouts-canary-service
라는 카나리아 서비스를 생성합니다. 카나리아 트래픽은 이 서비스로 이동합니다.apiVersion: v1 kind: Service metadata: name: argo-rollouts-canary-service spec: ports: 1 - port: 80 targetPort: http protocol: TCP name: http selector: 2 app: rollouts-demo
중요Route
오브젝트에 지정된 카나리아 서비스의 이름이Service
오브젝트에 지정된 카나리아 서비스의 이름과 일치하는지 확인합니다.생성 을 클릭하여 카나리아 서비스를 생성합니다.
롤아웃은 카나리아
ReplicaSet
의 Pod 템플릿 해시를 사용하여 생성된 서비스를 자동으로 업데이트합니다. 예를 들어rollouts-pod-template-hash: 7bf84f9696
.이 단계를 반복하여 stable 서비스를 생성합니다. 다음 예제에서는
argo-rollouts-stable-service
라는 안정적인 서비스를 생성합니다. 안정적인 트래픽이 이 서비스로 전달됩니다.apiVersion: v1 kind: Service metadata: name: argo-rollouts-stable-service spec: ports: 1 - port: 80 targetPort: http protocol: TCP name: http selector: 2 app: rollouts-demo
중요Route
오브젝트에 지정된 안정적인 서비스의 이름이Service
오브젝트에 지정된 stable 서비스의 이름과 일치하는지 확인합니다.생성 을 클릭하여 안정적인 서비스를 생성합니다.
롤아웃은 안정적인
ReplicaSet
의 Pod 템플릿 해시를 사용하여 생성된 서비스를 자동으로 업데이트합니다. 예를 들어rollouts-pod-template-hash: 1b6a7733
.
-
웹 콘솔의 관리자 화면에서 네트워킹
Rollout
CR을 생성하여Route
및Service
오브젝트를 참조합니다.-
웹 콘솔의 관리자 화면에서 Operator
설치된 Operator Red Hat OpenShift GitOps 롤아웃 으로 이동합니다. 롤아웃 생성 페이지에서 YAML 보기를 클릭하고 다음 스니펫을 추가합니다. 다음 예제에서는
rollouts-demo
라는롤아웃
CR을 생성합니다.apiVersion: argoproj.io/v1alpha1 kind: Rollout metadata: name: rollouts-demo spec: template: 1 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 revisionHistoryLimit: 2 replicas: 5 strategy: canary: canaryService: argo-rollouts-canary-service 2 stableService: argo-rollouts-stable-service 3 trafficRouting: plugins: argoproj-labs/openshift: routes: - rollouts-demo-route 4 steps: 5 - setWeight: 30 - pause: {} - setWeight: 60 - pause: {} selector: 6 matchLabels: app: rollouts-demo
- 생성을 클릭합니다.
- 롤아웃 탭의 롤아웃 섹션에서 롤아웃 의 상태 필드에 단계: Healthy 가 표시되는지 확인합니다.
-
웹 콘솔의 관리자 화면에서 Operator
경로가 100%의 트래픽을 안정적인 버전의 애플리케이션으로 유도하는지 확인합니다.
참고Rollout
리소스의 첫 번째 인스턴스가 생성되면 롤아웃은 안정적이고 카나리아 애플리케이션 버전으로 전달될 트래픽 양을 조정합니다. 초기 인스턴스에서Rollout
리소스 생성은 모든 트래픽을 애플리케이션의 안정적인 버전으로 라우팅하고 트래픽이 카나리아 버전으로 전송되는 부분을 건너뜁니다.-
네트워킹
경로로 이동하여 확인할 경로
리소스를 찾습니다. YAML 탭을 선택하고 다음 스니펫을 확인합니다.
예:
Route
kind: Route metadata: name: rollouts-demo-route spec: alternateBackends: - kind: Service name: argo-rollouts-canary-service weight: 0 1 # (...) to: kind: Service name: argo-rollouts-stable-service weight: 100 2
-
네트워킹
롤아웃에 배포된 컨테이너 이미지를 수정하여 애플리케이션의 새 카나리아 버전을 시뮬레이션합니다.
-
웹 콘솔의 관리자 화면에서 Operator
설치된 Operator Red Hat OpenShift GitOps 롤아웃 으로 이동합니다. 기존 롤아웃 을 선택하고
argoproj/rollouts-demo:blue
toargoproj/rollouts-demo:yellow
에서.spec.template.spec.containers.image
값을 수정합니다.결과적으로 롤아웃에 배포된 컨테이너 이미지가 수정되고 롤아웃에서 새 카나리아 배포를 시작합니다.
참고Rollout
리소스의.spec.strategy.canary.steps
필드에 정의된setWeight
속성에 따라 처음 경로에 대한 트래픽의 30%가 카나리아 버전에 도달하고 트래픽의 70%가 안정적인 버전으로 이동합니다. 트래픽의 30%가 카나리아 버전으로 전달된 후 롤아웃이 일시 중지됩니다.카나리아 버전으로 전송되는 트래픽의 30 %와 stable 버전으로 향하는 70 %의 경로의 예.
spec: alternateBackends: - kind: Service name: argo-rollouts-canary-service weight: 30 # (...) to: kind: Service name: argo-rollouts-stable-service weight: 70
-
웹 콘솔의 관리자 화면에서 Operator
Argo Rollouts CLI에서 다음 명령을 실행하여 애플리케이션의 새 카나리아 버전을 시뮬레이션합니다.
$ oc argo rollouts promote rollouts-demo -n <namespace> 1
- 1
Rollout
리소스가 정의된 네임스페이스를 지정합니다.
이렇게 하면 카나리아 버전의 트래픽 가중치가 60%이고 안정적인 버전의 40%가 증가합니다.
카나리아 버전으로 전송되는 트래픽의 60 %와 stable 버전으로 향하는 40 %의 경로의 예.
spec: alternateBackends: - kind: Service name: argo-rollouts-canary-service weight: 60 # (...) to: kind: Service name: argo-rollouts-stable-service weight: 40
카나리아 버전의 트래픽 가중치를 100%로 늘리고 다음 명령을 실행하여 애플리케이션의 이전 안정적인 버전의 트래픽을 삭제합니다.
$ oc argo rollouts promote rollouts-demo -n <namespace> 1
- 1
Rollout
리소스가 정의된 네임스페이스를 지정합니다.
카나리아 버전으로 전송되는 트래픽의 0%와 stable 버전으로 100%가 전달되는 경로의 예.
spec: # (...) to: kind: Service name: argo-rollouts-stable-service weight: 100