4.2. OpenShift Routes を使用してトラフィックをルーティングするように Argo Rollouts を設定する
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 の概要」を参照してください。
手順
Route
オブジェクトを作成します。-
Web コンソールの Administrator パースペクティブで、Networking
Routes をクリックします。 - Create Route をクリックします。
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
- Create をクリックしてルートを作成します。その後、Routes ページに表示されます。
-
Web コンソールの Administrator パースペクティブで、Networking
ルートで参照されるサービス (カナリアおよび安定) を作成します。
-
Web コンソールの Administrator パースペクティブで、Networking
Services をクリックします。 - Create Service をクリックします。
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
重要Route
オブジェクトで指定されたカナリアサービスの名前が、Service
オブジェクトで指定されたカナリアサービスの名前と一致していることを確認します。Create をクリックしてカナリアサービスを作成します。
ロールアウトは、作成されたサービスをカナリア
ReplicaSet
の Pod テンプレートハッシュで自動的に更新します。例:rollouts-pod-template-hash: 7bf84f9696
。これらの手順を繰り返して安定したサービスを作成します。次の例では
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
オブジェクトで指定された安定したサービスの名前と一致していることを確認します。Create をクリックして安定したサービスを作成します。
ロールアウトは、安定した
ReplicaSet
の Pod テンプレートハッシュを使用して、作成されたサービスを自動的に更新します。例:rollouts-pod-template-hash: 1b6a7733
。
-
Web コンソールの Administrator パースペクティブで、Networking
Route
およびService
オブジェクトを参照するRollout
CR を作成します。-
Web コンソールの Administrator パースペクティブで、Operator
Installed Operator Red Hat OpenShift GitOps Rollout に移動します。 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
- Create をクリックします。
- Rollout タブの Rollout セクションで、ロールアウトの Status フィールドに Phase: Healthy と表示されていることを確認します。
-
Web コンソールの Administrator パースペクティブで、Operator
ルートがトラフィックの 100% をアプリケーションの安定バージョンに送信していることを確認します。
注記Rollout
リソースの最初のインスタンスが作成されると、ロールアウトによって、安定バージョンおよびカナリアバージョンのアプリケーションに送信されるトラフィックの量が調整されます。最初のインスタンスでは、Rollout
リソースの作成により、すべてのトラフィックがアプリケーションの安定バージョンにルーティングされ、トラフィックがカナリアバージョンに送信される部分がスキップされます。-
Networking
Routes に移動し、検証する Route
リソースを探します。 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
-
Networking
ロールアウトでデプロイされたコンテナーイメージを変更して、アプリケーションの新しいカナリアバージョンをシミュレートします。
-
Web コンソールの Administrator パースペクティブで、Operator
Installed Operator Red Hat OpenShift GitOps Rollout に移動します。 既存の 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
-
Web コンソールの Administrator パースペクティブで、Operator
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
次のコマンドを実行して、カナリアバージョンのトラフィックの重みを 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