Argo Rollouts


Red Hat OpenShift GitOps 1.15

점진적인 전달을 위해 Argo Rollouts 사용

Red Hat OpenShift Documentation Team

초록

이 문서에서는 Argo Rollouts를 사용하여 선언적 롤아웃 전략에 필요한 모든 정의를 캡슐화하는 방법을 설명합니다. GitOps 워크플로의 일부로 배포를 시작, 관리 및 자동화하는 방법에 대해서도 설명합니다.

1장. Argo Rollouts 개요

GitOps 컨텍스트에서 점진적인 전달은 제어되고 점진적인 방식으로 애플리케이션 업데이트를 해제하는 프로세스입니다. 점진적인 제공으로 인해 새 버전의 애플리케이션 업데이트를 처음에 사용자의 하위 집합에만 노출하여 릴리스의 위험을 줄일 수 있습니다. 이 프로세스에는 이 새 애플리케이션 버전을 지속적으로 관찰 및 분석하여 해당 동작이 요구 사항 및 기대치와 일치하는지 확인해야 합니다. 프로세스가 애플리케이션 업데이트를 더 광범위하고 광범위한 대상에게 점진적으로 노출함에 따라 검증은 계속됩니다.

OpenShift Container Platform에서는 경로를 사용하여 다른 서비스 간에 트래픽을 분할하여 점진적인 제공 기능을 제공하지만 일반적으로 수동 개입과 관리가 필요합니다.

클러스터 관리자는 Argo 롤아웃을 사용하여 점진적인 배포 전달을 자동화하고 Kubernetes 및 OpenShift Container Platform 클러스터에서 호스팅되는 애플리케이션의 점진적인 배포를 관리할 수 있습니다. Argo Rollouts는 blue-green, canary, canary 분석 및 실험과 같은 고급 배포 기능을 제공하는 CRD(사용자 정의 리소스 정의)가 있는 컨트롤러입니다.

1.1. Argo Rollouts를 사용하는 이유는 무엇입니까?

클러스터 관리자로서 기존 인프라에서 고급 배포 전략을 관리하고 조정하려면 오랜 유지 관리 기간이 필요한 경우가 많습니다. OpenShift Container Platform 및 Red Hat OpenShift GitOps와 같은 툴을 사용한 자동화는 이러한 창을 줄일 수 있지만 이러한 전략을 설정하는 것은 여전히 어려울 수 있습니다.

Argo Rollouts를 사용하여 애플리케이션 팀이 선언적으로 롤아웃 전략을 정의할 수 있으므로 점진적인 제공을 단순화합니다. 팀은 더 이상 여러 배포 및 서비스를 정의하거나 트래픽 형성 및 테스트 통합을 위한 자동화를 생성할 필요가 없습니다.

다음과 같은 이유로 Argo 롤아웃을 사용할 수 있습니다.

  • 사용자는 최종 사용자 환경에서 점진적인 제공 방식을 보다 쉽게 채택할 수 있습니다.
  • Argo Rollouts의 사용 가능한 구조와 지침을 통해 팀은 트래픽 관리자와 복잡한 인프라에 대해 배울 필요가 없습니다.
  • 업데이트 중에 배포 전략에 따라 트래픽을 새 버전으로 점진적으로 전환하여 배포된 애플리케이션 버전의 기존 트래픽형 기능을 최적화할 수 있습니다.
  • Argo 롤아웃은 Prometheus와 같은 메트릭 공급자와 결합하여 매개변수 세트를 기반으로 메트릭 기반 및 정책 기반 롤아웃 및 롤백을 수행할 수 있습니다.
  • 최종 사용자 환경은 Red Hat OpenShift GitOps Operator의 보안을 제공하고 리소스, 비용 및 시간을 효과적으로 관리하는 데 도움이 됩니다.
  • 보안 및 자동화된 배포와 함께 Argo CD를 사용하는 기존 사용자는 프로세스 초기에 영향을 미치는 문제를 방지하는 데 사용할 수 있는 피드백을 받습니다.

1.1.1. Argo 롤아웃의 이점

Red Hat OpenShift GitOps의 기본 워크로드로 Argo 롤아웃을 사용하면 다음과 같은 이점이 있습니다.

  • GitOps 워크플로우의 일부로 점진적인 자동 제공
  • 고급 배포 기능
  • Blue-green 또는 카나리아와 같은 기존 고급 배포 전략 최적화
  • 배포를 위한 제로 다운타임 업데이트
  • 세분화되고 가중된 트래픽 전환
  • 새 트래픽이 프로덕션 환경에 도달하지 않고 테스트할 수 있음
  • 자동 롤백 및 승격
  • 수동 판단
  • 비즈니스 핵심 성과 지표 (KPI)의 사용자 정의 메트릭 쿼리 및 분석
  • 고급 트래픽 라우팅을 위한 수신 컨트롤러 및 Red Hat OpenShift Service Mesh와의 통합
  • 배포 전략 분석을 위한 메트릭 공급자와 통합
  • 여러 공급자 사용

1.2. RolloutManager 사용자 정의 리소스 및 사양 정보

Argo 롤아웃을 사용하려면 클러스터에 Red Hat OpenShift GitOps Operator를 설치한 다음 선택한 네임스페이스의 Operator에 RolloutManager CR(사용자 정의 리소스)을 생성하고 제출해야 합니다. 단일 네임스페이스 또는 여러 네임스페이스에 대해 RolloutManager CR의 범위를 지정할 수 있습니다. Operator는 다음과 같은 네임스페이스 범위 지원 리소스를 사용하여 argo-rollouts 인스턴스를 생성합니다.

  • Argo Rollouts 컨트롤러
  • Argo Rollouts 메트릭 서비스
  • Argo Rollouts 서비스 계정
  • Argo 롤아웃 역할
  • Argo Rollouts 역할 바인딩
  • Argo Rollouts 시크릿

RolloutsManager CR의 사양에 Argo Rollouts 컨트롤러 리소스에 대해 명령 인수, 환경 변수, 사용자 정의 이미지 이름 등을 지정할 수 있습니다. RolloutManager CR 사양은 Argo Rollouts의 원하는 상태를 정의합니다.

예: RolloutManager CR

apiVersion: argoproj.io/v1alpha1
kind: RolloutManager
metadata:
  name: argo-rollout
  labels:
    example: basic
spec: {}
Copy to Clipboard Toggle word wrap

1.2.1. Argo Rollouts 컨트롤러

Argo Rollouts 컨트롤러 리소스를 사용하면 네임스페이스에서 프로그레시브 애플리케이션 제공을 관리할 수 있습니다. Argo Rollouts 컨트롤러 리소스는 클러스터에 이벤트를 모니터링하고 Argo Rollouts와 관련된 모든 리소스가 변경될 때마다 반응합니다. 컨트롤러는 모든 롤아웃 세부 정보를 읽고 롤아웃 정의에 설명된 것과 동일한 상태로 클러스터를 가져옵니다.

1.3. Argo Rollouts 아키텍처 개요

Argo Rollouts 지원은 Red Hat OpenShift GitOps Operator를 설치하고 RolloutManager CR(사용자 정의 리소스) 인스턴스를 구성하여 클러스터에서 활성화됩니다.

RolloutManager CR이 생성되면 Red Hat OpenShift GitOps Operator가 Argo Rollouts를 동일한 네임스페이스에 설치합니다. 이 단계에는 Argo Rollouts 컨트롤러 설치와 CR, 역할, 역할 바인딩 및 구성 데이터와 같은 Argo 롤아웃을 처리하는 데 필요한 리소스가 포함됩니다.

Argo Rollouts 컨트롤러는 다음 두 가지 모드로 설치할 수 있습니다.

  • 클러스터 범위 모드 (기본값): 컨트롤러에서 클러스터 내의 모든 네임스페이스의 리소스를 감독합니다.
  • 네임스페이스 범위 모드: 컨트롤러는 Argo Rollouts가 배포된 네임스페이스 내의 리소스를 모니터링합니다.

Argo 롤아웃의 아키텍처는 구성 요소 및 리소스로 구성됩니다. 구성 요소는 리소스를 관리하는 데 사용됩니다. 예를 들어 AnalysisRun 컨트롤러는 AnalysisRun CR을 관리합니다.

Argo Rollouts에는 새 애플리케이션 버전이 배포되었는지 확인하기 위해 분석 지표를 수집하는 몇 가지 메커니즘이 포함되어 있습니다.

  • Prometheus metrics: AnalysisTemplate CR은 하나 이상의 메트릭의 성공 또는 실패를 평가하기 위해 Prometheus 인스턴스에 연결하도록 구성되어 있습니다.
  • Kubernetes 작업 메트릭: Argo 롤아웃은 Kubernetes 작업 리소스를 지원하여 리소스 지표에서 분석을 실행합니다. Kubernetes 작업의 성공적인 실행을 기반으로 애플리케이션을 성공적으로 배포할 수 있습니다.

1.3.1. Argo 롤아웃 구성 요소

Argo Rollouts는 사용자가 OpenShift Container Platform에서 점진적인 제공을 실습할 수 있는 여러 구성 요소로 구성됩니다.

Expand
표 1.1. Argo 롤아웃 구성 요소
이름설명

Argo Rollouts 컨트롤러

Argo Rollouts 컨트롤러는 표준 배포 리소스의 대안이며 이와 공존합니다. 이 컨트롤러는 Argo 롤아웃 리소스의 변경에만 응답하고 롤아웃 CR을 관리합니다. Argo Rollouts 컨트롤러는 표준 배포 리소스를 수정하지 않습니다.

AnalysisRun 컨트롤러

AnalysisRun 컨트롤러는 AnalysisRun 및 AnalysisTemplate CR에 대한 분석을 관리하고 수행합니다. 롤아웃을 지표 공급자에 연결하고 애플리케이션에 배포 업데이트가 성공했는지 여부를 결정하는 메트릭 임계값을 정의합니다.

실험 컨트롤러

Experiment 컨트롤러는 수명이 짧은 복제본 세트에서 분석을 실행하고 실험 사용자 정의 리소스를 관리합니다. 카나리아 배포 전략 필드에 실험 단계를 지정하여 컨트롤러를 롤아웃 리소스와 통합할 수도 있습니다.

서비스Ingress 컨트롤러

서비스 컨트롤러는 서비스 리소스를 관리하고 Ingress 컨트롤러는 Argo Rollouts에서 수정한 Ingress 리소스를 관리합니다. 이러한 컨트롤러는 트래픽 관리를 위해 애플리케이션 인스턴스에 추가 메타데이터 주석을 삽입합니다.

Argo Rollouts CLI 및 UI

Argo Rollouts는 Argo Rollouts CLI라는 oc/kubectl 플러그인을 지원합니다. 이를 사용하여 명령줄에서 롤아웃, 분석 및 실험과 같은 리소스와 상호 작용할 수 있습니다. 일시 중지,승격 또는 재시도 와 같은 작업을 수행할 수 있습니다. Argo Rollouts CLI 플러그인은 브라우저에서 로컬 웹 UI 대시보드를 시작하여 Argo 롤아웃 리소스를 시각화하는 환경을 개선할 수 있습니다.

1.3.2. Argo 롤아웃 리소스

Argo Rollout 구성 요소는 여러 리소스를 관리하여 점진적인 제공을 활성화합니다.

  • 롤아웃별 리소스: 예를 들어 롤아웃,AnalysisRun 또는 Experiment.
  • Kubernetes 네트워킹 리소스: 네트워크 트래픽 형성을 위한 서비스,인그레스 또는 경로 등의 경우입니다. Argo Rollouts는 트래픽 관리라고 하는 이러한 리소스와 통합됩니다.

이러한 리소스는 Rollout CR을 통해 애플리케이션 배포를 사용자 정의하는 데 필요합니다.

Argo Rollouts는 다음 작업을 지원합니다.

  • 카나리아 배포를 위한 백분율 기반 트래픽을 라우팅합니다.
  • ServiceIngress 리소스를 사용하여 들어오는 사용자 트래픽을 올바른 애플리케이션 버전으로 전달합니다.
  • 여러 메커니즘을 사용하여 분석 지표를 수집하여 새 버전의 애플리케이션의 배포를 검증합니다.
Expand
표 1.2. Argo 롤아웃 리소스
이름설명

rollout

이 CR을 사용하면 카나리아 또는 blue-green 배포 전략을 사용하여 애플리케이션을 배포할 수 있습니다. 기본 제공 Kubernetes 배포 리소스를 대체합니다.

AnalysisRun

이 CR은 분석을 수행하고 분석 결과를 집계하여 사용자가 애플리케이션을 성공적으로 배포하도록 안내하는 데 사용됩니다. AnalysisRun CR은 AnalysisTemplate CR의 인스턴스입니다.

AnalysisTemplate

AnalysisTemplate CR은 메트릭을 쿼리하는 방법에 대한 지침을 제공하는 템플릿 파일입니다. 이러한 지침의 결과는 AnalysisRun CR 형식의 롤아웃에 연결됩니다. AnalysisTemplate CR은 클러스터 또는 특정 롤아웃에 전역적으로 정의할 수 있습니다. Experiment 사용자 지정 리소스를 생성하여 복제본 세트에 사용할 AnalysisTemplate 목록을 연결할 수 있습니다.

실험

Experiment CR은 애플리케이션이 올바르게 배포되도록 배포 중에 애플리케이션에서 수명이 짧은 분석을 실행하는 데 사용됩니다. Experiment CR은 독립적으로 사용하거나 Rollout CR의 일부로 실행할 수 있습니다.

Service and Ingress

Argo Rollouts는 서비스 및 Ingress 컨트롤러를 사용하여 서비스와 인그레스로 트래픽 라우팅을 기본적으로 지원합니다.

경로VirtualService

OpenShift 경로 및 Red Hat OpenShift Service Mesh VirtualService 리소스는 다양한 애플리케이션 버전에서 트래픽 분할을 수행하는 데 사용됩니다.

1.4. Argo Rollouts CLI 개요

선택적 플러그인인 Argo Rollouts CLI를 사용하여 OpenShift Container Platform 웹 콘솔 또는 CLI(oc)를 사용할 필요가 없으므로 Argo Rollouts 리소스를 직접 관리하고 모니터링할 수 있습니다.

Argo Rollouts CLI 플러그인을 사용하면 다음 작업을 수행할 수 있습니다.

  • Argo 롤아웃 이미지를 변경합니다.
  • Argo Rollouts 승격의 진행 상황을 모니터링합니다.
  • 카나리아 배포에서 승격 단계를 진행합니다.
  • 실패한 Argo 롤아웃 배포를 종료합니다.

Argo Rollouts CLI 플러그인은 ockubectl 명령과 직접 통합됩니다.

2장. 점진적 배포 전달을 위해 Argo Rollouts 사용

Argo Rollouts를 사용하고 점진적인 배포를 관리하려면 클러스터에 {gitops-titel} Operator를 설치한 후 선택한 네임스페이스에서 RolloutManager CR(사용자 정의 리소스) 인스턴스를 생성하고 구성할 수 있습니다. 단일 네임스페이스 또는 여러 네임스페이스에 대해 RolloutManager CR의 범위를 지정할 수 있습니다.

2.1. 사전 요구 사항

  • cluster-admin 권한이 있는 클러스터에 액세스할 수 있습니다.
  • OpenShift Container Platform 웹 콘솔에 액세스할 수 있습니다.
  • Red Hat OpenShift GitOps 1.9.0 또는 최신 버전이 클러스터에 설치되어 있습니다.

2.2. RolloutManager 사용자 정의 리소스 생성

Red Hat OpenShift GitOps에서 Argo Rollouts를 사용하여 배포를 점진적으로 제공하려면 선택한 네임스페이스에서 RolloutManager CR(사용자 정의 리소스)을 생성하고 구성해야 합니다. 기본적으로 모든 새 argo-rollouts 인스턴스에는 배포된 네임스페이스에서만 리소스를 관리할 수 있는 권한이 있지만 필요에 따라 여러 네임스페이스에서 Argo Rollouts를 사용할 수 있습니다.

사전 요구 사항

  • Red Hat OpenShift GitOps 1.9.0 또는 최신 버전이 클러스터에 설치되어 있습니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에 클러스터 관리자로 로그인합니다.
  2. 관리자 화면에서 Operator → 설치된 Operator 를 클릭합니다.
  3. 프로젝트 드롭다운 메뉴에서 RolloutManager CR(사용자 정의 리소스)을 생성하고 구성할 프로젝트를 생성하거나 선택합니다.
  4. 설치된 Operator에서 Red Hat OpenShift GitOps 를 선택합니다.
  5. 세부 정보 탭의 제공된 API 섹션에서 RolloutManager 창에서 인스턴스 생성 을 클릭합니다.
  6. RolloutManager 생성 페이지에서 YAML 보기를 선택하고 기본 YAML을 사용하거나 요구 사항에 따라 편집합니다.

    예: RolloutManager CR

    apiVersion: argoproj.io/v1alpha1
    kind: RolloutManager
    metadata:
      name: argo-rollout
      namespace: openshift-gitops
    spec: {}
    Copy to Clipboard Toggle word wrap

  7. 생성을 클릭합니다.
  8. RolloutManager 탭의 RolloutManagers 섹션에서 RolloutManager 인스턴스의 Status 필드가 Phase: Available 로 표시되는지 확인합니다.
  9. 왼쪽 탐색 창에서 네임스페이스 범위 지원 리소스 생성을 확인합니다.

    • 워크로드배포를 클릭하여 argo-rollouts 배포를 실행 중인 1개의 Pod 중 1 개로 표시된 상태에서 사용할 수 있는지 확인합니다.
    • 워크로드시크릿을 클릭하여 argo-rollouts-notification-secret 시크릿을 사용할 수 있는지 확인합니다.
    • 네트워킹서비스를 클릭하여 argo-rollouts-metrics 서비스를 사용할 수 있는지 확인합니다.
    • 사용자 관리 → 역할을 클릭하여 argo-rollouts 역할argo-rollouts-aggregate-to-admin,argo-rollouts-aggregate-to-edit, argo-rollouts-aggregate-to-view 클러스터 역할을 사용할 수 있는지 확인합니다.
    • 사용자 관리RoleBindings 를 클릭하여 argo-rollouts 역할 바인딩을 사용할 수 있는지 확인합니다.

2.3. RolloutManager 사용자 정의 리소스 삭제

Red Hat OpenShift GitOps Operator를 설치 제거해도 설치 중에 생성된 리소스는 제거되지 않습니다. Red Hat OpenShift GitOps Operator를 제거하기 전에 RolloutManager CR(사용자 정의 리소스)을 수동으로 삭제해야 합니다.

사전 요구 사항

  • Red Hat OpenShift GitOps 1.9.0 또는 최신 버전이 클러스터에 설치되어 있습니다.
  • 네임스페이스에 RolloutManager CR이 있습니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에 클러스터 관리자로 로그인합니다.
  2. 관리자 화면에서 Operator → 설치된 Operator 를 클릭합니다.
  3. 프로젝트 드롭다운 메뉴를 클릭하고 RolloutManager CR이 포함된 프로젝트를 선택합니다.
  4. 설치된 Operator에서 Red Hat OpenShift GitOps 를 선택합니다.
  5. RolloutManager 탭을 클릭하여 RolloutManagers 섹션에서 RolloutManager 인스턴스를 찾습니다.
  6. 인스턴스를 클릭합니다.
  7. 드롭다운 메뉴에서 작업 → 롤아웃 삭제 를 클릭하고 삭제 를 클릭하여 대화 상자에서 확인합니다.
  8. RolloutManager 탭의 RolloutManagers 섹션에서 RolloutManager 인스턴스를 더 이상 사용할 수 없는지 확인합니다.
  9. 왼쪽 탐색 창에서 네임스페이스 범위의 지원 리소스가 삭제되었는지 확인합니다.

    • 워크로드배포를 클릭하여 argo-rollouts 배포가 삭제되었는지 확인합니다.
    • 워크로드시크릿을 클릭하여 argo-rollouts-notification-secret 시크릿이 삭제되었는지 확인합니다.
    • 네트워킹서비스를 클릭하여 argo-rollouts-metrics 서비스가 삭제되었는지 확인합니다.
    • 사용자 관리 → 역할을 클릭하여 argo-rollouts 역할argo-rollouts-aggregate-to-admin,argo-rollouts-aggregate-to-edit, argo-rollouts-aggregate-to-view 클러스터 역할이 삭제되었는지 확인합니다.
    • 사용자 관리RoleBindings 를 클릭하여 argo-rollouts 역할 바인딩이 삭제되었는지 확인합니다.

2.4. Linux에 Argo Rollouts CLI 설치

Linux에 Argo Rollouts CLI를 설치할 수 있습니다.

사전 요구 사항

  • OpenShift Container Platform CLI(oc)를 설치했습니다.

프로세스

  1. 다음 명령을 실행하여 Argo Rollouts CLI 바이너리 kubectl-argo-rollouts 의 최신 버전을 다운로드합니다.

    $ curl -LO https://github.com/argoproj/argo-rollouts/releases/latest/download/kubectl-argo-rollouts-linux-amd64
    Copy to Clipboard Toggle word wrap
  2. 다음 명령을 실행하여 kubectl-argo-rollouts 바이너리가 실행 가능한지 확인합니다.

    $ chmod +x ./kubectl-argo-rollouts-linux-amd64
    Copy to Clipboard Toggle word wrap
  3. 다음 명령을 실행하여 kubectl-argo-rollouts 바이너리를 시스템 경로로 이동합니다.

    # mv ./kubectl-argo-rollouts-linux-amd64 /usr/local/bin/kubectl-argo-rollouts
    Copy to Clipboard Toggle word wrap
    중요

    이 명령을 실행할 수 있는 슈퍼유저 권한이 있는지 확인합니다.

  4. 다음 명령을 실행하고 유사한 출력을 수신하여 플러그인이 올바르게 설치되었는지 확인합니다.

    $ oc argo rollouts version
    Copy to Clipboard Toggle word wrap

    출력 예

    kubectl-argo-rollouts: v1.6.6+737ca89
      BuildDate: 2024-02-13T15:39:31Z 
    1
    
      GitCommit: 737ca89b42e4791e96e05b438c2b8540737a2a1a
      GitTreeState: clean
      GoVersion: go1.20.14 
    2
    
      Compiler: gc
      Platform: linux/amd64 
    3
    Copy to Clipboard Toggle word wrap

    1
    Argo Rollouts 바이너리의 빌드 날짜 정보입니다.
    2
    Argo Rollouts 바이너리를 빌드하는 데 사용되는 Go 언어의 버전입니다.
    3
    Argo Rollouts 바이너리를 빌드하는 데 사용되는 플랫폼입니다.

2.5. Mac OS에 Argo 롤아웃 CLI 설치

macOS 사용자인 경우 Homebrew 패키지 관리자를 사용하여 Argo Rollouts CLI를 설치할 수 있습니다.

사전 요구 사항

  • Homebrew (brew) 패키지 관리자를 설치했습니다.

프로세스

  • 다음 명령을 실행하여 Argo Rollouts CLI를 설치합니다.

    $ brew install argoproj/tap/kubectl-argo-rollouts
    Copy to Clipboard Toggle word wrap

2.6. Argo CD 인스턴스에서 Argo 롤아웃 UI 활성화

Argo CD 인스턴스에서 Argo 롤아웃 UI를 활성화하려면 다음 단계를 완료합니다.

사전 요구 사항

  • cluster-admin 권한이 있는 클러스터에 액세스할 수 있습니다.
  • OpenShift Container Platform 클러스터에 Red Hat OpenShift GitOps Operator를 설치했습니다.
  • RolloutManager CR(사용자 정의 리소스)을 구성했습니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에 로그인합니다.
  2. 웹 콘솔의 관리자 화면에서 Operator설치된 Operator 를 클릭합니다.
  3. 설치된 Operator 목록에서 Red Hat OpenShift GitOps 를 선택하고 Argo CD 탭을 클릭합니다.
  4. openshift-gitops 네임스페이스의 Argo CD 탭에서 Argo CD 인스턴스를 선택합니다.
  5. YAML 을 클릭하고 다음 구성을 추가하여 Argo Rollouts UI를 구성합니다.

    Argo CD CR에서 Argo 롤아웃 UI 활성화 예

    apiVersion: argoproj.io/v1beta1
    kind: ArgoCD
    metadata:
      name: argocd
    spec:
      server:
        enableRolloutsUI: true 
    1
    Copy to Clipboard Toggle word wrap

    1
    이 값을 true 로 설정하여 enableRolloutsUI 필드를 구성합니다.
  6. 저장을 클릭합니다.
  7. 웹 콘솔의 관리자 화면에서 red hat applications menu icon 메뉴 → OpenShift GitOps클러스터 Argo CD 로 이동합니다. Argo CD 웹 UI의 로그인 페이지가 새 창에 표시됩니다.
  8. Argo CD 웹 UI에서 Argo 롤아웃 UI에 액세스하려면 Argo 롤아웃 리소스가 포함된 샘플 애플리케이션을 구성합니다.

    참고

    enableRolloutsUI 필드는 Argo CD 서버 배포 Pod를 다시 시작하므로 Argo Rollouts 확장을 사용하여 Argo CD 웹 UI에서 활성화하는 데 몇 초가 걸립니다.

3장. Argo 롤아웃 시작하기

Argo Rollouts는 카나리아Blue-Green 배포 전략을 지원합니다. 이 가이드에서는 롤아웃을 배포, 업데이트, 승격 및 수동으로 중단할 수 있도록 카나리아 배포 전략을 사용하는 예제를 제공합니다.

카나리아 기반 배포 전략을 사용하면 두 애플리케이션 버전 간에 트래픽을 분할합니다.

  • Canary version: 트래픽을 점진적으로 라우팅하는 새로운 버전의 애플리케이션입니다.
  • stable 버전: 애플리케이션의 현재 버전입니다. 카나리아 버전이 안정적이고 모든 사용자 트래픽이 전달되면 새 안정적인 버전이 됩니다. 이전 안정 버전이 삭제되었습니다.

3.1. 사전 요구 사항

  • 관리자로 OpenShift Container Platform 클러스터에 로그인했습니다.
  • OpenShift Container Platform 웹 콘솔에 액세스할 수 있습니다.
  • OpenShift Container Platform 클러스터에 Red Hat OpenShift GitOps 를 설치했습니다.
  • OpenShift Container Platform 클러스터에 Argo 롤아웃 을 설치했습니다.
  • 시스템에 Argo Rollouts CLI 를 설치했습니다.

3.2. 롤아웃 배포

클러스터 관리자는 사용자 트래픽의 하위 집합을 새 애플리케이션 버전으로 점진적으로 라우팅하도록 Argo 롤아웃을 구성할 수 있습니다. 그런 다음 애플리케이션이 배포되고 작동하는지 여부를 테스트할 수 있습니다.

다음 예제 절차에서는 rollouts-demo 롤아웃 및 서비스를 생성합니다. 롤아웃은 20%의 트래픽을 애플리케이션의 카나리아 버전으로 라우팅하고 수동 승격을 기다린 다음 전체 트래픽을 새 애플리케이션 버전으로 라우팅할 때까지 여러 개의 자동 승격을 수행합니다.

프로세스

  1. 웹 콘솔의 관리자 화면에서 Operator → 설치된 Operator Red Hat OpenShift GitOps롤아웃 을 클릭합니다.
  2. 프로젝트 드롭다운 메뉴에서 롤아웃 사용자 정의 리소스(CR)를 생성하고 구성할 프로젝트를 생성하거나 선택합니다.
  3. 롤아웃 생성 을 클릭하고 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
    Copy to Clipboard Toggle word wrap
    1
    롤아웃에서 사용해야 하는 배포 전략입니다.
    2
    롤아웃 단계를 지정합니다. 이 예에서는 20%, 40%, 60 % 및 80%의 트래픽을 카나리아 버전으로 점진적으로 라우팅합니다.
    3
    카나리아 버전으로 이동해야 하는 트래픽의 백분율입니다. 값 20은 트래픽의 20%가 카나리아 버전으로 전달됨을 의미합니다.
    4
    승격 요청을 찾을 때까지 무기한 중지하려면 Argo Rollouts 컨트롤러에 지정합니다.
    5
    Argo Rollouts 컨트롤러에 45초 동안 일시 중지하도록 지정합니다. 기간 값은 초(s), 분(m) 또는 시간(h)으로 설정할 수 있습니다. 예를 들어 1시간 동안 1h 를 지정할 수 있습니다. 값을 지정하지 않으면 duration 값은 기본값을 초로 설정합니다.
    6
    생성할 Pod를 지정합니다.
  4. 생성을 클릭합니다.

    참고

    생성 시 롤아웃을 빠르게 사용할 수 있도록 Argo Rollouts 컨트롤러는 .spec.template.spec.containers.image 필드에 지정된 argoproj/rollouts-demo:blue 초기 컨테이너 이미지를 안정적인 버전으로 자동으로 처리합니다. 초기 인스턴스에서 Rollout 리소스 생성은 모든 트래픽을 애플리케이션의 안정적인 버전으로 라우팅하고 트래픽이 카나리아 버전으로 전송되는 부분을 건너뜁니다. 그러나 이후의 모든 애플리케이션에서 .spec.template.spec.containers.image 필드를 수정하여 업그레이드하면 Argo Rollouts 컨트롤러는 다음과 같이 카나리아 단계를 수행합니다.

  5. 다음 명령을 실행하여 롤아웃이 올바르게 생성되었는지 확인합니다.

    $ oc argo rollouts list rollouts -n <namespace> 
    1
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap

  6. rollouts-demo 롤아웃을 대상으로 하는 Kubernetes 서비스를 생성합니다.

    1. 웹 콘솔의 관리자 화면에서 네트워킹서비스를 클릭합니다.
    2. 서비스 생성 을 클릭하고 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
      Copy to Clipboard Toggle word wrap
      1
      컨테이너 내부에서 실행하기 위해 애플리케이션에서 사용하는 포트의 이름을 지정합니다.
      2
      selector 필드의 콘텐츠가 Rollout CR(사용자 정의 리소스)과 동일한지 확인합니다.
    3. 생성을 클릭합니다.

      롤아웃은 카나리아 ReplicaSet 의 Pod 템플릿 해시를 사용하여 생성된 서비스를 자동으로 업데이트합니다. 예를 들어 rollouts-pod-template-hash: 687d76d795.

  7. 다음 명령을 실행하여 롤아웃 진행을 확인합니다.

    $ oc argo rollouts get rollout rollouts-demo --watch -n <namespace> 
    1
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap

    롤아웃이 생성되면 롤아웃의 Status 필드에 Phase: Healthy 가 표시되는지 확인할 수 있습니다.

  8. 롤아웃 탭의 롤아웃 섹션에서 rollouts-demo 롤아웃의 Status 필드가 Phase: Healthy 로 표시되는지 확인합니다.

    작은 정보

    또는 다음 명령을 실행하여 롤아웃이 정상인지 확인할 수 있습니다.

    $ oc argo rollouts status rollouts-demo -n <namespace> 
    1
    Copy to Clipboard Toggle word wrap
    1
    Rollout 리소스가 정의된 네임스페이스를 지정합니다.

    출력 예

    Healthy
    Copy to Clipboard Toggle word wrap

이제 Rollout CR의 다음 업데이트로 카나리아 배포를 수행할 준비가 되었습니다.

3.3. 롤아웃 업데이트

.spec.template.spec 필드(예: 컨테이너 이미지 버전)를 수정하여 롤링 CR(사용자 정의 리소스)을 업데이트하면 업데이트된 컨테이너 이미지 버전을 사용하여 ReplicaSet 을 통해 새 Pod가 생성됩니다.

프로세스

  1. 롤아웃에 배포된 컨테이너 이미지를 수정하여 애플리케이션의 새 카나리아 버전을 시뮬레이션합니다.

    1. 웹 콘솔의 관리자 화면에서 Operator → 설치된 Operator Red Hat OpenShift GitOps롤아웃 으로 이동합니다.
    2. 기존 rollouts-demo 롤아웃을 선택하고 YAML 보기에서 argoproj/rollouts-demo:blue to argoproj/rollouts-demo:yellow 에서 .spec.template.spec.containers.image 값을 수정합니다.
    3. 저장을 클릭한 다음 다시 로드 를 클릭합니다.

      롤아웃에 배포된 컨테이너 이미지가 수정되고 롤아웃에서 새 카나리아 배포를 시작합니다.

      참고

      Rollout CR의 .spec.strategy.canary.steps 필드에 정의된 setWeight 속성에 따라 처음 경로에 대한 트래픽의 20%가 카나리아 버전에 도달하고 승격 요청이 수신될 때까지 롤아웃이 무기한 일시 중지됩니다.

      카나리아 버전으로 전송되는 트래픽의 20%가 있고 승격 요청이 후속 단계에서 지정될 때까지 롤아웃이 무기한 정지되는 경로의 예

      spec:
        replicas: 5
        strategy:
          canary: 
      1
      
            steps: 
      2
      
            - setWeight: 20 
      3
      
            - pause: {}  
      4
      
        # (...)
      Copy to Clipboard Toggle word wrap

      1
      롤아웃에서 사용해야 하는 배포 전략입니다.
      2
      롤아웃 단계입니다. 이 예에서는 20%, 40%, 60 % 및 80%의 트래픽을 카나리아 버전으로 점진적으로 라우팅합니다.
      3
      카나리아 버전으로 이동해야 하는 트래픽의 백분율입니다. 값 20은 트래픽의 20%가 카나리아 버전으로 전달됨을 의미합니다.
      4
      Argo Rollouts 컨트롤러에 사양으로 승격 요청을 찾을 때까지 무기한 정지합니다.
  2. 다음 명령을 실행하여 롤아웃 진행을 확인합니다.

    $ oc argo rollouts get rollout rollouts-demo --watch -n <namespace> 
    1
    Copy to Clipboard Toggle word wrap
    1
    Rollout CR이 정의된 네임스페이스를 지정합니다.

    출력 예

    Name:            rollouts-demo
    Namespace:       spring-petclinic
    Status:          ॥ Paused
    Message:         CanaryPauseStep
    Strategy:        Canary
      Step:          1/8
      SetWeight:     20
      ActualWeight:  20
    Images:          argoproj/rollouts-demo:blue (stable)
                     argoproj/rollouts-demo:yellow (canary)
    Replicas:
      Desired:       5
      Current:       5
      Updated:       1
      Ready:         5
      Available:     5
    
    NAME                                       KIND        STATUS     AGE    INFO
    ⟳ rollouts-demo                            Rollout     ॥ Paused   9m51s
    ├──# revision:2
    │  └──⧉ rollouts-demo-6cf78c66c5           ReplicaSet  ✔ Healthy  99s    canary
    │     └──□ rollouts-demo-6cf78c66c5-zrgd4  Pod         ✔ Running  98s    ready:1/1
    └──# revision:1
       └──⧉ rollouts-demo-687d76d795           ReplicaSet  ✔ Healthy  9m51s  stable
          ├──□ rollouts-demo-687d76d795-75k57  Pod         ✔ Running  9m50s  ready:1/1
          ├──□ rollouts-demo-687d76d795-jsxg8  Pod         ✔ Running  9m50s  ready:1/1
          ├──□ rollouts-demo-687d76d795-rsgtv  Pod         ✔ Running  9m50s  ready:1/1
          └──□ rollouts-demo-687d76d795-xrmrj  Pod         ✔ Running  9m50s  ready:1/1
    Copy to Clipboard Toggle word wrap

    롤아웃의 업데이트 전략 구성에 지정된 일시 중지 기간이 없기 때문에 롤아웃이 일시 중지된 상태입니다.

  3. 이전 단계를 반복하여 새로 배포된 버전의 애플리케이션을 테스트하고 예상대로 작동하는지 확인합니다. 예를 들어 브라우저를 통해 애플리케이션과 상호 작용하여 애플리케이션을 확인하고 테스트를 실행하거나 컨테이너 로그를 관찰합니다.

    롤아웃은 다음 단계로 이동할 때까지 일시 중지된 상태로 유지됩니다.

새 버전의 애플리케이션이 예상대로 작동하는지 확인한 후 승격을 계속하거나 롤아웃을 중단할지 여부를 결정할 수 있습니다. 따라서 "출처 제공" 또는 "수동적으로 롤아웃 중단"의 지침을 따르십시오.

3.4. 롤아웃 승격

이제 롤아웃이 일시 중지된 상태에 있으므로 클러스터 관리자가 다음 단계로 진행할 수 있도록 롤아웃을 수동으로 승격해야 합니다.

프로세스

  1. Argo Rollouts CLI에서 다음 명령을 실행하여 애플리케이션의 새 카나리아 버전을 시뮬레이션합니다.

    $ oc argo rollouts promote rollouts-demo -n <namespace> 
    1
    Copy to Clipboard Toggle word wrap
    1
    Rollout 리소스가 정의된 네임스페이스를 지정합니다.

    출력 예

    rollout 'rollouts-demo' promoted
    Copy to Clipboard Toggle word wrap

    이렇게 하면 카나리아 버전에서 트래픽 가중치가 40%로 증가합니다.

  2. 다음 명령을 실행하여 롤아웃이 나머지 단계를 통해 진행되는지 확인합니다.

    $ oc argo rollouts get rollout rollouts-demo -n <namespace> --watch 
    1
    Copy to Clipboard Toggle word wrap
    1
    Rollout 리소스가 정의된 네임스페이스를 지정합니다.

    롤아웃 CR에 정의된 나머지 단계에는 일시 중지: {duration: 45} )가 설정된 기간이 있으므로 Argo Rollouts 컨트롤러는 해당 기간을 기다린 다음 다음 단계로 자동으로 이동합니다.

    모든 단계가 성공적으로 완료되면 새 ReplicaSet 오브젝트가 stable 복제본 세트로 표시됩니다.

    출력 예

    Name:            rollouts-demo
    Namespace:       spring-petclinic
    Status:          ✔ Healthy
    Strategy:        Canary
      Step:          8/8
      SetWeight:     100
      ActualWeight:  100
    Images:          argoproj/rollouts-demo:yellow (stable)
    Replicas:
      Desired:       5
      Current:       5
      Updated:       5
      Ready:         5
      Available:     5
    
    NAME                                       KIND        STATUS        AGE   INFO
    ⟳ rollouts-demo                            Rollout     ✔ Healthy     14m
    ├──# revision:2
    │  └──⧉ rollouts-demo-6cf78c66c5           ReplicaSet  ✔ Healthy     6m5s  stable
    │     ├──□ rollouts-demo-6cf78c66c5-zrgd4  Pod         ✔ Running     6m4s  ready:1/1
    │     ├──□ rollouts-demo-6cf78c66c5-g9kd5  Pod         ✔ Running     2m4s  ready:1/1
    │     ├──□ rollouts-demo-6cf78c66c5-2ptpp  Pod         ✔ Running     78s   ready:1/1
    │     ├──□ rollouts-demo-6cf78c66c5-tmk6c  Pod         ✔ Running     58s   ready:1/1
    │     └──□ rollouts-demo-6cf78c66c5-zv6lx  Pod         ✔ Running     47s   ready:1/1
    └──# revision:1
       └──⧉ rollouts-demo-687d76d795           ReplicaSet  • ScaledDown  14m
    Copy to Clipboard Toggle word wrap

3.5. 롤아웃 수동 중단

카나리아 배포를 사용하는 경우 롤아웃은 애플리케이션의 초기 카나리아 버전을 배포합니다. 수동으로 확인하거나 프로그래밍 방식으로 확인할 수 있습니다. 카나리아 버전을 확인하고 stable로 승격하면 모든 사용자가 새 안정 버전을 사용할 수 있습니다.

그러나 카나리아 버전에서 버그, 오류 또는 배포 문제가 발견되고 카나리아 롤아웃을 중단하고 애플리케이션의 안정적인 버전으로 롤백해야 하는 경우가 있습니다.

카나리아 롤아웃을 중단하면 새 카나리아 버전의 리소스가 삭제되고 이전 버전의 안정적인 애플리케이션을 복원합니다. 카나리아로 전달 중인 수신, 경로 또는 가상 서비스와 같은 모든 네트워크 트래픽은 원래의 안정적인 버전으로 돌아갑니다.

다음 예제 절차에서는 애플리케이션 새 카나리아 버전을 배포한 다음, 안정적인 것으로 완전히 승격되기 전에 이를 중단합니다.

프로세스

  1. Argo Rollouts CLI에서 다음 명령을 실행하여 컨테이너 이미지 버전을 업데이트하고 argoproj/rollouts-demo:yellow 에서 argoproj/rollouts-demo:red.spec.template.spec.containers.image 값을 수정합니다.

    $ oc argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:red -n <namespace> 
    1
    Copy to Clipboard Toggle word wrap
    1
    Rollout CR(사용자 정의 리소스)이 정의된 네임스페이스를 지정합니다.

    출력 예

    rollout "rollouts-demo" image updated
    Copy to Clipboard Toggle word wrap

    롤아웃에 배포된 컨테이너 이미지가 수정되고 롤아웃에서 새 카나리아 배포를 시작합니다.

  2. 롤아웃이 일시 중지된 상태에 도달할 때까지 기다립니다.
  3. 롤아웃이 rollouts-demo:red 카나리아 버전을 배포하고 다음 명령을 실행하여 일시 중지된 상태에 도달하는지 확인합니다.

    $ oc argo rollouts get rollout rollouts-demo --watch -n <namespace> 
    1
    Copy to Clipboard Toggle word wrap
    1
    Rollout CR이 정의된 네임스페이스를 지정합니다.

    출력 예

    Name:            rollouts-demo
    Namespace:       spring-petclinic
    Status:          ॥ Paused
    Message:         CanaryPauseStep
    Strategy:        Canary
      Step:          1/8
      SetWeight:     20
      ActualWeight:  20
    Images:          argoproj/rollouts-demo:red (canary)
                     argoproj/rollouts-demo:yellow (stable)
    Replicas:
      Desired:       5
      Current:       5
      Updated:       1
      Ready:         5
      Available:     5
    
    NAME                                       KIND        STATUS        AGE    INFO
    ⟳ rollouts-demo                            Rollout     ॥ Paused      17m
    ├──# revision:3
    │  └──⧉ rollouts-demo-5747959bdb           ReplicaSet  ✔ Healthy     75s    canary
    │     └──□ rollouts-demo-5747959bdb-fdrsg  Pod         ✔ Running     75s    ready:1/1
    ├──# revision:2
    │  └──⧉ rollouts-demo-6cf78c66c5           ReplicaSet  ✔ Healthy     9m45s  stable
    │     ├──□ rollouts-demo-6cf78c66c5-zrgd4  Pod         ✔ Running     9m44s  ready:1/1
    │     ├──□ rollouts-demo-6cf78c66c5-2ptpp  Pod         ✔ Running     4m58s  ready:1/1
    │     ├──□ rollouts-demo-6cf78c66c5-tmk6c  Pod         ✔ Running     4m38s  ready:1/1
    │     └──□ rollouts-demo-6cf78c66c5-zv6lx  Pod         ✔ Running     4m27s  ready:1/1
    └──# revision:1
       └──⧉ rollouts-demo-687d76d795           ReplicaSet  • ScaledDown  17m
    Copy to Clipboard Toggle word wrap

  4. 다음 명령을 실행하여 롤아웃 업데이트를 중지합니다.

    $ oc argo rollouts abort rollouts-demo -n <namespace> 
    1
    Copy to Clipboard Toggle word wrap
    1
    Rollout CR이 정의된 네임스페이스를 지정합니다.

    출력 예

    rollout 'rollouts-demo' aborted
    Copy to Clipboard Toggle word wrap

    Argo Rollouts 컨트롤러는 애플리케이션의 카나리아 리소스를 삭제하고 안정적인 버전으로 롤백합니다.

  5. 롤아웃을 중단한 후 다음 명령을 실행하여 카나리아 ReplicaSet 이 0 복제본으로 확장되었는지 확인합니다.

    $ oc argo rollouts get rollout rollouts-demo --watch -n <namespace> 
    1
    Copy to Clipboard Toggle word wrap
    1
    Rollout CR이 정의된 네임스페이스를 지정합니다.

    출력 예

    Name:            rollouts-demo
    Namespace:       spring-petclinic
    Status:          ✖ Degraded
    Message:         RolloutAborted: Rollout aborted update to revision 3
    Strategy:        Canary
      Step:          0/8
      SetWeight:     0
      ActualWeight:  0
    Images:          argoproj/rollouts-demo:yellow (stable)
    Replicas:
      Desired:       5
      Current:       5
      Updated:       0
      Ready:         5
      Available:     5
    
    NAME                                       KIND        STATUS        AGE    INFO
    ⟳ rollouts-demo                            Rollout     ✖ Degraded    24m
    ├──# revision:3
    │  └──⧉ rollouts-demo-5747959bdb           ReplicaSet  • ScaledDown  7m38s  canary
    ├──# revision:2
    │  └──⧉ rollouts-demo-6cf78c66c5           ReplicaSet  ✔ Healthy     16m    stable
    │     ├──□ rollouts-demo-6cf78c66c5-zrgd4  Pod         ✔ Running     16m    ready:1/1
    │     ├──□ rollouts-demo-6cf78c66c5-2ptpp  Pod         ✔ Running     11m    ready:1/1
    │     ├──□ rollouts-demo-6cf78c66c5-tmk6c  Pod         ✔ Running     11m    ready:1/1
    │     ├──□ rollouts-demo-6cf78c66c5-zv6lx  Pod         ✔ Running     10m    ready:1/1
    │     └──□ rollouts-demo-6cf78c66c5-mlbsh  Pod         ✔ Running     4m47s  ready:1/1
    └──# revision:1
       └──⧉ rollouts-demo-687d76d795           ReplicaSet  • ScaledDown  24m
    Copy to Clipboard Toggle word wrap

    롤아웃 상태는 애플리케이션이 이전 안정 버전으로 롤백되었지만 현재 롤아웃이 원하는 버전인 빨간색 이 아니며 .spec.template.spec.containers.image 필드 내에 설정된 롤아웃이 없음을 나타냅니다.

    참고

    Degraded 상태는 애플리케이션의 상태를 반영하지 않습니다. 이는 원하는 컨테이너 이미지 버전과 실행 중인 컨테이너 이미지 버전이 일치하지 않음을 나타냅니다.

  6. 다음 명령을 실행하여 컨테이너 이미지 버전을 이전 안정 버전, 노란색 으로 업데이트하고 .spec.template.spec.containers.image 값을 수정합니다.

    $ oc argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:yellow -n <namespace> 
    1
    Copy to Clipboard Toggle word wrap
    1
    Rollout CR이 정의된 네임스페이스를 지정합니다.

    출력 예

    rollout "rollouts-demo" image updated
    Copy to Clipboard Toggle word wrap

    롤아웃은 분석 및 승격 단계를 건너뛰고 이전 안정된 버전, 노란색 및 빠른 속도로 롤백하여 안정적인 ReplicaSet 배포를 추적합니다.

  7. 다음 명령을 실행하여 롤아웃 상태가 Healthy 로 즉시 표시되는지 확인합니다.

    $ oc argo rollouts get rollout rollouts-demo --watch -n <namespace> 
    1
    Copy to Clipboard Toggle word wrap
    1
    Rollout CR이 정의된 네임스페이스를 지정합니다.

    출력 예

    Name:            rollouts-demo
    Namespace:       spring-petclinic
    Status:          ✔ Healthy
    Strategy:        Canary
      Step:          8/8
      SetWeight:     100
      ActualWeight:  100
    Images:          argoproj/rollouts-demo:yellow (stable)
    Replicas:
      Desired:       5
      Current:       5
      Updated:       5
      Ready:         5
      Available:     5
    
    NAME                                       KIND        STATUS        AGE  INFO
    ⟳ rollouts-demo                            Rollout     ✔ Healthy     63m
    ├──# revision:4
    │  └──⧉ rollouts-demo-6cf78c66c5           ReplicaSet  ✔ Healthy     55m  stable
    │     ├──□ rollouts-demo-6cf78c66c5-zrgd4  Pod         ✔ Running     55m  ready:1/1
    │     ├──□ rollouts-demo-6cf78c66c5-2ptpp  Pod         ✔ Running     50m  ready:1/1
    │     ├──□ rollouts-demo-6cf78c66c5-tmk6c  Pod         ✔ Running     50m  ready:1/1
    │     ├──□ rollouts-demo-6cf78c66c5-zv6lx  Pod         ✔ Running     50m  ready:1/1
    │     └──□ rollouts-demo-6cf78c66c5-mlbsh  Pod         ✔ Running     44m  ready:1/1
    ├──# revision:3
    │  └──⧉ rollouts-demo-5747959bdb           ReplicaSet  • ScaledDown  46m
    └──# revision:1
       └──⧉ rollouts-demo-687d76d795           ReplicaSet  • ScaledDown  63m
    Copy to Clipboard Toggle word wrap

4장. Argo 롤아웃을 사용하여 트래픽 라우팅

Argo Rollouts 및 해당 트래픽 분할 메커니즘을 사용하여 사용자 트래픽의 하위 집합을 새 애플리케이션 버전으로 점진적으로 라우팅할 수 있습니다. 그런 다음 애플리케이션이 배포되고 작동하는지 여부를 테스트할 수 있습니다.

Openshift 경로를 사용하면 요구 사항에 따라 클러스터 환경의 다양한 애플리케이션으로 보내 트래픽 양을 줄이거나 늘리도록 Argo 롤아웃을 구성할 수 있습니다.

OpenShift 경로를 사용하여 두 애플리케이션 버전 간에 트래픽을 분할할 수 있습니다.

  • Canary version: 트래픽을 점진적으로 라우팅하는 새로운 버전의 애플리케이션입니다.
  • stable 버전: 애플리케이션의 현재 버전입니다. 카나리아 버전이 안정적이고 모든 사용자 트래픽이 전달되면 새 안정적인 버전이 됩니다. 이전 안정 버전이 삭제되었습니다.

4.1. 사전 요구 사항

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 개요"를 참조하십시오.

프로세스

  1. Route 오브젝트를 생성합니다.

    1. 웹 콘솔의 관리자 화면에서 네트워킹 → 경로를 클릭합니다.
    2. 경로 생성을 클릭합니다.
    3. 경로 생성 페이지에서 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
      Copy to Clipboard Toggle word wrap
      1
      컨테이너 내부에서 실행하기 위해 애플리케이션에서 사용하는 포트의 이름을 지정합니다.
      2
      경로를 보호하는 데 사용되는 TLS 구성을 지정합니다.
      3
      대상 안정적인 서비스의 이름입니다.
      4
      이 필드는 Route Rollout 플러그인에 의해 안정적인 가중치로 자동 수정됩니다.
      5
      대상 카나리아 서비스의 이름입니다.
      6
      이 필드는 Route Rollout 플러그인에 의해 카나리아 가중치로 자동 수정됩니다.
    4. 생성 을 클릭하여 경로를 생성합니다. 그런 다음 경로 페이지에 표시됩니다.
  2. 경로에서 참조할 서비스를 생성합니다.

    1. 웹 콘솔의 관리자 화면에서 네트워킹서비스를 클릭합니다.
    2. 서비스 생성을 클릭합니다.
    3. 서비스 생성 페이지에서 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
      Copy to Clipboard Toggle word wrap
      1
      컨테이너 내부에서 실행하기 위해 애플리케이션에서 사용하는 포트의 이름을 지정합니다.
      2
      selector 필드의 콘텐츠가 안정적인 서비스 및 롤아웃 CR(사용자 정의 리소스)과 동일한지 확인합니다.
      중요

      Route 오브젝트에 지정된 카나리아 서비스의 이름이 Service 오브젝트에 지정된 카나리아 서비스의 이름과 일치하는지 확인합니다.

    4. 생성 을 클릭하여 카나리아 서비스를 생성합니다.

      롤아웃은 카나리아 ReplicaSet 의 Pod 템플릿 해시를 사용하여 생성된 서비스를 자동으로 업데이트합니다. 예를 들어 rollouts-pod-template-hash: 7bf84f9696.

    5. 이 단계를 반복하여 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
      Copy to Clipboard Toggle word wrap
      1
      컨테이너 내부에서 실행하기 위해 애플리케이션에서 사용하는 포트의 이름을 지정합니다.
      2
      selector 필드의 콘텐츠가 카나리아 서비스 및 롤아웃 CR과 동일한지 확인합니다.
      중요

      Route 오브젝트에 지정된 안정적인 서비스의 이름이 Service 오브젝트에 지정된 stable 서비스의 이름과 일치하는지 확인합니다.

    6. 생성 을 클릭하여 안정적인 서비스를 생성합니다.

      롤아웃은 안정적인 ReplicaSet 의 Pod 템플릿 해시를 사용하여 생성된 서비스를 자동으로 업데이트합니다. 예를 들어 rollouts-pod-template-hash: 1b6a7733.

  3. Rollout CR을 생성하여 RouteService 오브젝트를 참조합니다.

    1. 웹 콘솔의 관리자 화면에서 Operator → 설치된 Operator Red Hat OpenShift GitOps롤아웃 으로 이동합니다.
    2. 롤아웃 생성 페이지에서 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
      Copy to Clipboard Toggle word wrap
      1
      생성할 Pod를 지정합니다.
      2
      이 값은 생성된 카나리아 서비스 의 이름과 일치해야 합니다.
      3
      이 값은 생성된 안정적인 서비스 의 이름과 일치해야 합니다.
      4
      이 값은 생성된 Route CR의 이름과 일치해야 합니다.
      5
      롤아웃 단계를 지정합니다. 이 예에서는 카나리아 버전으로 트래픽의 30%, 60% 및 100%를 모두 라우팅합니다.
      6
      selector 필드의 콘텐츠가 카나리아 및 안정적인 서비스의 내용과 동일한지 확인합니다.
    3. 생성을 클릭합니다.
    4. 롤아웃 탭의 롤아웃 섹션에서 롤아웃상태 필드에 단계: Healthy 가 표시되는지 확인합니다.
  4. 경로가 100%의 트래픽을 안정적인 버전의 애플리케이션으로 유도하는지 확인합니다.

    참고

    Rollout 리소스의 첫 번째 인스턴스가 생성되면 롤아웃은 안정적이고 카나리아 애플리케이션 버전으로 전달될 트래픽 양을 조정합니다. 초기 인스턴스에서 Rollout 리소스 생성은 모든 트래픽을 애플리케이션의 안정적인 버전으로 라우팅하고 트래픽이 카나리아 버전으로 전송되는 부분을 건너뜁니다.

    1. 네트워킹경로로 이동하여 확인할 경로 리소스를 찾습니다.
    2. 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
      Copy to Clipboard Toggle word wrap

      1
      0 은 트래픽의 0%가 카나리아 버전으로 전달됨을 의미합니다.
      2
      100 은 트래픽의 100%가 안정적인 버전으로 전달됨을 의미합니다.
  5. 롤아웃에 배포된 컨테이너 이미지를 수정하여 애플리케이션의 새 카나리아 버전을 시뮬레이션합니다.

    1. 웹 콘솔의 관리자 화면에서 Operator → 설치된 Operator Red Hat OpenShift GitOps롤아웃 으로 이동합니다.
    2. 기존 롤아웃 을 선택하고 argoproj/rollouts-demo:blue to argoproj/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
      Copy to Clipboard Toggle word wrap

  6. Argo Rollouts CLI에서 다음 명령을 실행하여 애플리케이션의 새 카나리아 버전을 시뮬레이션합니다.

    $ oc argo rollouts promote rollouts-demo -n <namespace> 
    1
    Copy to Clipboard Toggle word wrap
    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
    Copy to Clipboard Toggle word wrap

  7. 카나리아 버전의 트래픽 가중치를 100%로 늘리고 다음 명령을 실행하여 애플리케이션의 이전 안정적인 버전의 트래픽을 삭제합니다.

    $ oc argo rollouts promote rollouts-demo -n <namespace> 
    1
    Copy to Clipboard Toggle word wrap
    1
    Rollout 리소스가 정의된 네임스페이스를 지정합니다.

    카나리아 버전으로 전송되는 트래픽의 0%와 stable 버전으로 100%가 전달되는 경로의 예.

    spec:
      # (...)
      to:
        kind: Service
        name: argo-rollouts-stable-service
        weight: 100
    Copy to Clipboard Toggle word wrap

5장. OpenShift Service Mesh에 Argo 롤아웃을 사용하여 트래픽 라우팅

Red Hat OpenShift GitOps의 Argo 롤아웃은 OpenShift 경로 및 Istio 기반 OpenShift Service Mesh와 같은 다양한 트래픽 관리 메커니즘을 지원합니다.

Argo Rollouts에서 사용할 트래픽 관리자를 선택하는 옵션은 클러스터 워크로드를 배포하는 기존 트래픽 관리 솔루션에 따라 다릅니다. 예를 들어 Red Hat OpenShift 경로는 기본 트래픽 관리 기능을 제공하며 사이드카 컨테이너를 사용할 필요가 없습니다. 그러나 Red Hat OpenShift Service Mesh는 Istio를 사용하여 고급 라우팅 기능을 제공하지만 사이드카 컨테이너를 구성해야 합니다.

OpenShift Service Mesh를 사용하여 두 애플리케이션 버전 간에 트래픽을 분할할 수 있습니다.

  • Canary version: 트래픽을 점진적으로 라우팅하는 새로운 버전의 애플리케이션입니다.
  • stable 버전: 애플리케이션의 현재 버전입니다. 카나리아 버전이 안정적이고 모든 사용자 트래픽이 전달되면 새 안정적인 버전이 됩니다. 이전 안정 버전이 삭제되었습니다.

Argo Rollouts 내의 Istio-support는 게이트웨이 및 VirtualService 리소스를 사용하여 트래픽 라우팅을 처리합니다.

  • 게이트웨이: 게이트웨이 를 사용하여 메시에 대한 인바운드 및 아웃바운드 트래픽을 관리할 수 있습니다. 게이트웨이는 OpenShift Service Mesh의 진입점이며 애플리케이션으로 전송된 트래픽 요청을 처리합니다.
  • VirtualService: VirtualService는 트래픽 라우팅 규칙과 안정적인 및 카나리아 서비스와 같은 기본 서비스로 이동하는 트래픽의 백분율을 정의합니다.

샘플 배포 시나리오

예를 들어 샘플 배포 시나리오에서는 초기 인스턴스 중에 애플리케이션의 안정적인 버전으로 트래픽의 100%가 전달됩니다. 애플리케이션이 예상대로 실행되고 있으며 새 버전을 배포하려는 추가 시도가 이루어지지 않습니다.

그러나 새 버전의 애플리케이션을 배포한 후 Argo Rollouts는 새 버전의 애플리케이션을 기반으로 새 카나리아 배포를 생성하고 일부 트래픽 백분율을 해당 새 버전으로 라우팅합니다.

서비스 메시를 사용하는 경우 Argo Rollouts는 VirtualService 리소스를 자동으로 수정하여 안정적인 및 카나리아 애플리케이션 버전 간의 트래픽 분할 백분율을 제어합니다. 다음 다이어그램에서는 첫 번째 승격 후 트래픽의 20%가 카나리아 애플리케이션 버전으로 전송되고 안정적인 서비스에 의해 80%가 안정적인 버전으로 전송됩니다.

OpenShift Service Mesh를 사용하여 다음 항목을 생성하여 Argo 롤아웃을 구성할 수 있습니다.

  • 게이트웨이
  • 두 가지 Kubernetes 서비스: 각 서비스 버전 내에서 Pod를 가리키는 안정적인 및 카나리아
  • A VirtualService
  • 롤아웃 CR(사용자 정의 리소스)

다음 예제 절차에서 롤아웃은 트래픽의 20%를 카나리아 버전으로 라우팅합니다. 수동 승격 후 롤아웃은 트래픽의 40%를 라우팅합니다. 다른 수동 승격 후 롤아웃은 모든 트래픽이 새 애플리케이션 버전으로 라우팅될 때까지 여러 자동 승격을 수행합니다.

사전 요구 사항

프로세스

  1. 메시에 대한 인바운드 트래픽을 수락할 게이트웨이 오브젝트를 만듭니다.

    1. 다음 스니펫 콘텐츠를 사용하여 YAML 파일을 생성합니다.

      rollouts-demo-gateway라는 게이트웨이의 예

      apiVersion: networking.istio.io/v1alpha3
      kind: Gateway
      metadata:
        name: rollouts-demo-gateway 
      1
      
      spec:
        selector:
          istio: ingressgateway 
      2
      
        servers:
        - port:
            number: 80
            name: http
            protocol: HTTP
          hosts:
          - "*"
      Copy to Clipboard Toggle word wrap

      1
      게이트웨이의 이름입니다.
      2
      수신 게이트웨이의 이름을 지정합니다. 게이트웨이는 노출된 포트 및 프로토콜을 구성하지만 트래픽 라우팅 구성은 포함되지 않습니다.
    2. 다음 명령을 실행하여 YAML 파일을 적용합니다.

      $ oc apply -f gateway.yaml
      Copy to Clipboard Toggle word wrap
  2. 카나리아 및 안정적인 버전의 애플리케이션에 대한 서비스를 생성합니다.

    1. 웹 콘솔의 관리자 화면에서 네트워킹 → 서비스로 이동합니다.
    2. 서비스 생성을 클릭합니다.
    3. 서비스 생성 페이지에서 YAML 보기를 클릭하고 다음 스니펫을 추가합니다. 다음 예제에서는 rollouts-demo-stable 이라는 안정적인 서비스를 생성합니다. 안정적인 트래픽이 이 서비스로 전달됩니다.

      apiVersion: v1
      kind: Service
      metadata:
        name: rollouts-demo-stable
      spec:
        ports: 
      1
      
        - port: 80
          targetPort: http
          protocol: TCP
          name: http
        selector: 
      2
      
          app: rollouts-demo
      Copy to Clipboard Toggle word wrap
      1
      컨테이너 내부에서 실행하기 위해 애플리케이션에서 사용하는 포트의 이름을 지정합니다.
      2
      selector 필드의 콘텐츠가 안정적인 service 및 Rollout CR에서 동일한지 확인합니다.
    4. 생성 을 클릭하여 안정적인 서비스를 생성합니다.
    5. 서비스 생성 페이지에서 YAML 보기를 클릭하고 다음 스니펫을 추가합니다. 다음 예제에서는 rollouts-demo-canary 라는 카나리아 서비스를 생성합니다. 카나리아 트래픽은 이 서비스로 이동합니다.

      apiVersion: v1
      kind: Service
      metadata:
        name: rollouts-demo-canary
      spec:
        ports: 
      1
      
        - port: 80
          targetPort: http
          protocol: TCP
          name: http
        selector: 
      2
      
          app: rollouts-demo
      Copy to Clipboard Toggle word wrap
      1
      컨테이너 내부에서 실행하기 위해 애플리케이션에서 사용하는 포트의 이름을 지정합니다.
      2
      selector 필드의 콘텐츠가 카나리아 서비스 및 롤아웃 CR에서 동일한지 확인합니다.
    6. 생성 을 클릭하여 카나리아 서비스를 생성합니다.
  3. 들어오는 트래픽을 안정적인 카나리아 서비스로 라우팅하는 VirtualService를 생성합니다.

    1. YAML 파일을 생성한 후 다음 YAML을 이 파일에 복사합니다. 다음 예제에서는 rollouts-demo-vsvc 라는 VirtualService 를 생성합니다.

      apiVersion: networking.istio.io/v1alpha3
      kind: VirtualService
      metadata:
        name: rollouts-demo-vsvc
      spec:
        gateways:
        - rollouts-demo-gateway 
      1
      
        hosts:
        - rollouts-demo-vsvc.local
        http:
        - name: primary
          route:
          - destination:
              host: rollouts-demo-stable 
      2
      
              port:
                number: 15372 
      3
      
            weight: 100
          - destination:
              host: rollouts-demo-canary 
      4
      
              port:
                number: 15372
            weight: 0
        tls: 
      5
      
        - match:
          - port: 3000
            sniHosts:
            - rollouts-demo-vsvc.local
          route:
          - destination:
              host: rollouts-demo-stable
            weight: 100
          - destination:
              host: rollouts-demo-canary
            weight: 0
      Copy to Clipboard Toggle word wrap
      1
      게이트웨이의 이름입니다.
      2
      대상 안정적인 서비스의 이름입니다.
      3
      트래픽을 수신하는 데 사용되는 포트 번호를 지정합니다.
      4
      대상 카나리아 서비스의 이름입니다.
      5
      VirtualService를 보호하는 데 사용되는 TLS 구성을 지정합니다.
    2. 다음 명령을 실행하여 YAML 파일을 적용합니다.

      $ oc apply -f virtual-service.yaml
      Copy to Clipboard Toggle word wrap
  4. Rollout CR을 생성합니다. 이 예에서는 Istio 가 트래픽 관리자로 사용됩니다.

    1. 웹 콘솔의 관리자 화면에서 Operator → 설치된 Operator Red Hat OpenShift GitOps롤아웃 으로 이동합니다.
    2. 롤아웃 생성 페이지에서 YAML 보기를 클릭하고 다음 스니펫을 추가합니다. 다음 예제에서는 rollouts-demo 라는 롤아웃 CR을 생성합니다.

      apiVersion: argoproj.io/v1alpha1
      kind: Rollout
      metadata:
        name: rollouts-demo
      spec:
        replicas: 5
        strategy:
          canary:
            canaryService: rollouts-demo-canary 
      1
      
            stableService: rollouts-demo-stable 
      2
      
            trafficRouting:
              istio:
                virtualServices:
                - name: rollouts-demo-vsvc
                  routes:
                  - primary
            steps: 
      3
      
            - setWeight: 20
            - pause: {}
            - setWeight: 40
            - pause: {}
            - setWeight: 60
            - pause: {duration: 30}
            - setWeight: 80
            - pause: {duration: 60}
        revisionHistoryLimit: 2
        selector: 
      4
      
          matchLabels:
            app: rollouts-demo
        template:
          metadata:
            labels:
              app: rollouts-demo
              istio-injection: enabled
          spec:
            containers:
            - name: rollouts-demo
              image: argoproj/rollouts-demo:blue
              ports:
              - name: http
                containerPort: 8080
                protocol: TCP
              resources:
                requests:
                  memory: 32Mi
                  cpu: 5m
      Copy to Clipboard Toggle word wrap
      1
      이 값은 생성된 카나리아 서비스 의 이름과 일치해야 합니다.
      2
      이 값은 생성된 안정적인 서비스 의 이름과 일치해야 합니다.
      3
      롤아웃 단계를 지정합니다. 이 예에서는 카나리아 버전으로 트래픽의 20%, 40%, 60% 및 100%를 모두 라우팅합니다.
      4
      selector 필드의 콘텐츠가 카나리아 및 안정적인 서비스의 내용과 동일한지 확인합니다.
    3. 생성을 클릭합니다.
    4. 롤아웃 탭의 롤아웃 섹션에서 롤아웃상태 필드에 단계: Healthy 가 표시되는지 확인합니다.
  5. 경로가 100%의 트래픽을 안정적인 버전의 애플리케이션으로 유도하는지 확인합니다.

    1. 다음 명령을 실행하여 롤아웃 진행을 확인합니다.

      $ oc argo rollouts get rollout rollouts-demo --watch -n <namespace> 
      1
      Copy to Clipboard Toggle word wrap
      1
      Rollout 리소스가 정의된 네임스페이스를 지정합니다.

      출력 예

      Name:            rollouts-demo
      Namespace:       argo-rollouts
      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
      Copy to Clipboard Toggle word wrap

      참고

      Rollout 리소스의 첫 번째 인스턴스가 생성되면 롤아웃은 안정적이고 카나리아 애플리케이션 버전으로 전달될 트래픽 양을 조정합니다. 초기 인스턴스에서 Rollout 리소스 생성은 모든 트래픽을 애플리케이션의 안정적인 버전으로 라우팅하고 트래픽이 카나리아 버전으로 전송되는 부분을 건너뜁니다.

    2. 서비스 메시가 안정적인 서비스에 대한 트래픽의 100%와 카나리아 서비스에 대해 0%를 전송하는지 확인하려면 다음 명령을 실행합니다.

      $ oc describe virtualservice/rollouts-demo-vsvc -n <namespace>
      Copy to Clipboard Toggle word wrap
    3. 터미널에 표시된 다음 출력을 확인합니다.

      route
      - destination:
          host: rollouts-demo-stable
        weight: 100 
      1
      
      - destination:
          host: rollouts-demo-canary
        weight: 0 
      2
      Copy to Clipboard Toggle word wrap
      1
      100 은 트래픽의 100%가 안정적인 버전으로 전달됨을 의미합니다.
      2
      0 은 트래픽의 0%가 카나리아 버전으로 전달됨을 의미합니다.
  6. 롤아웃에 배포된 컨테이너 이미지를 수정하여 애플리케이션의 새 카나리아 버전을 시뮬레이션합니다.

    1. 다음 명령을 실행하여 argoproj/rollouts-demo:blue to argoproj/rollouts-demo:yellow 에서 .spec.template.spec.containers.image 값을 수정합니다.

      $ oc argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:yellow -n <namespace>
      Copy to Clipboard Toggle word wrap

      결과적으로 롤아웃에 배포된 컨테이너 이미지가 수정되고 롤아웃에서 새 카나리아 배포를 시작합니다.

      참고

      Rollout 리소스의 .spec.strategy.canary.steps 필드에 정의된 setWeight 속성에 따라 처음에 경로에 대한 트래픽의 20%가 카나리아 버전에 도달하고 트래픽의 80%가 안정적인 버전으로 이동합니다. 트래픽의 20%가 카나리아 버전으로 전달된 후 롤아웃이 일시 중지됩니다.

    2. 다음 명령을 실행하여 롤아웃 진행을 확인합니다.

      $ oc argo rollouts get rollout rollouts-demo --watch -n <namespace> 
      1
      Copy to Clipboard Toggle word wrap
      1
      Rollout 리소스가 정의된 네임스페이스를 지정합니다.

      다음 예에서 트래픽의 80%가 안정적인 서비스로 라우팅되고 트래픽의 20%는 카나리아 서비스로 라우팅됩니다. 그런 다음 수동으로 다음 수준으로 승격할 때까지 배포가 무기한 일시 중지됩니다.

      출력 예

      Name:            rollouts-demo
      Namespace:       argo-rollouts
      Status:          ॥ Paused
      Message:         CanaryPauseStep
      Strategy:        Canary
        Step:          1/8
        SetWeight:     20
        ActualWeight:  20
      Images:          argoproj/rollouts-demo:blue (stable)
                       argoproj/rollouts-demo:yellow (canary)
      Replicas:
        Desired:       5
        Current:       6
        Updated:       1
        Ready:         6
        Available:     6
      
      NAME                                       KIND        STATUS     AGE    INFO
      ⟳ rollouts-demo                            Rollout     ॥ Paused   6m51s
      ├──# revision:2
      │  └──⧉ rollouts-demo-6cf78c66c5           ReplicaSet  ✔ Healthy  99s    canary
      │     └──□ rollouts-demo-6cf78c66c5-zrgd4  Pod         ✔ Running  98s    ready:1/1
      └──# revision:1
         └──⧉ rollouts-demo-687d76d795           ReplicaSet  ✔ Healthy  9m51s  stable
            ├──□ rollouts-demo-687d76d795-75k57  Pod         ✔ Running  9m50s  ready:1/1
            ├──□ rollouts-demo-687d76d795-jsxg8  Pod         ✔ Running  9m50s  ready:1/1
            ├──□ rollouts-demo-687d76d795-rsgtv  Pod         ✔ Running  9m50s  ready:1/1
            └──□ rollouts-demo-687d76d795-xrmrj  Pod         ✔ Running  9m50s  ready:1/1
      Copy to Clipboard Toggle word wrap

      안정적인 버전으로 향하는 80%의 트래픽과 카나리아 버전으로 전송되는 트래픽의 20%를 예로 들 수 있습니다.

      route
      - destination:
          host: rollouts-demo-stable
        weight: 80 
      1
      
      - destination:
          host: rollouts-demo-canary
        weight: 20 
      2
      Copy to Clipboard Toggle word wrap

      1
      80 은 트래픽의 80%가 안정적인 버전으로 전달됨을 의미합니다.
      2
      20 은 트래픽의 20%가 카나리아 버전으로 전달됨을 의미합니다.
  7. 배포를 다음 승격 단계로 수동으로 승격합니다.

    $ oc argo rollouts promote rollouts-demo -n <namespace> 
    1
    Copy to Clipboard Toggle word wrap
    1
    Rollout 리소스가 정의된 네임스페이스를 지정합니다.
    1. 다음 명령을 실행하여 롤아웃 진행을 확인합니다.

      $ oc argo rollouts get rollout rollouts-demo --watch -n <namespace> 
      1
      Copy to Clipboard Toggle word wrap
      1
      Rollout 리소스가 정의된 네임스페이스를 지정합니다.

      다음 예에서 트래픽의 60%는 안정적인 서비스로 라우팅되고 트래픽의 40%는 카나리아 서비스로 라우팅됩니다. 그런 다음 수동으로 다음 수준으로 승격할 때까지 배포가 무기한 일시 중지됩니다.

      출력 예

      Name:            rollouts-demo
      Namespace:       argo-rollouts
      Status:          ॥ Paused
      Message:         CanaryPauseStep
      Strategy:        Canary
        Step:          3/8
        SetWeight:     40
        ActualWeight:  40
      Images:          argoproj/rollouts-demo:blue (stable)
                       argoproj/rollouts-demo:yellow (canary)
      Replicas:
        Desired:       5
        Current:       7
        Updated:       2
        Ready:         7
        Available:     7
      
      NAME                                       KIND        STATUS     AGE    INFO
      ⟳ rollouts-demo                            Rollout     ॥ Paused   9m21s
      ├──# revision:2
      │  └──⧉ rollouts-demo-6cf78c66c5           ReplicaSet  ✔ Healthy  99s    canary
      │     └──□ rollouts-demo-6cf78c66c5-zrgd4  Pod         ✔ Running  98s    ready:1/1
      └──# revision:1
         └──⧉ rollouts-demo-687d76d795           ReplicaSet  ✔ Healthy  9m51s  stable
            ├──□ rollouts-demo-687d76d795-75k57  Pod         ✔ Running  9m50s  ready:1/1
            ├──□ rollouts-demo-687d76d795-jsxg8  Pod         ✔ Running  9m50s  ready:1/1
            ├──□ rollouts-demo-687d76d795-rsgtv  Pod         ✔ Running  9m50s  ready:1/1
            └──□ rollouts-demo-687d76d795-xrmrj  Pod         ✔ Running  9m50s  ready:1/1
      Copy to Clipboard Toggle word wrap

      안정적인 버전으로 전송되는 60 % 트래픽의 예와 카나리아 버전으로 향하는 40%의 트래픽입니다.

      route
      - destination:
          host: rollouts-demo-stable
        weight: 60 
      1
      
      - destination:
          host: rollouts-demo-canary
        weight: 40 
      2
      Copy to Clipboard Toggle word wrap

      1
      60 은 트래픽의 60 %가 안정적인 버전으로 전달됨을 의미합니다.
      2
      40 은 트래픽의 40%가 카나리아 버전으로 전달됨을 의미합니다.
  8. 카나리아 버전의 트래픽 가중치를 100%로 늘리고 다음 명령을 실행하여 애플리케이션의 이전 안정적인 버전의 트래픽을 삭제합니다.

    $ oc argo rollouts promote rollouts-demo -n <namespace> 
    1
    Copy to Clipboard Toggle word wrap
    1
    Rollout 리소스가 정의된 네임스페이스를 지정합니다.
    1. 다음 명령을 실행하여 롤아웃 진행을 확인합니다.

      $ oc argo rollouts get rollout rollouts-demo --watch -n <namespace> 
      1
      Copy to Clipboard Toggle word wrap
      1
      Rollout 리소스가 정의된 네임스페이스를 지정합니다.

성공적으로 완료되면 안정적인 서비스의 가중치는 카나리아 서비스의 100% 및 0%입니다.

6장. 네임스페이스 범위의 Argo 롤아웃 설치 지원 활성화

Red Hat OpenShift GitOps는 Argo Rollouts 설치의 두 가지 모드를 지원합니다.

  • 클러스터 범위 설치 (기본값): 모든 네임스페이스에 정의된 Argo Rollouts CR(사용자 정의 리소스)은 Argo Rollouts 인스턴스에 의해 조정됩니다. 결과적으로 클러스터의 모든 네임스페이스에서 Argo Rollouts CR을 사용할 수 있습니다.
  • 네임스페이스 범위 설치: Argo Rollouts 인스턴스는 특정 네임스페이스에 설치되고 동일한 네임스페이스 내에서 Argo 롤아웃 CR만 처리합니다. 이 설치 모드에는 다음과 같은 이점이 있습니다.

    • 이 모드에서는 클러스터 전체 ClusterRole 또는 ClusterRoleBinding 권한이 필요하지 않습니다. 클러스터 권한 없이도 단일 네임 스페이스 내에서 Argo Rollouts를 설치하고 사용할 수 있습니다.
    • 이 모드는 단일 Argo 롤아웃 인스턴스의 클러스터 범위를 특정 네임스페이스로 제한하여 보안 이점을 제공합니다.
참고

의도하지 않은 권한 에스컬레이션을 방지하기 위해 Red Hat OpenShift GitOps는 한 번에 하나의 Argo 롤아웃 설치 모드만 허용합니다.

클러스터 범위 및 네임스페이스 범위의 Argo 롤아웃 설치를 전환하려면 다음 단계를 완료하십시오.

6.1. 네임스페이스 범위의 Argo 롤아웃 설치 구성

Argo Rollouts 설치의 네임스페이스 범위 인스턴스를 구성하려면 다음 단계를 완료합니다.

사전 요구 사항

  • Red Hat OpenShift GitOps 클러스터에 관리자로 로그인되어 있습니다.
  • Red Hat OpenShift GitOps를 Red Hat OpenShift GitOps 클러스터에 설치했습니다.

프로세스

  1. 웹 콘솔의 관리자 화면에서 AdministrationCustomResourceDefinitions 로 이동합니다.
  2. 서브스크립션을 검색하고 Subscription CRD를 클릭합니다.
  3. Instances 탭을 클릭한 다음 openshift-gitops-operator 서브스크립션을 클릭합니다.
  4. YAML 탭을 클릭하고 YAML 파일을 편집합니다.

    1. .spec.config.env 속성에 값이 true 로 설정된 NAMESPACE_SCOPED_ARGO_ROLLOUTS 환경 변수를 지정합니다.

      네임스페이스 범위의 Argo 롤아웃 설치 구성 예

      apiVersion: operators.coreos.com/v1alpha1
      kind: Subscription
      metadata:
        name: openshift-gitops-operator
      spec:
        # (...)
        config:
          env:
            - name: NAMESPACE_SCOPED_ARGO_ROLLOUTS
              value: 'true' 
      1
      Copy to Clipboard Toggle word wrap

      1
      'true' 로 설정된 값은 네임스페이스 범위 설치를 활성화합니다. 값을 'false' 로 설정하거나 지정하지 않으면 설치 기본값은 cluster-scoped mode입니다.
    2. 저장을 클릭합니다.

      Red Hat OpenShift GitOps Operator는 네임스페이스 범위 설치 내에서 Argo Rollouts 사용자 정의 리소스를 쉽게 조정할 수 있습니다.

  5. GitOps 컨테이너의 로그를 확인하여 Red Hat OpenShift GitOps Operator에서 네임스페이스 범위 Argo Rollouts 설치를 활성화했는지 확인합니다.

    1. 웹 콘솔의 관리자 화면에서 워크로드Pod 로 이동합니다.
    2. openshift-gitops-operator-controller-manager Pod를 클릭한 다음 로그 탭을 클릭합니다.
    3. 다음 로그 문을 찾습니다. namespaced -scoped 모드에서 실행 중입니다. 이 성명은 Red Hat OpenShift GitOps Operator가 네임스페이스 범위 Argo Rollouts 설치를 활성화했음을 나타냅니다.
  6. RolloutManager 리소스를 생성하여 네임스페이스 범위의 Argo Rollouts 설치를 완료합니다.

    1. Operator → 설치된 Operator Red Hat OpenShift GitOps 로 이동하여 RolloutManager 탭을 클릭합니다.
    2. RolloutManager 생성 을 클릭합니다.
    3. YAML 보기를 선택하고 다음 스니펫을 입력합니다.

      네임스페이스 범위 Argo 롤아웃 설치에 대한 RolloutManager CR의 예

      apiVersion: argoproj.io/v1alpha1
      kind: RolloutManager
      metadata:
        name: rollout-manager
        namespace: my-application 
      1
      
      spec:
        namespaceScoped: true
      Copy to Clipboard Toggle word wrap

      1
      네임스페이스 범위 Argo Rollouts 인스턴스를 설치할 프로젝트의 이름을 지정합니다.
    4. 생성을 클릭합니다.

      RolloutManager CR이 생성되면 Red Hat OpenShift GitOps가 네임스페이스 범위 Argo Rollouts 인스턴스를 선택한 네임스페이스에 설치하기 시작합니다.

  7. 네임스페이스 범위의 설치에 성공했는지 확인합니다.

    1. RolloutManager 탭의 RolloutManagers 섹션에서 RolloutManager 인스턴스의 Status 필드가 Phase: Available 인지 확인합니다.
    2. RolloutManagers 섹션의 YAML 탭에서 다음 출력을 검사하여 설치에 성공했는지 확인합니다.

      네임스페이스 범위의 Argo 롤아웃 설치 YAML 파일의 예

      spec:
        namespaceScoped: true
      status:
        conditions:
          lastTransitionTime: '2024-07-10T14:20:5z`
          message: ''
          reason: Success
          status: 'True' 
      1
      
          type: 'Reconciled'
        phase: Available
        rolloutController: Available
      Copy to Clipboard Toggle word wrap

      1
      이 상태는 네임스페이스 범위의 Argo 롤아웃 설치가 성공적으로 활성화되었음을 나타냅니다.

      클러스터 범위의 설치가 클러스터에 이미 존재하는 동안 네임스페이스별 Argo Rollouts 인스턴스를 설치하려고 하면 오류 메시지가 표시됩니다.

      오류 메시지가 포함된 잘못된 설치의 예

      spec:
        namespaceScoped: true
      status:
        conditions:
         lastTransitionTime: '2024-07-10T14:10:7z`
         message: 'when Subscription has environment variable NAMESPACE_SCOPED_ARGO_ROLLOUTS set to False, there may not exist any namespace-scoped RolloutManagers: only a single cluster-scoped RolloutManager is supported'
         reason: InvalidRolloutManagerScope
         status: 'False' 
      1
      
         type: 'Reconciled'
        phase: Failure
        rolloutController: Failure
      Copy to Clipboard Toggle word wrap

      1
      이 상태는 네임스페이스 범위의 Argo 롤아웃 설치가 성공적으로 활성화되지 않았음을 나타냅니다. 설치 기본값은 cluster-scoped 모드입니다.

7장. Argo Rollouts에서 트래픽 관리 및 메트릭 플러그인 구성

Argo Rollouts는 RolloutManager CR(사용자 정의 리소스)을 통해 직접 트래픽 관리 및 메트릭 플러그인 구성을 지원합니다. Argo Rollouts에서 이러한 플러그인에 대한 기본 지원에서는 구성 맵을 수동으로 수정할 필요가 없어 시스템 전체에서 일관된 구성을 보장할 수 있습니다. 결과적으로 Argo Rollouts는 구성 맵에서 사용자 정의 플러그인을 더 이상 유지하지 않습니다. 대신 RolloutManager CR 내에 지정된 플러그인에만 적용됩니다. RolloutManager CR 내에서 플러그인을 직접 관리하면 다음을 수행할 수 있습니다.

  • 중앙 집중식 플러그인 구성 제어.
  • RolloutManager CR과 구성 맵 간의 충돌을 방지합니다.
  • 구성 맵을 직접 편집하지 않고도 플러그인을 쉽게 추가, 제거 또는 수정할 수 있으므로 플러그인 관리를 단순화합니다.

트래픽 관리 플러그인은 롤아웃 중에 다양한 버전의 애플리케이션 간 트래픽 라우팅 방법을 제어하는 반면 지표 플러그인은 메트릭을 수집하고 평가하여 롤아웃 성공 또는 실패를 결정합니다.

7.1. 사전 요구 사항

  • 관리자로 OpenShift Container Platform 클러스터에 로그인했습니다.
  • OpenShift Container Platform 웹 콘솔에 액세스할 수 있습니다.
  • OpenShift Container Platform 클러스터에 Red Hat OpenShift GitOps 를 설치했습니다.
  • OpenShift Container Platform 클러스터에 Argo 롤아웃 을 설치했습니다.

7.2. Argo Rollouts에서 트래픽 관리 및 메트릭 플러그인 활성화

Argo Rollouts에서 트래픽 관리 및 메트릭 플러그인을 활성화하려면 다음 단계를 완료합니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에 클러스터 관리자로 로그인합니다.
  2. 관리자 화면에서 Operator → 설치된 Operator 를 클릭합니다.
  3. 프로젝트 드롭다운 메뉴에서 RolloutManager CR(사용자 정의 리소스)을 생성하고 구성할 프로젝트를 생성하거나 선택합니다.
  4. 설치된 Operator에서 Red Hat OpenShift GitOps 를 선택합니다.
  5. 세부 정보 탭의 제공된 API 섹션에서 RolloutManager 창에서 인스턴스 생성 을 클릭합니다.
  6. RolloutManager 생성 페이지에서 YAML 보기를 선택하고 YAML 을 편집합니다.

    RolloutManager CR에서 트래픽 관리 및 메트릭 플러그인 구성 추가 예

    apiVersion: argoproj.io/v1alpha1
    kind: RolloutManager
    metadata:
      name: argo-rollouts
    spec:
      plugins:
        trafficManagement:
          - name: argoproj-labs/gatewayAPI 
    1
    
            location: https://github.com/sample-metric-plugin 
    2
    
        metric:
          - name: argoproj-labs/sample-prometheus 
    3
    
            location: https://github.com/sample-trafficrouter-plugin 
    4
    
            sha256: dac10cbf57633c9832a17f8c27d2ca34aa97dd3d 
    5
    Copy to Clipboard Toggle word wrap

    1
    trafficManagement 플러그인의 이름을 지정합니다.
    2
    trafficManagement 플러그인의 위치를 지정합니다.
    3
    메트릭 플러그인의 이름을 지정합니다.
    4
    메트릭 플러그인의 위치를 지정합니다.
    5
    선택 사항: Rollouts 컨트롤러에서 다운로드하여 설치하는 플러그인 바이너리의 SHA256 서명을 지정합니다.
  7. 생성을 클릭합니다.
  8. RolloutManager 탭의 RolloutManagers 섹션에서 RolloutManager 인스턴스의 Status 필드가 Phase: Available 로 표시되는지 확인합니다.
  9. 다음 단계를 완료하여 트래픽 관리 및 메트릭 플러그인이 올바르게 설치되었는지 확인합니다.

    1. 관리자 관점에서 워크로드 → ConfigMap 클릭합니다.
    2. argo-rollouts-config 구성 맵을 클릭합니다.

      결과적으로 RolloutManager CR에 정의된 플러그인이 argo-rollouts-config 구성 맵에서 업데이트됩니다.

      argo-rollouts-config ConfigMap에서 업데이트된 트래픽 관리 및 메트릭 플러그인의 예

      kind: ConfigMap
      apiVersion: v1
      metadata:
        name: argo-rollouts-config
        namespace: argo-rollouts
        labels:
          app.kubernetes.io/component: argo-rollouts
          app.kubernetes.io/name: argo-rollouts
          app.kubernetes.io/part-of: argo-rollouts
      data:
        metricPlugins: |
            - name: "argoproj-labs/sample-prometheus" 
      1
      
              location: https://github.com/sample-metric-plugin 
      2
      
              sha256: dac10cbf57633c9832a17f8c27d2ca34aa97dd3d 
      3
      
        trafficRouterPlugins: |
          - name: argoproj-labs/gatewayAPI 
      4
      
            location: https://github.com/sample-metric-plugin 
      5
      
            sha256: "" 
      6
      
          - name: argoproj-labs/openshift 
      7
      
            location: file:/plugins/rollouts-trafficrouter-openshift/openshift-route-plugin 
      8
      
            sha256: "" 
      9
      Copy to Clipboard Toggle word wrap

      1
      메트릭 플러그인의 이름을 지정합니다.
      2
      메트릭 플러그인의 위치를 지정합니다.
      3
      메트릭 플러그인의 sha256 서명을 지정합니다.
      4
      trafficmanagement 플러그인의 이름을 지정합니다.
      5
      trafficmanagement 플러그인의 위치를 지정합니다.
      6
      trafficmanagement 플러그인의 sha256 서명을 지정합니다.
      7
      기본 trafficmanagement 플러그인의 이름을 지정합니다.
      8
      기본 trafficmanagement 플러그인의 위치를 지정합니다.
      9
      trafficmanagement 플러그인의 sha256 서명을 지정합니다.

    RolloutManager CR을 통해 트래픽 및 메트릭 플러그인을 직접 구성하면 롤아웃 프로세스를 간소화하고 오류 발생 가능성을 줄이며 환경 전체에서 플러그인 관리를 일관되게 유지할 수 있습니다. 이를 통해 배포 절차를 단순화하면서 제어 및 유연성이 향상됩니다.

8장. Argo Rollouts에 대한 고가용성 지원 활성화

Argo Rollouts는 RolloutManager CR(사용자 정의 리소스)에서 HA(고가용성) 활성화를 지원합니다. Argo Rollouts에서 고가용성을 구성하면 Red Hat OpenShift GitOps Operator는 RolloutManager CR의 .spec.ha 필드를 사용하여 Argo Rollouts 컨트롤러의 Pod 수를 2로 자동으로 설정합니다. 또한 리더 선택을 활성화하여 활성 상태 프로세스에서 Pod를 실행할 수 있습니다. 단일 Pod는 롤아웃을 적극적으로 관리하지만 다른 Pod는 수동 상태로 유지되므로 노드가 실패할 경우 추가 복제본에서 중복성과 가용성을 제공할 수 있습니다.

이 기능은 다운타임이나 수동 개입 없이 실행되도록 Rollouts 컨트롤러에 이점을 제공합니다. 또한 두 번째 복제본은 컨트롤러의 원활한 실행을 보장하므로 계획된 유지 관리 중에도 작동합니다. Argo Rollout에서 고가용성을 활성화하면 노드 장애 또는 워크로드가 많은 경우에도 컨트롤러가 안정적이고 탄력적으로 유지됩니다.

Red Hat OpenShift GitOps Operator는 기본적으로 anti-affinity 규칙이 적용되도록 합니다. 이러한 규칙은 사용자 정의되어 있지 않지만 단일 장애 지점을 방지하기 위해 컨트롤러 pod가 다른 노드에 배포되도록 하여 노드 장애에 대한 탄력성을 제공합니다.

사전 요구 사항

  • OpenShift Container Platform 클러스터에 관리자로 로그인되어 있습니다.
  • OpenShift Container Platform 클러스터에 Red Hat OpenShift GitOps 를 설치했습니다.
  • OpenShift Container Platform 클러스터에 Argo 롤아웃 이 설치되어 있어야 합니다.

8.1. Argo 롤아웃의 고가용성 구성

고가용성을 활성화하려면 다음 단계를 완료하여 RolloutManager CR(사용자 정의 리소스)에서 ha 사양을 구성합니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔에 클러스터 관리자로 로그인합니다.
  2. 관리자 화면에서 Operator → 설치된 Operator 를 클릭합니다.
  3. 프로젝트 드롭다운 메뉴에서 RolloutManager CR을 생성하고 구성할 프로젝트를 생성하거나 선택합니다.
  4. 설치된 Operator에서 Red Hat OpenShift GitOps 를 선택합니다.
  5. 세부 정보 탭의 제공된 API 섹션에서 RolloutManager 창에서 인스턴스 생성 을 클릭합니다.
  6. RolloutManager 생성 페이지에서 YAML 보기를 선택하고 YAML 을 편집합니다.

    RolloutManager CR에서 ha 필드 활성화 예

    apiVersion: argoproj.io/v1alpha1
    kind: RolloutManager
    metadata:
      name: argo-rollouts
      namespace: openshift-gitops
    spec:
      ha:
        enabled: true 
    1
    Copy to Clipboard Toggle word wrap

    1
    고가용성이 활성화되어 있는지 여부를 지정합니다. 값을 true 로 설정하면 고가용성이 활성화됩니다.
  7. 생성을 클릭합니다.
  8. RolloutManager 탭의 RolloutManagers 섹션에서 RolloutManager 인스턴스의 Status 필드에 Phase: Available 이 표시되는지 확인합니다.
  9. 다음 단계를 완료하여 롤아웃 배포 상태를 확인합니다.

    1. 관리자 관점에서 워크로드 → 배포를 클릭합니다.
    2. argo-rollouts 배포를 클릭합니다.
    3. 세부 정보 탭을 클릭하고 롤아웃 배포의 복제본 수가 이제 2로 설정되어 있는지 확인합니다.
    4. YAML 탭을 클릭하고 다음 구성이 표시되는지 확인합니다.

      Argo 롤아웃 배포 구성 파일의 예

      kind: Deployment
      metadata:
        name: argo-rollouts
        namespace: openshift-gitops
      spec:
        replicas: 2 
      1
      
        selector:
          matchLabels:
            app.kubernetes.io/name: argo-rollouts
        template:
          metadata:
            creationTimestamp: null
            labels:
              app.kubernetes.io/name: argo-rollouts
          spec:
            containers:
                args:
                  - '--leader-elect'
                  - 'true' 
      2
      Copy to Clipboard Toggle word wrap

      1
      Pod 수를 지정합니다.
      2
      --leader-elect=true 플래그가 Rollouts 배포에 전달되도록 지정합니다. 이 플래그가 기본적으로 true 로 설정되어 있지만 명시적으로 설정하면 리더 선택이 일관되게 적용됩니다.

context: using-cluster-scoped-argo-rollouts-instance-to-manage-rollouts-resources

기본적으로 Argo 롤아웃은 Argo Rollouts CR(사용자 정의 리소스)에 대한 클러스터 범위 설치 모드를 지원합니다. 이 설치 모드에서는 CLUSTER_SCOPED_ARGO_ROLLOUTS_NAMESPACES 환경 변수를 사용하여 롤아웃 리소스를 관리하는 데 사용할 수 있는 네임스페이스 목록을 지정합니다.

Argo 롤아웃 리소스를 관리하려면 클러스터에 Red Hat OpenShift GitOps Operator를 설치한 후 선택한 네임스페이스에서 RolloutManager CR(사용자 정의 리소스) 인스턴스를 생성하고 구성할 수 있습니다. 그런 다음 Red Hat OpenShift GitOps Operator의 기존 Subscription 오브젝트를 업데이트하고 Argo CD 인스턴스의 spec 섹션에 있는 CLUSTER_SCOPED_ARGO_ROLLOUTS_NAMESPACES 환경 변수에 사용자 정의 네임스페이스를 추가할 수 있습니다.

9.1. 사전 요구 사항

  • 관리자로 OpenShift Container Platform 클러스터에 로그인했습니다.
  • OpenShift Container Platform 클러스터에 Red Hat OpenShift GitOps Operator를 설치했습니다.
  • RolloutManager 사용자 정의 리소스를 생성했습니다.

롤아웃 리소스 관리를 위해 클러스터 범위 Argo Rollouts 인스턴스를 구성하려면 Subscription 리소스에서 CLUSTER_SCOPED_ARGO_ROLLOUTS_NAMESPACES 환경 변수를 추가합니다. 이 변수에는 클러스터 범위 Argo Rollouts 설치에 대해 구성할 수 있는 사용자 정의 네임스페이스 목록이 포함되어 있습니다. CLUSTER_SCOPED_ARGO_ROLLOUTS_NAMESPACES 환경 변수가 비어 있으면 openshift-gitops 네임스페이스에서 클러스터 범위 Argo 롤아웃 설치를 생성할 수 있습니다.

참고

NAMESPACE_SCOPED_ARGO_ROLLOUTS 변수가 false 로 설정된 경우에만 클러스터 범위의 Argo 롤아웃 인스턴스를 생성할 수 있습니다. 기본적으로 NAMESPACE_SCOPED_ARGO_ROLLOUTS 변수가 정의되지 않은 경우 false 로 설정됩니다.

프로세스

  1. 웹 콘솔의 관리자 화면에서 Operator → 설치된 OperatorRed Hat OpenShift GitOps서브스크립션 으로 이동합니다.
  2. 작업 목록을 클릭한 다음 서브스크립션 편집을 클릭합니다.
  3. openshift-gitops-operator Subscription 세부 정보 페이지의 YAML 탭에서 Argo CD 인스턴스의 네임스페이스를 CLUSTER_SCOPED_ARGO_ROLLOUTS_NAMESPACES 환경 변수에 추가하여 서브스크립션 YAML 파일을 편집합니다.

    CLUSTER_SCOPED_ARGO_ROLLOUTS_NAMESPACES 환경 변수 구성 예

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: openshift-gitops-operator
    spec:
      config:
       env:
        - name: NAMESPACE_SCOPED_ARGO_ROLLOUTS
          value: 'false' 
    1
    
        - name: CLUSTER_SCOPED_ARGO_ROLLOUTS_NAMESPACES
          value: <list_of_namespaces_in_the_cluster-scoped_Argo_CD_instances> 
    2
    
     ...
    Copy to Clipboard Toggle word wrap

    1
    클러스터 범위 설치를 활성화하거나 비활성화하려면 이 값을 지정합니다. 값을 'false' 로 설정하면 클러스터 범위 설치를 활성화했습니다. 'true' 로 설정된 경우 네임스페이스 범위 설치를 활성화했습니다. 값이 비어 있으면 false 로 설정됩니다.
    2
    클러스터 범위 Argo Rollouts 인스턴스를 호스팅할 수 있는 쉼표로 구분된 네임스페이스 목록을 지정합니다(예: test-123-cluster-scoped,test-456-cluster-scoped ).
  4. 저장다시 로드 를 클릭합니다.

법적 공지

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat