Argo Rollouts
第1章 Argo Rollouts の概要 リンクのコピーリンクがクリップボードにコピーされました!
GitOps のコンテキストでは、プログレッシブ配信は、制御された段階的な方法でアプリケーションの更新をリリースするプロセスです。プログレッシブ配信では、アプリケーション更新の新しいバージョンを最初は一部のユーザーにのみ公開することで、リリースのリスクを軽減します。このプロセスには、この新しいアプリケーションバージョンを継続的に観察および分析して、その動作が設定された要件および期待と一致するかどうかを検証することが含まれます。このプロセスによりてアプリケーションの更新が徐々に幅広いユーザーに公開されるにつれて、検証は継続されます。
OpenShift Container Platform は、ルートを使用して異なるサービス間でトラフィックを分割することにより、ある程度の段階的な配信機能を提供しますが、これには通常、手動による介入と管理が必要です。
Argo Rollouts を使用すると、クラスター管理者はプログレッシブデプロイメントの配信を自動化し、Kubernetes および OpenShift Container Platform クラスターでホストされているアプリケーションのプログレッシブデプロイメントを管理できます。Argo Rollouts は、ブルーグリーン、カナリア、カナリア分析、実験などの高度なデプロイメント機能を提供するカスタムリソース定義 (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 Controller |
Argo Rollouts Controller は標準の |
| 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 は、次のアクションをサポートしています。
- カナリアデプロイメントのパーセンテージベースのトラフィックをルーティングする。
-
ServiceおよびIngressリソースを使用して、受信ユーザートラフィックを正しいアプリケーションバージョンに転送します。 - 複数のメカニズムを使用して分析メトリクスを収集し、アプリケーションの新しいバージョンのデプロイメントを検証します。
| 名前 | 説明 |
|---|---|
|
|
この CR により、カナリアまたは 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 プロモーションの進捗を監視します。
- カナリアデプロイメントにおけるプロモーション手順に進みます。
- 失敗した Argo Rollouts デプロイメントを終了します。
Argo Rollouts CLI プラグインは、oc および kubectl コマンドと直接統合されます。
第2章 Argo Rollouts を使用したデプロイメントのプログレッシブ配信 リンクのコピーリンクがクリップボードにコピーされました!
Argo Rollouts を使用してプログレッシブ配信を管理するには、クラスターに {gitops-titel} 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 は、カナリア および Blue-Green デプロイメントストラテジー をサポートしています。このガイドでは、カナリアデプロイメントストラテジーを使用した例と手順を示し、ロールアウトのデプロイ、更新、プロモーション、および手動での中止を行うのに役立ちます。
カナリアベースのデプロイメントストラテジーでは、トラフィックを 2 つのアプリケーションバージョン間で分割します。
- カナリアバージョン: トラフィックを段階的にルーティングするアプリケーションの新しいバージョン。
- 安定バージョン: アプリケーションの最新バージョン。カナリアバージョンが安定し、すべてのユーザートラフィックがそのバージョンに送信されるようになると、カナリアバージョンが新しい安定バージョンになります。以前の安定バージョンは破棄されます。
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% をアプリケーションのカナリアバージョンにルーティングし、手動によるプロモーションを待ちます。次に、トラフィック全体が新しいアプリケーションバージョンにルーティングされるまで、複数の自動プロモーションを実行します。
手順
- 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% を段階的にカナリアバージョンにルーティングします。
- 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>
$ 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 をクリックします。
ロールアウトは、作成されたサービスをカナリア
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 の次の更新でカナリアデプロイメントを実行する準備が整いました。
3.3. ロールアウトの更新 リンクのコピーリンクがクリップボードにコピーされました!
.spec.template.spec フィールド (コンテナーイメージバージョンなど) を変更して Rollout カスタムリソース (CR) を更新すると、更新されたコンテナーイメージバージョンを使用して、ReplicaSet で新しい Pod が作成されます。
手順
ロールアウトでデプロイされたコンテナーイメージを変更して、アプリケーションの新しいカナリアバージョンをシミュレートします。
- 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 の順にクリックします。
ロールアウトでデプロイされたコンテナーイメージが変更され、ロールアウトによって新しいカナリアデプロイメントが開始されます。
注記RolloutCR の.spec.strategy.canary.stepsフィールドで定義されているsetWeightプロパティーに従って、最初にルートへのトラフィックの 20% がカナリアバージョンに到達し、ロールアウトは、プロモーションのリクエストが受信されるまで無期限に一時停止されます。トラフィックの 20% がカナリアバージョンに向けられ、後続のステップでプロモーションのリクエストが指定されるまでロールアウトが無期限に一時停止されるルートの例
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 で次のコマンドを実行して、アプリケーションの別のカナリアバージョンを新たにシミュレートします。
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 これにより、カナリアバージョンではトラフィックの重みが 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. ロールアウトの手動中断 リンクのコピーリンクがクリップボードにコピーされました!
カナリアデプロイメントを使用する場合、ロールアウトではアプリケーションの初期カナリアバージョンがデプロイされます。手動またはプログラム的に検証できます。カナリアバージョンを検証して安定バージョンにプロモートすると、新しい安定バージョンがすべてのユーザーに公開されます。
ただし、カナリアバージョンでバグ、エラー、またはデプロイメントの問題が発見される場合があり、カナリアロールアウトを中止して、アプリケーションの安定したバージョンにロールバックする必要がある場合があります。
カナリアロールアウトを中止すると、新しいカナリアバージョンのリソースが削除され、アプリケーションの以前の安定バージョンが復元されます。カナリアに送信されていた 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>
$ 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 ロールアウトでデプロイされたコンテナーイメージが変更され、ロールアウトによって新しいカナリアデプロイメントが開始されます。
- ロールアウトが一時停止状態になるまで待ちます。
次のコマンドを実行して、ロールアウトによって
rollouts-demo:redカナリアバージョンがデプロイされ、一時停止ステータスに到達したことを確認します。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 コントローラーは、アプリケーションのカナリアリソースを削除し、安定バージョンにロールバックします。
ロールアウトを中止した後、次のコマンドを実行して、カナリア
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 つのアプリケーションバージョン間でトラフィックを分割できます。
- カナリアバージョン: トラフィックを段階的にルーティングするアプリケーションの新しいバージョン。
- 安定バージョン: アプリケーションの最新バージョン。カナリアバージョンが安定し、すべてのユーザートラフィックがそのバージョンに送信されるようになると、カナリアバージョンが新しい安定バージョンになります。以前の安定バージョンは破棄されます。
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 つのサービスを作成します。その後、徐々にトラフィックの割合を増やしてアプリケーションのカナリアバージョンにルーティングし、そのカナリア状態が成功としてマークされて新しい安定バージョンになります。
前提条件
- 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 ページに表示されます。
ルートで参照されるサービス (カナリアおよび安定) を作成します。
- Web コンソールの Administrator パースペクティブで、Networking → Services をクリックします。
- Create Service をクリックします。
Create Service ページで、YAML view をクリックし、以下のスニペットを追加します。以下の例では、
argo-rollouts-canary-serviceという名前のカナリアサービスを作成します。カナリアトラフィックはこのサービスに転送されます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要Routeオブジェクトで指定されたカナリアサービスの名前が、Serviceオブジェクトで指定されたカナリアサービスの名前と一致していることを確認します。Create をクリックしてカナリアサービスを作成します。
ロールアウトは、作成されたサービスをカナリア
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リソースの最初のインスタンスが作成されると、ロールアウトによって、安定バージョンおよびカナリアバージョンのアプリケーションに送信されるトラフィックの量が調整されます。最初のインスタンスでは、Rolloutリソースの作成により、すべてのトラフィックがアプリケーションの安定バージョンにルーティングされ、トラフィックがカナリアバージョンに送信される部分がスキップされます。ロールアウトでデプロイされたコンテナーイメージを変更して、アプリケーションの新しいカナリアバージョンをシミュレートします。
- 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% が安定バージョンに送られるルートの例。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Argo Rollouts CLI で次のコマンドを実行して、アプリケーションの別のカナリアバージョンを新たにシミュレートします。
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 を指定します。
これにより、トラフィックの重みは、カナリアバージョンでは 60%、安定バージョンでは 40% に増加します。
トラフィックの 60% がカナリアバージョンに送られ、40% が安定バージョンに送られるルートの例。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを実行して、カナリアバージョンのトラフィックの重みを 100% に増やし、アプリケーションの古い安定バージョンのトラフィックを破棄します。
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% がカナリアバージョンに送られ、100% が安定バージョンに送られるルートの例。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第5章 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 インストールを切り替えるには、次の手順を実行します。
5.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 セクションで、