検索

4.2. OpenShift Routes を使用してトラフィックをルーティングするように Argo Rollouts を設定する

download PDF

OpenShift Routes を使用して、ルート、ロールアウト、およびサービスを作成するように Argo Rollouts を設定できます。

以下の手順例では、ルート、ロールアウト、および 2 つのサービスを作成します。その後、徐々にトラフィックの割合を増やしてアプリケーションのカナリアバージョンにルーティングし、そのカナリア状態が成功としてマークされて新しい安定バージョンになります。

前提条件

  • OpenShift Container Platform クラスターに管理者としてログインしている。
  • OpenShift Container Platform クラスターに Red Hat OpenShift GitOps がインストールされている。
  • OpenShift Container Platform クラスターに Argo Rollouts がインストールされている。詳細は、「RolloutManager カスタムリソースの作成」を参照してください。
  • システムに Red Hat OpenShift GitOps CLI がインストールされている。詳細は、「GitOps CLI のインストール」を参照してください。
  • システムに Argo Rollouts CLI がインストールされている。詳細は、「Argo Rollouts CLI の概要」を参照してください。

手順

  1. Route オブジェクトを作成します。

    1. Web コンソールの Administrator パースペクティブで、Networking Routes をクリックします。
    2. Create Route をクリックします。
    3. Create Route ページで、YAML view をクリックし、以下のスニペットを追加します。以下の例では、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. Create をクリックしてルートを作成します。その後、Routes ページに表示されます。
  2. ルートで参照されるサービス (カナリアおよび安定) を作成します。

    1. Web コンソールの Administrator パースペクティブで、Networking Services をクリックします。
    2. Create Service をクリックします。
    3. Create Service ページで、YAML view をクリックし、以下のスニペットを追加します。以下の例では、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 フィールドの内容が、安定したサービスおよび Rollout カスタムリソース (CR) と同じであることを確認します。
      重要

      Route オブジェクトで指定されたカナリアサービスの名前が、Service オブジェクトで指定されたカナリアサービスの名前と一致していることを確認します。

    4. Create をクリックしてカナリアサービスを作成します。

      ロールアウトは、作成されたサービスをカナリア ReplicaSet の Pod テンプレートハッシュで自動的に更新します。例: rollouts-pod-template-hash: 7bf84f9696

    5. これらの手順を繰り返して安定したサービスを作成します。次の例では 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 フィールドの内容がカナリアサービスと Rollout CR と同じであることを確認します。
      重要

      Route オブジェクトで指定された安定したサービスの名前が、Service オブジェクトで指定された安定したサービスの名前と一致していることを確認します。

    6. Create をクリックして安定したサービスを作成します。

      ロールアウトは、安定した ReplicaSet の Pod テンプレートハッシュを使用して、作成されたサービスを自動的に更新します。例: rollouts-pod-template-hash: 1b6a7733

  3. Route および Service オブジェクトを参照する Rollout CR を作成します。

    1. Web コンソールの Administrator パースペクティブで、Operator Installed Operator Red Hat OpenShift GitOps Rollout に移動します。
    2. Create Rollout ページで、YAML view をクリックし、次のスニペットを追加します。次の例では、rollouts-demo という Rollout 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
      この値は、作成されたカナリア Service の名前に一致する必要があります。
      3
      この値は、作成された安定した Service の名前と一致する必要があります。
      4
      この値は、作成された Route CR の名前に一致する必要があります。
      5
      ロールアウトの手順を指定します。この例では、トラフィックの 30%、60%、100% を段階的にカナリアバージョンにルーティングします。
      6
      selector フィールドの内容が、カナリアサービスおよび安定したサービスと同じであることを確認します。
    3. Create をクリックします。

      ロールアウトの作成後、ロールアウトの Status フィールドに Phase: Healthy が表示されることを確認できます。

    4. RolloutManager タブの RolloutManagers セクションで、RolloutManager インスタンスの Status フィールドに Phase: Available と表示されていることを確認します。
  4. ルートがトラフィックの 100% をアプリケーションの安定バージョンに送信していることを確認します。

    注記

    Rollout リソースの最初のインスタンスが作成されると、ロールアウトによって、安定バージョンおよびカナリアバージョンのアプリケーションに送信されるトラフィックの量が調整されます。最初のインスタンスでは、Rollout リソースの作成により、すべてのトラフィックがアプリケーションの安定バージョンにルーティングされ、トラフィックがカナリアバージョンに送信される部分がスキップされます。

    1. Networking Routes に移動し、検証する Route リソースを探します。
    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. Web コンソールの Administrator パースペクティブで、Operator Installed Operator Red Hat OpenShift GitOps Rollout に移動します。
    2. 既存の Rollout を選択し、.spec.template.spec.containers.image の値を argoproj/rollouts-demo:blue から argoproj/rollouts-demo:yellow に変更します。

      その結果、ロールアウトにデプロイされたコンテナーイメージが変更され、ロールアウトによって新規のカナリアデプロイメントが開始されます。

      注記

      Rollout リソースの .spec.strategy.canary.steps フィールドで定義されている setWeight プロパティーに従って、最初はルートへのトラフィックの 30% がカナリアバージョンに到達し、トラフィックの 70% が安定バージョンに向けられます。トラフィックの 30% がカナリアバージョンに転送されると、ロールアウトは一時停止されます。

      トラフィックの 30% がカナリアバージョンに送られ、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 リソースが定義されている namespace を指定します。

    これにより、トラフィックの重みは、カナリアバージョンでは 60%、安定バージョンでは 40% に増加します。

    トラフィックの 60% がカナリアバージョンに送られ、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 リソースが定義されている namespace を指定します。

    トラフィックの 0% がカナリアバージョンに送られ、100% が安定バージョンに送られるルートの例。

    spec:
      # (...)
      to:
        kind: Service
        name: argo-rollouts-stable-service
        weight: 100

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.