Argo Rollouts
Argo Rollouts を使用したプログレッシブ配信
概要
第1章 Argo Rollouts の概要 リンクのコピーリンクがクリップボードにコピーされました!
GitOps のコンテキストでは、プログレッシブ配信は、制御された段階的な方法でアプリケーションの更新をリリースするプロセスです。プログレッシブ配信では、アプリケーション更新の新しいバージョンを最初は一部のユーザーにのみ公開することで、リリースのリスクを軽減します。このプロセスには、この新しいアプリケーションバージョンを継続的に観察および分析して、その動作が設定された要件および期待と一致するかどうかを検証することが含まれます。このプロセスによりてアプリケーションの更新が徐々に幅広いユーザーに公開されるにつれて、検証は継続されます。
OpenShift Container Platform は、ルートを使用して異なるサービス間でトラフィックを分割することにより、ある程度の段階的な配信機能を提供しますが、これには通常、手動による介入と管理が必要です。
Argo Rollouts を使用すると、クラスター管理者はプログレッシブデプロイメントの配信を自動化し、Kubernetes および OpenShift Container Platform クラスターでホストされているアプリケーションのプログレッシブデプロイメントを管理できます。Argo Rollouts は、blue-green、canary、canary 分析、実験などの高度なデプロイメント機能を提供するカスタムリソース定義 (CRD) を備えたコントローラーです。
1.1. Argo Rollouts を使用する理由 リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者として、従来のインフラストラクチャーにおける高度なデプロイメントストラテジーの管理と調整には、メンテナンス期間が長くなる可能性があります。OpenShift Container Platform や Red Hat OpenShift GitOps などのツールを使用した自動化により、これらの期間を短縮できますが、これらの戦略を設定するのは依然として困難な場合があります。
Argo Rollouts を使用すると、アプリケーションチームがロールアウトストラテジーを宣言的に定義できるようになり、プログレッシブ配信が簡素化されます。チームは、複数のデプロイメントやサービスを定義したり、トラフィックシェーピングやテストの統合のための自動化を作成したりする必要がなくなりました。
以下を理由に、Argo Rollouts を使用できます。
- エンドユーザー環境でのプログレッシブ配信をより簡単に導入できます。
- Argo Rollouts の構造とガイドラインを利用すれば、チームはトラフィックマネージャーや複雑なインフラストラクチャーを学習する必要がなくなります。
- 更新中、デプロイメントストラテジーに応じて、トラフィックを新しいバージョンに徐々に移行することで、デプロイされたアプリケーションバージョンの既存のトラフィックシェーピング機能を最適化できます。
- Argo Rollouts を Prometheus などのメトリックプロバイダーと組み合わせて、パラメーターセットに基づいてメトリックベースおよびポリシー駆動のロールアウトとロールバックを実行できます。
- エンドユーザー環境は、Red Hat OpenShift GitOps Operator のセキュリティーを取得し、リソース、コスト、および時間を効果的に管理するのに役立ちます。
- セキュリティーと自動デプロイメントを備えた Argo CD を使用している既存のユーザーは、プロセスの早い段階でフィードバックを受け取り、それを使用して影響のある問題を回避できます。
1.1.1. Argo Rollouts の利点 リンクのコピーリンクがクリップボードにコピーされました!
Argo Rollouts を Red Hat OpenShift GitOps のデフォルトのワークロードとして使用すると、次の利点があります。
- GitOps ワークフローの一部として自動化されたプログレッシブ配信
- 高度なデプロイメント機能
- Blue-Green や canary などの既存の高度なデプロイメント戦略を最適化
- デプロイメント時のダウンタイムがない更新
- きめ細かく重み付けされたトラフィックのシフト
- 実稼働環境に新しいトラフィックが到達することなくテスト可能
- 自動化されたロールバックとプロモーション
- 手動判定
- カスタマイズ可能な指標クエリーとビジネス主要業績評価指標 (KPI) の分析
- 高度なトラフィックルーティングのための Ingress コントローラーおよび Red Hat OpenShift Service Mesh との統合
- デプロイメント戦略分析のためのメトリックプロバイダーとの統合
- 複数のプロバイダーの使用
1.2. RolloutManager のカスタムリソースと仕様について リンクのコピーリンクがクリップボードにコピーされました!
Argo Rollouts を使用するには、クラスターに Red Hat OpenShift GitOps Operator をインストールし、選択した namespace で RolloutManager カスタムリソース (CR) を作成して Operator に送信する必要があります。RolloutManager CR のスコープを 1 つまたは複数の namespace に設定できます。Operator は、次の namespace スコープのサポートリソースを使用して argo-rollouts インスタンスを作成します。
- Argo Rollouts コントローラー
- Argo Rollouts メトリックサービス
- Argo Rollouts サービスアカウント
- Argo Rollouts のロール
- Argo Rollouts のロールバインディング
- Argo Rollouts のシークレット
RolloutsManager CR の仕様で、Argo Rollouts コントローラーリソースのコマンド引数、環境変数、カスタムイメージ名などを指定できます。RolloutManager CR 仕様は、Argo Rollouts の望ましい状態を定義します。
例: RolloutManager CR
1.2.1. Argo Rollouts コントローラー リンクのコピーリンクがクリップボードにコピーされました!
Argo Rollouts コントローラーリソースを使用すると、namespace でのプログレッシブアプリケーション配信を管理できます。Argo Rollouts コントローラーリソースはクラスターのイベントを監視し、Argo Rollouts に関連するリソースに変更があるたびに反応します。コントローラーはロールアウトの詳細をすべて読み取り、クラスターをロールアウト定義に記述されているのと同じ状態にします。
1.3. Argo Rollouts アーキテクチャーの概要 リンクのコピーリンクがクリップボードにコピーされました!
Argo Rollouts サポートは、Red Hat OpenShift GitOps Operator をインストールし、RolloutManager カスタムリソース (CR) インスタンスを設定することで、クラスター上で有効になります。
RolloutManager CR が作成されると、Red Hat OpenShift GitOps Operator は同じ namespace に Argo Rollouts をインストールします。この手順には、Argo Rollouts コントローラーのインストール、および CR、ロール、ロールバインディング、設定データなどの Argo Rollouts の処理に必要なリソースが含まれます。
Argo Rollouts コントローラーは、次の 2 つのモードでインストールできます。
- クラスタースコープモード (デフォルト): コントローラーは、クラスター内のすべての namespace 全体のリソースを監視します。
- namespace スコープモード: コントローラーは、Argo Rollouts がデプロイされている namespace 内のリソースを監視します。
Argo Rollouts のアーキテクチャーは、コンポーネントとリソースで設定されています。コンポーネントは、リソースの管理に使用されます。たとえば、AnalysisRun コントローラーは AnalysisRun CR を管理します。
Argo Rollouts には、新しいアプリケーションバージョンがデプロイされていることを確認するための分析メトリクスを収集するいくつかのメカニズムが含まれています。
-
Prometheus メトリクス:
AnalysisTemplateCR は、Prometheus インスタンスに接続して、1 つ以上のメトリクスの成功または失敗を評価するように設定されています。 -
Kubernetes ジョブメトリクス: Argo Rollouts は、リソースメトリクスの分析を実行するための Kubernetes
Jobリソースをサポートします。Kubernetes ジョブの実行が成功したかどうかに基づいて、アプリケーションのデプロイメントが成功したかどうかを確認できます。
1.3.1. Argo Rollouts コンポーネント リンクのコピーリンクがクリップボードにコピーされました!
Argo Rollouts は、ユーザーが OpenShift Container Platform でプログレッシブ配信を実践できるようにする複数のコンポーネントで構成されています。
| 名前 | 説明 |
|---|---|
| Argo Rollouts コントローラー |
Argo Rollouts コントローラーは標準の |
| AnalysisRun Controller |
AnalysisRun コントローラーは、 |
|
|
|
|
|
Service コントローラーは |
| Argo Rollouts CLI と UI |
Argo Rollouts は、Argo Rollouts CLI と呼ばれる |
1.3.2. Argo Rollouts のリソース リンクのコピーリンクがクリップボードにコピーされました!
Argo Rollout コンポーネントは、複数のリソースを管理して、プログレッシブ配信を有効にします。
-
Rollouts 固有のリソース:
Rollout、AnalysisRun、Experimentなど。 -
Kubernetes ネットワークリソース: ネットワークトラフィックシェーピングの
Service、Ingress、またはRouteなど。Argo Rollouts は、トラフィック管理と呼ばれるこれらのリソースと統合します。
これらのリソースは、Rollout CR を介してアプリケーションのデプロイメントをカスタマイズするために不可欠です。
Argo Rollouts は、次のアクションをサポートしています。
- canary デプロイメントのパーセンテージベースのトラフィックをルーティングする。
-
ServiceおよびIngressリソースを使用して、受信ユーザートラフィックを正しいアプリケーションバージョンに転送します。 - 複数のメカニズムを使用して分析メトリクスを収集し、アプリケーションの新しいバージョンのデプロイメントを検証します。
| 名前 | 説明 |
|---|---|
|
|
この CR により、canary または blue-green デプロイメントストラテジーを使用したアプリケーションのデプロイメントが可能になります。これは、組み込みの Kubernetes |
|
|
この CR は、分析を実行し、分析結果を集約して、アプリケーションの正常なデプロイメント配信に向けてユーザーを導くために使用されます。 |
|
|
|
|
|
|
|
| Argo Rollouts は、Service および Ingress コントローラーを使用して、サービスと Ingress によるトラフィックのルーティングをネイティブにサポートします。 |
|
|
OpenShift |
1.4. Argo Rollouts CLI の概要 リンクのコピーリンクがクリップボードにコピーされました!
オプションのプラグインである Argo Rollouts CLI を使用すると、OpenShift Container Platform Web コンソールまたは CLI (oc) を使用する必要がなくなり、Argo Rollouts リソースを直接管理および監視できます。
Argo Rollouts CLI プラグインを使用すると、次のアクションを実行できます。
- Argo Rollouts イメージに変更を加えます。
- Argo Rollouts プロモーションの進捗を監視します。
- canary デプロイメントにおけるプロモーション手順に進みます。
- 失敗した Argo Rollouts デプロイメントを終了します。
Argo Rollouts CLI プラグインは、oc および kubectl コマンドと直接統合されます。
第2章 Argo Rollouts を使用したデプロイメントのプログレッシブ配信 リンクのコピーリンクがクリップボードにコピーされました!
Argo Rollouts を使用してプログレッシブ配信を管理するには、クラスターに Red Hat OpenShift GitOps Operator をインストールした後、選択した namespace に RolloutManager カスタムリソース (CR) インスタンスを作成して設定できます。RolloutManager CR のスコープを 1 つまたは複数の namespace に設定できます。
2.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
-
cluster-admin権限でクラスターにアクセスできる。 - OpenShift Container Platform Web コンソールにアクセスできる。
- Red Hat OpenShift GitOps 1.9.0 以降のバージョンがクラスターにインストールされている。
2.2. RolloutManager カスタムリソースの作成 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenShift GitOps で Argo Rollouts を使用してデプロイメントのプログレッシブ配信を管理するには、選択した namespace で RolloutManager カスタムリソース (CR) を作成して設定する必要があります。デフォルトでは、新しい argo-rollouts インスタンスには、それがデプロイされている namespace でのみリソースを管理する権限がありますが、必要に応じて複数の namespace で Argo Rollouts を使用できます。
前提条件
- Red Hat OpenShift GitOps 1.9.0 以降のバージョンがクラスターにインストールされている。
手順
- クラスター管理者として OpenShift Container Platform Web コンソールにログインします。
- Administrator パースペクティブで、Operators → Installed Operators をクリックします。
-
Project ドロップダウンメニューから、
RolloutManagerカスタムリソース (CR) を作成および設定するプロジェクトを作成または選択します。 - インストールされた Operator から Red Hat OpenShift GitOps を選択します。
- Details タブの Provided APIs セクションで、RolloutManager ペインの Create instance をクリックします。
Create RolloutManager ページで YAML view を選択し、デフォルトの YAML を使用するか、要件に応じて編集します。
例:
RolloutManagerCRCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Create をクリックします。
- RolloutManager タブの RolloutManagers セクションで、RolloutManager インスタンスの Status フィールドに Phase: Available と表示されていることを確認します。
左側のナビゲーションペインで、namespace をスコープとしたサポートリソースの作成を確認します。
-
Workloads → Deployments をクリックして、
argo-rolloutsデプロイメントが使用可能で、Status に1 of 1 podsが実行中と表示されていることを確認します。 -
Workloads → Secrets をクリックして、
argo-rollouts-notification-secretシークレットが使用可能であることを確認します。 -
Networking → Services をクリックして、
argo-rollouts-metricsサービスが利用可能であることを確認します。 -
User Management → Roles をクリックして、
argo-rolloutsロール、argo-rollouts-aggregate-to-admin、argo-rollouts-aggregate-to-edit、およびargo-rollouts-aggregate-to-viewクラスターロールが使用可能であることを確認します。 -
User Management → RoleBindings をクリックして、
argo-rolloutsロールバインディングが使用可能であることを確認します。
-
Workloads → Deployments をクリックして、
2.3. RolloutManager カスタムリソースの削除 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenShift GitOps Operator をアンインストールしても、インストール中に作成されたリソースは削除されません。Red Hat OpenShift GitOps Operator をアンインストールする前に、RolloutManager カスタムリソース (CR) を手動で削除する必要があります。
前提条件
- Red Hat OpenShift GitOps 1.9.0 以降のバージョンがクラスターにインストールされている。
-
RolloutManagerCR が namespace に存在する。
手順
- クラスター管理者として OpenShift Container Platform Web コンソールにログインします。
- Administrator パースペクティブで、Operators → Installed Operators をクリックします。
-
Project ドロップダウンメニューをクリックし、
RolloutManagerCR を含むプロジェクトを選択します。 - インストールされた Operator から Red Hat OpenShift GitOps を選択します。
- RolloutManager タブをクリックして、RolloutManagers セクションで RolloutManager インスタンスを見つけます。
- インスタンスをクリックします。
- ドロップダウンメニューから Actions → Delete RolloutManager をクリックし、ダイアログボックスで Delete をクリックして確認します。
- RolloutManager タブの RolloutManagers セクションで、RolloutManager インスタンスが使用できないことを確認します。
左側のナビゲーションペインで、namespace をスコープとするサポートリソースが削除されていることを確認します。
-
Workloads → Deployments をクリックして、
argo-rolloutsデプロイメントが削除されていることを確認します。 -
Workloads → Secrets をクリックして、
argo-rollouts-notification-secretシークレットが削除されていることを確認します。 -
Networking → Services をクリックして、
argo-rollouts-metricsサービスが削除されていることを確認します。 -
User Management → Roles をクリックして、
argo-rolloutsロールと、クラスターロールargo-rollouts-aggregate-to-admin、argo-rollouts-aggregate-to-edit、およびargo-rollouts-aggregate-to-viewが削除されていることを確認します。 -
User Management → RoleBindings をクリックして、
argo-rolloutsロールバインディングが削除されていることを確認します。
-
Workloads → Deployments をクリックして、
2.4. Linux への Argo Rollouts CLI のインストール リンクのコピーリンクがクリップボードにコピーされました!
Linux に Argo Rollouts CLI をインストールできます。
前提条件
-
OpenShift Container Platform CLI (
oc) がインストールされている。
手順
次のコマンドを実行して、Argo Rollouts CLI バイナリー
kubectl-argo-rolloutsの最新バージョンをダウンロードします。curl -LO https://github.com/argoproj/argo-rollouts/releases/latest/download/kubectl-argo-rollouts-linux-amd64
$ curl -LO https://github.com/argoproj/argo-rollouts/releases/latest/download/kubectl-argo-rollouts-linux-amd64Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
kubectl-argo-rolloutsバイナリーが実行可能であることを確認します。chmod +x ./kubectl-argo-rollouts-linux-amd64
$ chmod +x ./kubectl-argo-rollouts-linux-amd64Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、
kubectl-argo-rolloutsバイナリーをシステムパスに移動します。mv ./kubectl-argo-rollouts-linux-amd64 /usr/local/bin/kubectl-argo-rollouts
# mv ./kubectl-argo-rollouts-linux-amd64 /usr/local/bin/kubectl-argo-rolloutsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要このコマンドを実行するには、スーパーユーザー権限が割り当てられていることを確認してください。
次のコマンドを実行して同様の出力を受け取り、プラグインが正しくインストールされていることを確認します。
oc argo rollouts version
$ oc argo rollouts versionCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.5. Mac OS への Argo Rollouts CLI のインストール リンクのコピーリンクがクリップボードにコピーされました!
macOS ユーザーの場合、Homebrew パッケージマネージャーを使用して Argo Rollouts CLI をインストールできます。
前提条件
-
Homebrew (
brew) パッケージマネージャーがインストールされている。
手順
次のコマンドを実行して、Argo Rollouts CLI をインストールします。
brew install argoproj/tap/kubectl-argo-rollouts
$ brew install argoproj/tap/kubectl-argo-rolloutsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第3章 Argo Rollouts のスタートガイド リンクのコピーリンクがクリップボードにコピーされました!
Argo Rollouts は、canary および Blue-Green デプロイメントストラテジー をサポートしています。このガイドでは、canary デプロイメントストラテジーを使用した例と手順を示し、ロールアウトのデプロイ、更新、プロモーション、および手動での中止を行うのに役立ちます。
canary ベースのデプロイメントストラテジーでは、トラフィックを 2 つのアプリケーションバージョン間で分割します。
- canary バージョン: トラフィックを段階的にルーティングするアプリケーションの新しいバージョン。
- 安定バージョン: アプリケーションの最新バージョン。canary バージョンが安定し、すべてのユーザートラフィックがそのバージョンに送信されるようになると、canary バージョンが新しい安定バージョンになります。以前の安定バージョンは破棄されます。
3.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
- OpenShift Container Platform クラスターに管理者としてログインしている。
- OpenShift Container Platform Web コンソールにアクセスできる。
- OpenShift Container Platform クラスターに Red Hat OpenShift GitOps がインストールされている。
- OpenShift Container Platform クラスターに Argo Rollouts がインストールされている。
- システムに Argo Rollouts CLI がインストールされている。
3.2. ロールアウトのデプロイ リンクのコピーリンクがクリップボードにコピーされました!
クラスター管理者は、ユーザートラフィックのサブセットを新しいアプリケーションバージョンに段階的にルーティングするように Argo Rollouts を設定できます。次に、アプリケーションがデプロイされ、機能しているかどうかをテストできます。
次の手順例では、rollouts-demo ロールアウトとサービスを作成します。次に、ロールアウトではトラフィックの 20% をアプリケーションの canary バージョンにルーティングし、手動によるプロモーションを待ちます。次に、トラフィック全体が新しいアプリケーションバージョンにルーティングされるまで、複数の自動プロモーションを実行します。
手順
- Web コンソールの Administrator パースペクティブで、Operator → Installed Operator → Red Hat OpenShift GitOps → Rollout をクリックします。
-
Project ドロップダウンメニューから、
Rolloutカスタムリソース (CR) を作成および設定するプロジェクトを作成または選択します。 Create Rollout をクリックし、YAML ビューに以下の設定を入力します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- ロールアウトで使用する必要のあるデプロイメントストラテジー。
- 2
- ロールアウトの手順を指定します。この例では、トラフィックの 20%、40%、60%、80% を段階的に canary バージョンにルーティングします。
- 3
- canary バージョンに送信する必要があるトラフィックの割合。値が 20 の場合、トラフィックの 20% が canary バージョンに送信されることを意味します。
- 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リソースの作成により、すべてのトラフィックがアプリケーションの stable バージョンにルーティングされ、トラフィックが canary バージョンに送信される部分がスキップされます。ただし、.spec.template.spec.containers.imageフィールドに変更を加えた以降のすべてのアプリケーションアップグレードでは、Argo Rollouts コントローラーは通常どおり canary の手順を実行します。次のコマンドを実行して、ロールアウトが正しく作成されたことを確認します。
oc argo rollouts list rollouts -n <namespace>
$ oc argo rollouts list rollouts -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 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
NAME STRATEGY STATUS STEP SET-WEIGHT READY DESIRED UP-TO-DATE AVAILABLE rollouts-demo Canary Healthy 8/8 100 5/5 5 5 5Copy to Clipboard Copied! Toggle word wrap Toggle overflow rollouts-demoロールアウトをターゲットとする Kubernetes サービスを作成します。- Web コンソールの Administrator パースペクティブで、Networking → Services をクリックします。
Create Service をクリックし、YAML ビューに次の設定を入力します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Create をクリックします。
ロールアウトは、作成されたサービスを canary
ReplicaSetの Pod テンプレートハッシュで自動的に更新します。例:rollouts-pod-template-hash: 687d76d795
次のコマンドを実行して、ロールアウトの進行状況を確認します。
oc argo rollouts get rollout rollouts-demo --watch -n <namespace>
$ oc argo rollouts get rollout rollouts-demo --watch -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
Rolloutリソースが定義されている namespace を指定します。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ロールアウトの作成後、ロールアウトの Status フィールドに Phase: Healthy が表示されることを確認できます。
Rollout タブの Rollouts セクションで、
rollouts-demoロールアウトの Status フィールドに Phase: Healthy が表示されていることを確認します。ヒントまたは、以下のコマンドを実行して、ロールアウトが正常であることを確認できます。
oc argo rollouts status rollouts-demo -n <namespace>
$ oc argo rollouts status rollouts-demo -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
Rolloutリソースが定義されている namespace を指定します。
出力例
Healthy
HealthyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
これで、Rollout CR の次の更新で canary デプロイメントを実行する準備が整いました。
3.3. ロールアウトの更新 リンクのコピーリンクがクリップボードにコピーされました!
.spec.template.spec フィールド (コンテナーイメージバージョンなど) を変更して Rollout カスタムリソース (CR) を更新すると、更新されたコンテナーイメージバージョンを使用して、ReplicaSet で新しい Pod が作成されます。
手順
ロールアウトでデプロイされたコンテナーイメージを変更して、アプリケーションの新しい canary バージョンをシミュレートします。
- Web コンソールの Administrator パースペクティブで、Operator → Installed Operator → Red Hat OpenShift GitOps → Rollout に移動します。
-
既存の
rollouts-demoロールアウトを選択し、YAML ビューで.spec.template.spec.containers.imageの値をargoproj/rollouts-demo:blueからargoproj/rollouts-demo:yellowに変更します。 Save、Reload の順にクリックします。
ロールアウトでデプロイされたコンテナーイメージが変更され、ロールアウトによって新しい canary デプロイメントが開始されます。
注記RolloutCR の.spec.strategy.canary.stepsフィールドで定義されているsetWeightプロパティーに従って、最初にルートへのトラフィックの 20% が canary バージョンに到達し、ロールアウトは、プロモーションのリクエストが受信されるまで無期限に一時停止されます。トラフィックの 20% が canary バージョンに向けられ、後続のステップでプロモーションのリクエストが指定されるまでロールアウトが無期限に一時停止されるルートの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のコマンドを実行して、ロールアウトの進行状況を確認します。
oc argo rollouts get rollout rollouts-demo --watch -n <namespace>
$ oc argo rollouts get rollout rollouts-demo --watch -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
RolloutCR が定義されている namespace を指定します。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ロールアウトの更新ストラテジー設定で一時停止期間が指定されていないため、ロールアウトは現在一時停止状態になっています。
前の手順を繰り返して、新しくデプロイされたアプリケーションのバージョンをテストし、期待どおりに動作することを確認します。たとえば、ブラウザーを使用してアプリケーションの操作、アプリケーションの検証、テストの実行、コンテナーログの確認を行います。
ロールアウトは、次のステップに進むまで、一時停止されたままになります。
新しいバージョンのアプリケーションが期待どおりに動作していることを確認したら、プロモーションを続行するか、ロールアウトを中止するかを決定できます。したがって、「ロールアウトのプロモート」または「ロールアウトの手動中断」の手順に従ってください。
3.4. ロールアウトのプロモート リンクのコピーリンクがクリップボードにコピーされました!
ロールアウトは現在一時停止状態にあるため、クラスター管理者は、ロールアウトを手動でプロモートさせて次のステップに進むことができるようにする必要があります。
手順
Argo Rollouts CLI で次のコマンドを実行して、アプリケーションの別の canary バージョンを新たにシミュレートします。
oc argo rollouts promote rollouts-demo -n <namespace>
$ oc argo rollouts promote rollouts-demo -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
Rolloutリソースが定義されている namespace を指定します。
出力例
rollout 'rollouts-demo' promoted
rollout 'rollouts-demo' promotedCopy to Clipboard Copied! Toggle word wrap Toggle overflow これにより、canary バージョンではトラフィックの重みが 40% に増加します。
次のコマンドを実行して、ロールアウトが残りの手順で進行していることを確認します。
oc argo rollouts get rollout rollouts-demo -n <namespace> --watch
$ oc argo rollouts get rollout rollouts-demo -n <namespace> --watch1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
Rolloutリソースが定義されている namespace を指定します。
RolloutCR で定義されている残りのステップには、pause: {duration: 45}などのように期間が設定されているため、Argo Rollouts コントローラーは指定の期間待機してから、自動的に次のステップに進みます。すべての手順が正常に完了すると、新しい
ReplicaSetオブジェクトが安定したレプリカセットとしてマークされます。出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
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>
$ oc argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:red -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
ロールアウトカスタムリソース (CR) が定義されている namespace を指定します。
出力例
rollout "rollouts-demo" image updated
rollout "rollouts-demo" image updatedCopy to Clipboard Copied! Toggle word wrap Toggle overflow ロールアウトでデプロイされたコンテナーイメージが変更され、ロールアウトによって新しい canary デプロイメントが開始されます。
- ロールアウトが一時停止状態になるまで待ちます。
次のコマンドを実行して、ロールアウトによって
rollouts-demo:redcanary バージョンがデプロイされ、一時停止ステータスに到達したことを確認します。oc argo rollouts get rollout rollouts-demo --watch -n <namespace>
$ oc argo rollouts get rollout rollouts-demo --watch -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
RolloutCR が定義されている namespace を指定します。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行してロールアウトの更新を停止します。
oc argo rollouts abort rollouts-demo -n <namespace>
$ oc argo rollouts abort rollouts-demo -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
RolloutCR が定義されている namespace を指定します。
出力例
rollout 'rollouts-demo' aborted
rollout 'rollouts-demo' abortedCopy to Clipboard Copied! Toggle word wrap Toggle overflow Argo Rollouts コントローラーは、アプリケーションの canary リソースを削除し、stable バージョンにロールバックします。
ロールアウトを中止した後、次のコマンドを実行して、canary
ReplicaSetが 0 レプリカにスケーリングされていることを確認します。oc argo rollouts get rollout rollouts-demo --watch -n <namespace>
$ oc argo rollouts get rollout rollouts-demo --watch -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
RolloutCR が定義されている namespace を指定します。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ロールアウトステータスは
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>
$ oc argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:yellow -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
RolloutCR が定義されている namespace を指定します。
出力例
rollout "rollouts-demo" image updated
rollout "rollouts-demo" image updatedCopy to Clipboard Copied! Toggle word wrap Toggle overflow ロールアウトでは、分析とプロモーションの手順がスキップされ、以前の安定したバージョン
yellowにロールバックされ、安定したReplicaSetのデプロイを早い段階で行うことができます。次のコマンドを実行して、ロールアウトのステータスが
Healthyとしてマークされていることを確認します。oc argo rollouts get rollout rollouts-demo --watch -n <namespace>
$ oc argo rollouts get rollout rollouts-demo --watch -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
RolloutCR が定義されている namespace を指定します。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第4章 Argo Rollouts を使用したトラフィックのルーティング リンクのコピーリンクがクリップボードにコピーされました!
Argo Rollouts とそのトラフィック分割メカニズムを使用すると、ユーザートラフィックのサブセットを新しいアプリケーションバージョンに段階的にルーティングできます。次に、アプリケーションがデプロイされ、機能しているかどうかをテストできます。
Openshift Routes を使用すると、要件に基づいてクラスター環境内のさまざまなアプリケーションにトラフィックを送信することで、トラフィックの量を減らしたり増やしたりするように Argo Rollouts を設定できます。
OpenShift Routes を使用して、2 つのアプリケーションバージョン間でトラフィックを分割できます。
- canary バージョン: トラフィックを段階的にルーティングするアプリケーションの新しいバージョン。
- 安定バージョン: アプリケーションの最新バージョン。canary バージョンが安定し、すべてのユーザートラフィックがそのバージョンに送信されるようになると、canary バージョンが新しい安定バージョンになります。以前の安定バージョンは破棄されます。
4.1. 前提条件 リンクのコピーリンクがクリップボードにコピーされました!
- OpenShift Container Platform クラスターに管理者としてログインしている。
- OpenShift Container Platform クラスターに Red Hat OpenShift GitOps がインストールされている。
- OpenShift Container Platform クラスターに Argo Rollouts がインストールされている。
- システムに Red Hat OpenShift GitOps CLI がインストールされている。
- システムに Argo Rollouts CLI がインストールされている。
4.2. OpenShift Routes を使用してトラフィックをルーティングするように Argo Rollouts を設定する リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Routes を使用して、ルート、ロールアウト、およびサービスを作成するように Argo Rollouts を設定できます。
以下の手順例では、ルート、ロールアウト、および 2 つのサービスを作成します。その後、徐々にトラフィックの割合を増やしてアプリケーションの canary バージョンにルーティングし、その canary 状態が成功としてマークされて新しい stable バージョンになります。
前提条件
- 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というルートを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Create をクリックしてルートを作成します。その後、Routes ページに表示されます。
ルートで参照されるサービス (canary および stable) を作成します。
- Web コンソールの Administrator パースペクティブで、Networking → Services をクリックします。
- Create Service をクリックします。
Create Service ページで、YAML view をクリックし、以下のスニペットを追加します。以下の例では、
argo-rollouts-canary-serviceという名前の canary サービスを作成します。canary トラフィックはこのサービスに転送されます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要Routeオブジェクトで指定された canary サービスの名前が、Serviceオブジェクトで指定された canary サービスの名前と一致していることを確認します。Create をクリックして canary サービスを作成します。
ロールアウトは、作成されたサービスを canary
ReplicaSetの Pod テンプレートハッシュで自動的に更新します。例:rollouts-pod-template-hash: 7bf84f9696。これらの手順を繰り返して安定したサービスを作成します。次の例では
argo-rollouts-stable-serviceという安定したサービスを作成します。安定したトラフィックがこのサービスに送られます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要Routeオブジェクトで指定された安定したサービスの名前が、Serviceオブジェクトで指定された安定したサービスの名前と一致していることを確認します。Create をクリックして安定したサービスを作成します。
ロールアウトは、安定した
ReplicaSetの Pod テンプレートハッシュを使用して、作成されたサービスを自動的に更新します。例:rollouts-pod-template-hash: 1b6a7733。
RouteおよびServiceオブジェクトを参照するRolloutCR を作成します。- Web コンソールの Administrator パースペクティブで、Operator → Installed Operator → Red Hat OpenShift GitOps → Rollout に移動します。
Create Rollout ページで、YAML view をクリックし、次のスニペットを追加します。次の例では、
rollouts-demoというRolloutCR を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Create をクリックします。
- Rollout タブの Rollout セクションで、ロールアウトの Status フィールドに Phase: Healthy と表示されていることを確認します。
ルートがトラフィックの 100% をアプリケーションの安定バージョンに送信していることを確認します。
注記Rolloutリソースの最初のインスタンスが作成されると、ロールアウトによって、stable バージョンおよび canary バージョンのアプリケーションに送信されるトラフィックの量が調整されます。最初のインスタンスでは、Rolloutリソースの作成により、すべてのトラフィックがアプリケーションの stable バージョンにルーティングされ、トラフィックが canary バージョンに送信される部分がスキップされます。ロールアウトでデプロイされたコンテナーイメージを変更して、アプリケーションの新しい canary バージョンをシミュレートします。
- Web コンソールの Administrator パースペクティブで、Operator → Installed Operator → Red Hat OpenShift GitOps → Rollout に移動します。
既存の Rollout を選択し、
.spec.template.spec.containers.imageの値をargoproj/rollouts-demo:blueからargoproj/rollouts-demo:yellowに変更します。その結果、ロールアウトにデプロイされたコンテナーイメージが変更され、ロールアウトによって新規の canary デプロイメントが開始されます。
注記Rolloutリソースの.spec.strategy.canary.stepsフィールドで定義されているsetWeightプロパティーに従って、最初はルートへのトラフィックの 30% が canary バージョンに到達し、トラフィックの 70% が stable バージョンに向けられます。トラフィックの 30% が canary バージョンに移行されると、ロールアウトは一時停止されます。トラフィックの 30% が canary バージョンに送られ、70% が stable バージョンに送られるルートの例。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Argo Rollouts CLI で次のコマンドを実行して、アプリケーションの別の canary バージョンを新たにシミュレートします。
oc argo rollouts promote rollouts-demo -n <namespace>
$ oc argo rollouts promote rollouts-demo -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
Rolloutリソースが定義されている namespace を指定します。
これにより、トラフィックの重みは、canary バージョンでは 60%、stable バージョンでは 40% に増加します。
トラフィックの 60% が canary バージョンに送られ、40% が stable バージョンに送られるルートの例。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、canary バージョンのトラフィックの重みを 100% に増やし、アプリケーションの古い stable バージョンのトラフィックを破棄します。
oc argo rollouts promote rollouts-demo -n <namespace>
$ oc argo rollouts promote rollouts-demo -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
Rolloutリソースが定義されている namespace を指定します。
トラフィックの 0% が canary バージョンに送られ、100% が stable バージョンに送られるルートの例。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第5章 OpenShift Service Mesh の Argo Rollouts を使用したトラフィックのルーティング リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenShift GitOps の Argo Rollouts は、OpenShift Routes や Istio ベースの OpenShift Service Mesh などのさまざまなトラフィック管理メカニズムをサポートします。
Argo Rollouts で使用するトラフィックマネージャーの選択は、クラスターワークロードをデプロイするために使用している既存のトラフィック管理ソリューションによって異なります。たとえば、Red Hat OpenShift Routes は基本的なトラフィック管理機能を提供するため、サイドカーコンテナーを使用する必要はありません。ただし、Red Hat OpenShift Service Mesh は Istio を使用して、より高度なルーティング機能を提供しますが、サイドカーコンテナーの設定が必要です。
OpenShift Service Mesh を使用して、2 つのアプリケーションバージョン間でトラフィックを分割できます。
- canary バージョン: トラフィックを段階的にルーティングするアプリケーションの新しいバージョン。
- 安定バージョン: アプリケーションの最新バージョン。canary バージョンが安定し、すべてのユーザートラフィックがそのバージョンに送信されるようになると、canary バージョンが新しい安定バージョンになります。以前の安定バージョンは破棄されます。
Argo Rollouts 内の Istio サポートは、ゲートウェイおよび VirtualService リソースを使用してトラフィックルーティングを処理します。
- Gateway: ゲートウェイを使用して、メッシュの受信トラフィックと送信トラフィックを管理できます。ゲートウェイは OpenShift Service Mesh のエントリーポイントであり、アプリケーションに送信されるトラフィック要求を処理します。
- VirtualService: VirtualService は、トラフィックルーティングルールと、stable サービスや canary サービスなどの基盤となるサービスに送信されるトラフィックの割合を定義します。
デプロイメントシナリオの例
たとえば、サンプルのデプロイメントシナリオでは、初期インスタンス中にトラフィックの 100% がアプリケーションの stable バージョンに送信されます。アプリケーションは想定どおりに実行されており、新規バージョンのデプロイは追加で試行されません。
ただし、アプリケーションの新しいバージョンをデプロイした後、Argo Rollouts はアプリケーションの新しいバージョンに基づいて新しい canary アデプロイメントを作成し、トラフィックの一部がその新しいバージョンにルーティングされます。
Service Mesh を使用すると、Argo Rollouts は VirtualService リソースを自動的に変更して、stable アプリケーションバージョンと canary アプリケーションバージョン間でトラフィック分割されたパーセンテージを制御します。以下の図では、トラフィックの 20% が最初のプロモーション後に canary アプリケーションバージョンに送信され、80% は stable サービスによって stable バージョンに送信されます。
5.1. OpenShift Service Mesh を使用してトラフィックをルーティングするように Argo Rollouts を設定する リンクのコピーリンクがクリップボードにコピーされました!
次の項目を作成することで、OpenShift Service Mesh を使用して Argo Rollouts を設定できます。
- ゲートウェイ
- 2 つの Kubernetes サービス: stable と canary。これらはサービスの各バージョン内の Pod を指します。
- VirtualService
- rollout カスタムリソース (CR)
以下の手順例では、ロールアウトによってトラフィックの 20% が canary バージョンにルーティングされます。手動プロモーションの後、ロールアウトによってトラフィックの 40% がルーティングされます。別の手動プロモーションの後、すべてのトラフィックが新しいアプリケーションバージョンにルーティングされるまで、ロールアウトは複数の自動プロモーションを実行します。
前提条件
- 管理者として OpenShift Container Platform クラスターにログインしている。
- OpenShift Container Platform クラスターに Red Hat OpenShift GitOps がインストールされている。
- OpenShift Container Platform クラスターに Argo Rollouts がインストールされている。
- システムに Argo Rollouts CLI がインストールされている。
- OpenShift Service Mesh Operator をクラスターにインストールし、ServiceMeshControlPlane を設定している。
手順
メッシュの受信トラフィックを受け入れる
Gatewayオブジェクトを作成します。次のスニペットコンテンツを含む YAML ファイルを作成します。
rollouts-demo-gatewayというサンプルゲートウェイCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、YAML ファイルを適用します。
oc apply -f gateway.yaml
$ oc apply -f gateway.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
アプリケーションの canary および stable バージョンのサービスを作成します。
- Web コンソールの Administrator パースペクティブで、Networking → Services に移動します。
- Create Service をクリックします。
Create Service ページで、YAML view をクリックし、以下のスニペットを追加します。次の例では、
rollouts-demo-stableという安定したサービスを作成します。安定したトラフィックがこのサービスに送られます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Create をクリックして stable サービスを作成します。
Create Service ページで、YAML view をクリックし、以下のスニペットを追加します。以下の例では、
rollouts-demo-canaryという canary サービスを作成します。canary トラフィックはこのサービスに転送されます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Create をクリックして canary サービスを作成します。
着信トラフィックを stable サービスと canary サービスにルーティングするための VirtualService を作成します。
YAML ファイルを作成し、以下の YAML をこれにコピーします。以下の例では、
rollouts-demo-vsvcという名前のVirtualServiceを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のコマンドを実行して、YAML ファイルを適用します。
oc apply -f virtual-service.yaml
$ oc apply -f virtual-service.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
RolloutCR を作成します。この例では、Istioがトラフィックマネージャーとして使用されます。- Web コンソールの Administrator パースペクティブで、Operator → Installed Operator → Red Hat OpenShift GitOps → Rollout に移動します。
Create Rollout ページで、YAML view をクリックし、以下のスニペットを追加します。次の例では、
rollouts-demoというRolloutCR を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Create をクリックします。
- Rollout タブの Rollout セクションで、ロールアウトの Status フィールドに Phase: Healthy と表示されていることを確認します。
ルートがトラフィックの 100% をアプリケーションの安定バージョンに送信していることを確認します。
次のコマンドを実行して、ロールアウトの進行状況を確認します。
oc argo rollouts get rollout rollouts-demo --watch -n <namespace>
$ oc argo rollouts get rollout rollouts-demo --watch -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
Rolloutリソースが定義されている namespace を指定します。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記Rolloutリソースの最初のインスタンスが作成されると、ロールアウトによって、stable バージョンおよび canary バージョンのアプリケーションに送信されるトラフィックの量が調整されます。最初のインスタンスでは、Rolloutリソースの作成により、すべてのトラフィックがアプリケーションの stable バージョンにルーティングされ、トラフィックが canary バージョンに送信される部分がスキップされます。サービスメッシュが stable サービスに対してトラフィックの 100% を送信し、canary サービスに対して 0% を送信していることを確認するには、次のコマンドを実行します。
oc describe virtualservice/rollouts-demo-vsvc -n <namespace>
$ oc describe virtualservice/rollouts-demo-vsvc -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ターミナルに表示される以下の出力を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
ロールアウトでデプロイされたコンテナーイメージを変更して、アプリケーションの新しい canary バージョンをシミュレートします。
次のコマンドを実行して、
.spec.template.spec.containers.imageの値をargoproj/rollouts-demo:blueからargoproj/rollouts-demo:yellowに変更します。oc argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:yellow -n <namespace>
$ oc argo rollouts set image rollouts-demo rollouts-demo=argoproj/rollouts-demo:yellow -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow その結果、ロールアウトにデプロイされたコンテナーイメージが変更され、ロールアウトによって新規の canary デプロイメントが開始されます。
注記Rolloutリソースの.spec.strategy.canary.stepsフィールドで定義されているsetWeightプロパティーに従って、最初はルートへのトラフィックの 20% が canary バージョンに到達し、トラフィックの 80% が stable バージョンに向けられます。トラフィックの 20% が canary バージョンに転送されると、ロールアウトは一時停止されます。次のコマンドを実行して、ロールアウトの進行状況を確認します。
oc argo rollouts get rollout rollouts-demo --watch -n <namespace>
$ oc argo rollouts get rollout rollouts-demo --watch -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
Rolloutリソースが定義されている namespace を指定します。
次の例では、トラフィックの 80% が stable サービスにルーティングされ、トラフィックの 20% が canary サービスにルーティングされます。手動で次のレベルにプロモートするまで、デプロイメントは無期限に一時停止されます。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow トラフィックの 80% が canary バージョンに送られ、20% が stable バージョンに送られるルートの例。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
デプロイメントを手動で次のプロモート手順にプロモートします。
oc argo rollouts promote rollouts-demo -n <namespace>
$ oc argo rollouts promote rollouts-demo -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
Rolloutリソースが定義されている namespace を指定します。
次のコマンドを実行して、ロールアウトの進行状況を確認します。
oc argo rollouts get rollout rollouts-demo --watch -n <namespace>
$ oc argo rollouts get rollout rollouts-demo --watch -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
Rolloutリソースが定義されている namespace を指定します。
次の例では、トラフィックの 60% が stable サービスにルーティングされ、トラフィックの 40% が canary サービスにルーティングされます。手動で次のレベルにプロモートするまで、デプロイメントは無期限に一時停止されます。
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 60% のトラフィックが stable バージョンに送られ、40% が canary バージョンに送られる例。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次のコマンドを実行して、canary バージョンのトラフィックの重みを 100% に増やし、アプリケーションの以前の stable バージョンのトラフィックを破棄します。
oc argo rollouts promote rollouts-demo -n <namespace>
$ oc argo rollouts promote rollouts-demo -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
Rolloutリソースが定義されている namespace を指定します。
次のコマンドを実行して、ロールアウトの進行状況を確認します。
oc argo rollouts get rollout rollouts-demo --watch -n <namespace>
$ oc argo rollouts get rollout rollouts-demo --watch -n <namespace>1 Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
Rolloutリソースが定義されている namespace を指定します。
正常に完了すると、stable サービスに対する重みは 100%、canary サービスに対する重みは 0% になります。
第6章 namespace スコープの Argo Rollouts インストールサポートの有効化 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat OpenShift GitOps では、Argo Rollouts インストールの 2 つのモードがサポートされます。
- クラスタースコープのインストール (デフォルト): 任意の namespace で定義された Argo Rollouts カスタムリソース (CR) は、Argo Rollouts インスタンスによって調整されます。その結果、クラスター上の任意の namespace で Argo Rollouts CR を使用できます。
namespace スコープのインストール: Argo Rollouts インスタンスは特定の namespace にインストールされ、同じ namespace 内の Argo Rollouts CR のみを処理します。このインストールモードには、以下の利点があります。
-
このモードでは、クラスター全体の
ClusterRoleまたはClusterRoleBinding権限は必要ありません。クラスター権限を必要とせずに、単一の namespace 内で Argo Rollouts をインストールして使用できます。 - このモードでは、単一の Argo Rollouts インスタンスのクラスタースコープを特定の namespace に制限することで、セキュリティー上の利点があります。
-
このモードでは、クラスター全体の
意図しない権限昇格を防ぐため、Red Hat OpenShift GitOps では、Argo Rollout のインストールは、一度に 1 つのモードでのみ利用できます。
クラスタースコープと namespace スコープの Argo Rollouts インストールを切り替えるには、次の手順を実行します。
6.1. namespace スコープの Argo Rollouts インストールの設定 リンクのコピーリンクがクリップボードにコピーされました!
Argo Rollouts インストールの namespace スコープのインスタンスを設定するには、次の手順を実行します。
前提条件
- Red Hat OpenShift GitOps クラスターに管理者としてログインしている。
- Red Hat OpenShift GitOps クラスターに Red Hat OpenShift GitOps がインストールされている。
手順
- Web コンソールの Administrator パースペクティブで、Administration → CustomResourceDefinitions に移動します。
-
Subscriptionを検索し、Subscription CRD をクリックします。 - Instances タブをクリックし、openshift-gitops-operator サブスクリプションをクリックします。
YAML タブをクリックし、YAML ファイルを編集します。
.spec.config.envプロパティーで値をtrueに設定して、NAMESPACE_SCOPED_ARGO_ROLLOUTS環境変数を指定します。namespace スコープの Argo Rollouts のインストール設定の例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 値を
'true'に設定すると、namespace スコープのインストールが有効になります。値が'false'に設定されているか指定されていない場合、インストールはデフォルトでクラスタースコープモードになります。
Save をクリックします。
Red Hat OpenShift GitOps Operator は、namespace スコープのインストール内での Argo Rollouts カスタムリソースの調整を容易にします。
GitOps コンテナーのログを表示して、Red Hat OpenShift GitOps Operator が namespace スコープの Argo Rollouts インストールを有効にしたことを確認します。
- Web コンソールの Administrator パースペクティブで、Workloads → Pods に移動します。
- openshift-gitops-operator-controller-manager Pod をクリックし、Logs タブをクリックします。
-
Running in namespaced-scoped modeのログステートメントを探します。このステートメントは、Red Hat OpenShift GitOps Operator が namespace スコープの Argo Rollouts インストールを有効にしたことを示します。
RolloutManagerリソースを作成して、namespace スコープの Argo Rollouts のインストールを完了します。- Operator → Installed Operator → Red Hat OpenShift GitOps に移動し、RolloutManager タブをクリックします。
- Create RolloutManager を作成します。
YAML view を選択し、以下のスニペットを入力します。
namespace スコープの Argo Rollouts インストール用の
RolloutManagerCR の例Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- namespace スコープの Argo Rollouts インスタンスをインストールするプロジェクトの名前を指定します。
Create をクリックします。
RolloutManagerCR が作成されると、Red Hat OpenShift GitOps は namespace スコープの Argo Rollouts インスタンスを選択した名前空間にインストールします。
namespace スコープのインストールが成功していることを確認します。
-
RolloutManager タブの RolloutManagers セクションで、
RolloutManagerインスタンスの Status フィールドがPhase: Availableであることを確認します。 RolloutManagers セクションの YAML タブで以下の出力を確認して、インストールが正常に行われていることを確認します。
namespace スコープの Argo Rollouts インストール YAML ファイルの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- このステータスは、namespace スコープの Argo Rollouts インストールが正常に有効化されていることを示します。
クラスター上にクラスタースコープのインストールがすでに存在する場合に、namespace 固有の Argo Rollouts インスタンスをインストールしようとすると、次のエラーメッセージが表示されます。
エラーメッセージが表示される誤ったインストールの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- このステータスは、namespace スコープの Argo Rollouts のインストールが正常に有効になっていないことを示します。インストールのデフォルトは cluster-scoped モードです。
-
RolloutManager タブの RolloutManagers セクションで、