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 のオペレーション スイートCloud Audit Logs

    Google Cloud のオペレーション スイートにより、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 つ以上のターゲットを参照できます。

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

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

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

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

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

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

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

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

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

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

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

リソースのロールアウト

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

  • フェーズ

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

  • Jobs

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

  • JobRun

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

組み合わせてリリースを実現する方法

このセクションでは、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. skaffold render を呼び出し、指定されたイメージまたはビルド アーティファクトを使用してマニフェストをレンダリングします。

      Cloud Deploy では、spec.templates.spec.containers.image のイメージ名を、gcloud deploy releases create コマンドで指定された、またはこのコマンドで参照されるビルド アーティファクト ファイル内の完全なイメージパス(ダイジェストまたはタグを含む)に置き換えます。

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

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

    5. skaffold apply を呼び出して、最初のターゲットへのロールアウトを自動的に作成してデプロイします。

      これは、CLI から Cloud Deploy を呼び出してリリースを作成する場合にのみ該当します。

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

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

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

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

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

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

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

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

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

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

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

次のステップ