3.5. ロールアウトの手動中断
カナリアデプロイメントを使用する場合、ロールアウトではアプリケーションの初期カナリアバージョンがデプロイされます。手動またはプログラム的に検証できます。カナリアバージョンを検証して安定バージョンにプロモートすると、新しい安定バージョンがすべてのユーザーに公開されます。
ただし、カナリアバージョンでバグ、エラー、またはデプロイメントの問題が発見される場合があり、カナリアロールアウトを中止して、アプリケーションの安定したバージョンにロールバックする必要がある場合があります。
カナリアロールアウトを中止すると、新しいカナリアバージョンのリソースが削除され、アプリケーションの以前の安定バージョンが復元されます。カナリアに送信されていた Ingress、ルート、仮想サービスなどのすべてのネットワークトラフィックは、元の安定バージョンに戻ります。
次のサンプル手順では、アプリケーションの新しい red
カナリアバージョンをデプロイし、完全に安定バージョンにプロモートする前に中止します。
手順
Argo Rollouts CLI で次のコマンドを実行して、コンテナーイメージのバージョンを更新し、
.spec.template.spec.containers.image
の値をargoproj/rollouts-demo:yellow
からargoproj/rollouts-demo:red
に変更します。$ oc argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:red -n <namespace> 1
- 1
ロールアウト
カスタムリソース (CR) が定義されている namespace を指定します。
出力例
rollout "rollouts-demo" image updated
ロールアウトでデプロイされたコンテナーイメージが変更され、ロールアウトによって新しいカナリアデプロイメントが開始されます。
- ロールアウトが一時停止状態になるまで待ちます。
次のコマンドを実行して、ロールアウトによって
rollouts-demo:red
カナリアバージョンがデプロイされ、一時停止ステータスに到達したことを確認します。$ oc argo rollouts get rollout rollouts-demo --watch -n <namespace> 1
- 1
Rollout
CR が定義されている namespace を指定します。
出力例
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
以下のコマンドを実行してロールアウトの更新を停止します。
$ oc argo rollouts abort rollouts-demo -n <namespace> 1
- 1
Rollout
CR が定義されている namespace を指定します。
出力例
rollout 'rollouts-demo' aborted
Argo Rollouts コントローラーは、アプリケーションのカナリアリソースを削除し、安定バージョンにロールバックします。
ロールアウトを中止した後、次のコマンドを実行して、カナリア
ReplicaSet
が 0 レプリカにスケーリングされていることを確認します。$ oc argo rollouts get rollout rollouts-demo --watch -n <namespace> 1
- 1
Rollout
CR が定義されている namespace を指定します。
出力例
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
ロールアウトステータスは
Degraded
としてマークされています。これは、アプリケーションが以前の安定バージョン (yellow)
にロールバックされているにもかかわらず、ロールアウトが現在、.spec.template.spec.containers.image
フィールド内で設定された、希望のバージョン (red
) ではないことを示しています。注記Degraded
ステータスは、アプリケーションの正常性を反映しません。これは、必要なコンテナーイメージのバージョンと実行中のコンテナーイメージのバージョンが一致していないことを示しているだけです。コンテナーイメージのバージョンを以前の安定バージョン
yellow
に更新し、次のコマンドを実行して.spec.template.spec.containers.image
の値を変更します。$ oc argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:yellow -n <namespace> 1
- 1
Rollout
CR が定義されている namespace を指定します。
出力例
rollout "rollouts-demo" image updated
ロールアウトでは、分析とプロモーションの手順がスキップされ、以前の安定したバージョン
yellow
にロールバックされ、安定したReplicaSet
のデプロイを早い段階で行うことができます。次のコマンドを実行して、ロールアウトのステータスが
Healthy
としてマークされていることを確認します。$ oc argo rollouts get rollout rollouts-demo --watch -n <namespace> 1
- 1
Rollout
CR が定義されている namespace を指定します。
出力例
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