Cloud Deploy サービス アーキテクチャ

このドキュメントでは、Cloud Deploy と、アプリケーションのデプロイに使用する外部システムとの関係について説明します。こうしたシステムは他の Google Cloud サービスとサードパーティ ツールです。

概要

次の図は、Cloud Deploy とそれに依存する個々のシステムの関係を示しています。

Cloud Deploy コンポーネント間の関係

次の図に示すように、Cloud Deploy は以下のシステムとやり取りします。

  • CI システム

    Cloud Deploy は、CI プロセスからの 1 つの出力が、リリースを作成するための Cloud Deploy API または CLI の呼び出しである限り、ほとんどの CI ツールをサポートしています。

  • Cloud Build

    Cloud Deploy は、Cloud Build を呼び出してマニフェストをレンダリングし、ターゲット ランタイムにデプロイします。

  • Skaffold

    Cloud Deploy は Cloud Build を介して Skaffold を使用し、マニフェストをレンダリングしてデプロイすることで、アプリケーションをデプロイします。

  • Cloud Storage

    Cloud Deploy は、レンダリング ソースとレンダリングされたマニフェストを Cloud Storage バケットに保存します。

  • Google Cloud ObservabilityCloud Audit Logs

    Google Cloud Observability はロギングデータを収集し、Cloud Deploy で利用できるようにします。

    監査ロギングもご覧ください。

  • Pub/Sub

    Cloud Deploy は、複数の Pub/Sub トピックにメッセージを公開します。このサービスを使用して、外部のワークフロー、テスト、その他の関連システムと統合できます。

    詳細については、Cloud Deploy 通知のサブスクライブ をご覧ください。

  • ターゲット ランタイム

    Cloud Deploy では Cloud Build を介して skaffold apply を使用し、アプリケーションをターゲット ランタイム(GKE または GKE Enterprise)にデプロイします。

Cloud Deploy のリソース

次の図は、Cloud Deploy がアプリケーションの配信に使用するリソースと、それらのリソース間の関係を示しています。

Cloud Deploy リソース間の関係

上の図に示すように、リソース間の関係は次のとおりです。

  • デリバリー パイプラインでは、0 個以上のリリースを生成できます。また、マルチターゲットや、それに関連付けられた 子ターゲットなど、その 1 つ以上のターゲットを参照できます。

  • デリバリー パイプラインは、Cloud Deploy リソースに対するアクションを自動化する 1 つ以上の自動化を参照することもできます。

  • リリースには、パイプライン インスタンス(リリースの作成時に構成されたデリバリー パイプラインとターゲットの「スナップショット」)が含まれます。

  • 各リリースは 0 個以上のロールアウトを生成し、0 個以上のアーティファクトを参照できます。

    各ロールアウトには 1 つ以上のフェーズが含まれます。つまり、デプロイやデプロイ、検証など、論理的にグループ化されたロールアウト内のオペレーション(ジョブ)のコレクションを表します。

    各フェーズには 1 つ以上のジョブが含まれています。ロールアウトで行う作業(デプロイまたは検証)を表します。各ジョブには 1 つ以上のジョブ実行を含めることができます。これは実行のインスタンスなど、ジョブのインスタンスです。ジョブ実行は、ロールアウトの子リソースです。

    並行デプロイに使用されるマルチターゲットは、コントローラのロールアウトを作成します。コントローラのロールアウトは、子ロールアウトを作成し、それは子ターゲットに対応します。

  • 各ロールアウトは 1 つのターゲットに関連付けられます。

    並行デプロイの場合、各子ターゲットは 1 つの子ロールアウトに関連付けられます。

  • 各ターゲットは、1 つの GKE クラスタまたは Anthos クラスタ、アプリケーションのその他のランタイムの宛先に関連付けられます。

  • ターゲットは、1 つ以上のデリバリー パイプラインに関連付けることができます。

  • アーティファクトは、ロールアウトの一部としてターゲット ランタイムにデプロイされる CI プロセスからの出力(コンテナ イメージなど)です。

さらに、ロールアウトには 1 つ以上のフェーズがあり、フェーズには 1 つ以上のジョブと 1 つ以上のジョブ実行があります。

リソースのロールアウト

この図に示すように、ロールアウトには次のものが含まれます。

  • フェーズ

    フェーズには 1 つ以上のジョブ(デプロイ、デプロイと検証など)が含まれます。 各ロールアウトには、1 つ以上のフェーズがあります。フェーズとは、ロールアウトのサブメッセージです。

  • Jobs

    ロールアウトに対して実行される特定のオペレーション(デプロイや検証など)。ジョブはロールアウトのサブメッセージです。

  • JobRun

    ジョブのインスタンス(例: 確認の試行)。各ジョブには 0 個以上の JobRun を含めることができます。JobRun は、ロールアウトの子リソースです。

自動化には、0 個以上の AutomationRun リソースから参照できる自動化ルールが含まれます。AutomationRun は、実行された自動化ルールのインスタンスです。たとえば、ターゲット間の自動プロモーションなどです。Automation と AutomationRun リソースは、デリバリー パイプラインの下にあるピア子リソースです。

自動化リソース

組み合わせてリリースを配信する仕組み

このセクションでは、Cloud Deploy がこのドキュメントに記載されているコンポーネントとやり取りして、リリースとしてのアプリケーションの配信を自動化する方法について説明します。

  1. CI システムが Cloud Deploy デリバリー パイプラインを呼び出します。

    CI プロセスは、CLI または API を使用して Cloud Deploy を呼び出し、ビルド アーティファクトまたは参照をイメージに渡す新しいリリースを作成します。

    CI システムの統合の詳細については、Cloud Deploy と他のシステムの統合をご覧ください。

  2. 新しいリリースが作成されると、Cloud Deploy は次の処理を行います。

    1. リリースの一部としてデリバリー パイプラインのインスタンスを保存します。

      このパイプライン インスタンスは、デリバリー パイプラインの構成が変更されても、このリリースでは変更されません。詳細については、リリースあたりのパイプライン インスタンスをご覧ください。

      また、Skaffold バージョンもリリースの一部として保存されます。ほとんどの場合、これがデフォルトの Skaffold バージョンになりますが、他のバージョンも指定できるため、その情報が保存されます。

    2. Cloud Build を呼び出し、Cloud Storage から Skaffold レンダリング ソースを取得します。

      Cloud Deploy では、レンダリング ソースをデフォルトまたは代替の Cloud Storage バケットに保存します。

    3. skaffold diagnose(リリースの作成時に保存された Skaffold バージョンを使用)を呼び出して、有効なマニフェストを 1 つ生成します。

    4. render オペレーションを呼び出します。

      組み込みターゲットを使用している場合、Cloud Deploy は skaffold render を呼び出し、提供されたイメージまたはビルド アーティファクトを使用してマニフェストをレンダリングします。Cloud Deploy では、spec.templates.spec.containers.image のイメージ名を、gcloud deploy releases create コマンドで指定された、またはこのコマンドで参照されるビルド アーティファクト ファイル内の完全なイメージパス(ダイジェストまたはタグを含む)に置き換えます。

      カスタム ターゲットを使用している場合、Cloud Deploy はカスタム ターゲット タイプで定義された render オペレーションを呼び出します。

      Cloud Deploy は、レンダリングされたマニフェストをデフォルトまたは代替の Cloud Storage バケットに保存します。

      Cloud Deploy は、デフォルトまたは代替の実行環境を使用してこれらのアクションを実行します。

  3. (リリースの作成後に自動的に、または後でオンデマンドで)ロールアウトが作成されると、Cloud Deploy は次の処理を行います。

    1. デプロイ前フックが指定されている場合は、そのフックを呼び出します。

      カナリア デプロイ戦略を使用している場合、最初のフェーズの開始時にデプロイ前フックが呼び出されます。

    2. deploy オペレーションを呼び出します。

      組み込みターゲットを使用している場合、Cloud Deploy は、skaffold apply を呼び出して、ロールアウトを自動的に作成し、最初のターゲットにデプロイします。組み込みターゲットを使用している場合は、リリースの作成時に最初のロールアウトが自動的に作成されます。

      カスタム ターゲットを使用している場合、Cloud Deploy は自動的に最初のターゲットへのロールアウトを作成し、カスタム ターゲット タイプに対して定義された deploy オペレーションを呼び出します。

      組み込みターゲットとカスタム ターゲットの場合、コマンドラインを使用してリリースを作成する場合にのみ、最初のターゲットへのロールアウトが自動的に行われます。

      最初のターゲットにデプロイするプロセスは、次のステップで説明する昇格と同じです。

    3. verify がデリバリー パイプライン構成内のターゲット用の true で、検証が Skaffold 構成で指定されている場合、skaffold verify を呼び出します。

    4. verify が指定されている場合、デプロイ後フックが指定されていれば、verify の後に呼び出します。それ以外の場合は、デプロイ後フックは deploy の後に呼び出されます。

      カナリア デプロイ戦略を使用している場合、デプロイ後フックは最終ロールアウト フェーズの最後のジョブとして実行されます。

  4. リリースを次のターゲットにプロモートするときに、Cloud Build は Cloud Storage からターゲット固有のマニフェストを取得します。次に、Cloud Build は skaffold apply を呼び出し、指定されたターゲット ランタイムにレンダリングされたマニフェストを適用します。

    ターゲットで承認が必要な場合は、CLI またはコンソールを使用して承認または拒否できます。

    また、Cloud Deploy は、承認ワークフローを自動的に開始するために登録できる Pub/Sub メッセージを生成します。

    Cloud Deploy は、このリリースに関連付けられている Skaffold バージョンとパイプライン インスタンスを使用し、デフォルトまたはカスタムの実行環境でこの手順を実行します。

    このプロセスは、昇格だけでなく、ロールバックや再デプロイにも適用されます。

  5. このサービスは、Cloud Deploy オペレーション全体を通して、複数の Pub/Sub トピックに通知を送信します(たとえば、ロールアウトが承認を必要とする場合)。

    この統合やその他の統合については、Cloud Deploy と外部システムの統合で詳しく説明されています。

  6. 自動化を指定して、デリバリー パイプライン内でさまざまなオペレーションを自動的に実行できます。これらは指定した時間に実行できます。automationRun は自動化ルールの実行を表します。

  7. このサービスは、Cloud Deploy オペレーションを通して、プラットフォーム ログと監査ログを Google Cloud Observability と Cloud Audit Logs に書き込みます。

これらすべての手順を通して、Identity and Access Management を使用して、フロー制御とリソースへのアクセスが制限されます。

次のステップ