3.2. ロールアウトのデプロイ
クラスター管理者は、ユーザートラフィックのサブセットを新しいアプリケーションバージョンに段階的にルーティングするように Argo Rollouts を設定できます。次に、アプリケーションがデプロイされ、機能しているかどうかをテストできます。
次の手順例では、rollouts-demo
ロールアウトとサービスを作成します。次に、ロールアウトではトラフィックの 20% をアプリケーションのカナリアバージョンにルーティングし、手動によるプロモーションを待ちます。次に、トラフィック全体が新しいアプリケーションバージョンにルーティングされるまで、複数の自動プロモーションを実行します。
手順
-
Web コンソールの Administrator パースペクティブで、Operator
Installed Operator Red Hat OpenShift GitOps Rollout をクリックします。 -
Project ドロップダウンメニューから、
Rollout
カスタムリソース (CR) を作成および設定するプロジェクトを作成または選択します。 Create Rollout をクリックし、YAML ビューに以下の設定を入力します。
apiVersion: argoproj.io/v1alpha1 kind: Rollout metadata: name: rollouts-demo spec: replicas: 5 strategy: canary: 1 steps: 2 - setWeight: 20 3 - pause: {} 4 - setWeight: 40 - pause: {duration: 45} 5 - setWeight: 60 - pause: {duration: 20} - setWeight: 80 - pause: {duration: 10} revisionHistoryLimit: 2 selector: matchLabels: app: rollouts-demo template: 6 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
- 1
- ロールアウトで使用する必要のあるデプロイメントストラテジー。
- 2
- ロールアウトの手順を指定します。この例では、トラフィックの 20%、40%、60%、80% を段階的にカナリアバージョンにルーティングします。
- 3
- カナリアバージョンに送信する必要があるトラフィックの割合。値が 20 の場合、トラフィックの 20% がカナリアバージョンに送信されることを意味します。
- 4
- プロモーションのリクエストが見つかるまで Argo Rollouts コントローラーに、無期限に一時停止するように指定します。
- 5
- Argo Rollouts コントローラーに 45 秒間一時停止するように指定します。期間の値は、秒 (
s
)、分 (m
)、または時間 (h
) で設定できます。たとえば、1 時間の場合は1h
と指定できます。値が指定されていない場合、期間の値はデフォルトで秒になります。 - 6
- 作成する Pod を指定します。
Create をクリックします。
注記ロールアウトが作成時にすぐに利用できるように、Argo Rollouts コントローラーは、
.spec.template.spec.containers.image
フィールドで指定されたargoproj/rollouts-demo:blue
の初期コンテナーイメージを安定バージョンとして自動的に扱います。最初のインスタンスでは、Rollout
リソースの作成により、すべてのトラフィックがアプリケーションの安定バージョンにルーティングされ、トラフィックがカナリアバージョンに送信される部分がスキップされます。ただし、.spec.template.spec.containers.image
フィールドに変更を加えた以降のすべてのアプリケーションアップグレードでは、Argo Rollouts コントローラーは通常どおりカナリアの手順を実行します。次のコマンドを実行して、ロールアウトが正しく作成されたことを確認します。
$ oc argo rollouts list rollouts -n <namespace> 1
- 1
Rollout
リソースが定義されている namespace を指定します。
出力例
NAME STRATEGY STATUS STEP SET-WEIGHT READY DESIRED UP-TO-DATE AVAILABLE rollouts-demo Canary Healthy 8/8 100 5/5 5 5 5
rollouts-demo
ロールアウトをターゲットとする Kubernetes サービスを作成します。-
Web コンソールの Administrator パースペクティブで、Networking
Services をクリックします。 Create Service をクリックし、YAML ビューに次の設定を入力します。
apiVersion: v1 kind: Service metadata: name: rollouts-demo spec: ports: 1 - port: 80 targetPort: http protocol: TCP name: http selector: 2 app: rollouts-demo
Create をクリックします。
ロールアウトは、作成されたサービスをカナリア
ReplicaSet
の Pod テンプレートハッシュで自動的に更新します。例:rollouts-pod-template-hash: 687d76d795
-
Web コンソールの Administrator パースペクティブで、Networking
次のコマンドを実行して、ロールアウトの進行状況を確認します。
$ oc argo rollouts get rollout rollouts-demo --watch -n <namespace> 1
- 1
Rollout
リソースが定義されている namespace を指定します。
出力例
Name: rollouts-demo Namespace: spring-petclinic Status: ✔ Healthy Strategy: Canary Step: 8/8 SetWeight: 100 ActualWeight: 100 Images: argoproj/rollouts-demo:blue (stable) Replicas: Desired: 5 Current: 5 Updated: 5 Ready: 5 Available: 5 NAME KIND STATUS AGE INFO ⟳ rollouts-demo Rollout ✔ Healthy 4m50s └──# revision:1 └──⧉ rollouts-demo-687d76d795 ReplicaSet ✔ Healthy 4m50s stable ├──□ rollouts-demo-687d76d795-75k57 Pod ✔ Running 4m49s ready:1/1 ├──□ rollouts-demo-687d76d795-bv5zf Pod ✔ Running 4m49s ready:1/1 ├──□ rollouts-demo-687d76d795-jsxg8 Pod ✔ Running 4m49s ready:1/1 ├──□ rollouts-demo-687d76d795-rsgtv Pod ✔ Running 4m49s ready:1/1 └──□ rollouts-demo-687d76d795-xrmrj Pod ✔ Running 4m49s ready:1/1
ロールアウトの作成後、ロールアウトの Status フィールドに Phase: Healthy が表示されることを確認できます。
Rollout タブの Rollouts セクションで、
rollouts-demo
ロールアウトの Status フィールドに Phase: Healthy が表示されていることを確認します。ヒントまたは、以下のコマンドを実行して、ロールアウトが正常であることを確認できます。
$ oc argo rollouts status rollouts-demo -n <namespace> 1
- 1
Rollout
リソースが定義されている namespace を指定します。
出力例
Healthy
これで、Rollout
CR の次の更新でカナリアデプロイメントを実行する準備が整いました。