3.5. ロールアウトの手動中断
canary デプロイメントを使用する場合、ロールアウトではアプリケーションの初期 canary バージョンがデプロイされます。手動またはプログラム的に検証できます。canary バージョンを検証して stable バージョンにプロモートすると、新しい stable バージョンがすべてのユーザーに公開されます。
ただし、canary バージョンでバグ、エラー、またはデプロイメントの問題が発見される場合があり、canary ロールアウトを中止して、アプリケーションの stable バージョンにロールバックする必要がある場合があります。
canary ロールアウトを中止すると、新しい canary バージョンのリソースが削除され、アプリケーションの以前の stable バージョンが復元されます。canary に送信されていた Ingress、ルート、仮想サービスなどのすべてのネットワークトラフィックは、元の stable バージョンに戻ります。
次のサンプル手順では、アプリケーションの新しい red
canary バージョンをデプロイし、完全に stable バージョンにプロモートする前に中止します。
手順
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
ロールアウトでデプロイされたコンテナーイメージが変更され、ロールアウトによって新しい canary デプロイメントが開始されます。
- ロールアウトが一時停止状態になるまで待ちます。
次のコマンドを実行して、ロールアウトによって
rollouts-demo:red
canary バージョンがデプロイされ、一時停止ステータスに到達したことを確認します。$ 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 コントローラーは、アプリケーションの canary リソースを削除し、stable バージョンにロールバックします。
ロールアウトを中止した後、次のコマンドを実行して、canary
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