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
    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
    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

  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
      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
    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 가 표시되는지 확인할 수 있습니다.

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

    작은 정보

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

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

    출력 예

    Healthy

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

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.