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

      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

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

  7. 카나리아 버전의 트래픽 가중치를 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

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.