複数のターゲットに同時にデプロイする

Cloud Deploy を使用すると、複数のターゲットを表すように構成されたターゲットにデプロイできます。アプリケーションは、これらのターゲットに並行して(同時に)デプロイされます。パイプラインのステージとして特定するターゲットは、マルチ ターゲットと呼ばれ、マルチ ターゲットが構成しているターゲットは、子ターゲットと呼ばれます。

Cloud Deploy がサポートする任意のターゲット タイプで並行デプロイを使用できます。

並行デプロイを選ぶ理由

たとえば、アプリケーションを複数の本番環境ターゲットにデプロイするため、並行デプロイを使用できます。この場合、進捗がない(例: 開発からステージング、さらに本番環境に)ため、各ターゲットに連続してデプロイする必要はありません。

この並行デプロイは、通常のデリバリー パイプライン進行の一部になります。
dev -> staging -> prod [prod1, prod2, prod3, prod4, ...]

並行デプロイに使用される Cloud Deploy リソース

並行デプロイでは、次の Cloud Deploy 専用リソースが使用されます。

  • マルチターゲット

    マルチターゲットは、ターゲット構成 YAML の最上位にあるプロパティ multiTarget で構成されたターゲットであり、ランタイム クラスタまたはサービスを参照するのではなく、multiTarget.targetIds を使用して、1 つ以上の他のターゲットを参照します。

  • 子ターゲット

    子ターゲットは、マルチターゲットによって multiTarget.targetIds として参照されるターゲットです。

  • コントローラのロールアウト

    コントローラのロールアウトは、マルチターゲットに対応するロールアウトです。

    コントローラのロールアウトでできる操作とできない操作の詳細については、制限事項をご覧ください。

  • 子ロールアウト

    子ロールアウトでできる操作とできない操作の詳細については、制限事項をご覧ください。

並行デプロイを設定する

並行デプロイの設定では、1 つのマルチターゲットと、必要な子ターゲットの数(上限まで)を定義します。ターゲット定義は、次の点を除いて、すべてのターゲットと同じです。

  • マルチターゲットには multiTarget プロパティが含まれます。
  • 子ターゲットには multiTarget プロパティは含まれませんが、multiTarget.targetIds プロパティを使用してマルチターゲットから参照されます。
  • マルチターゲットは承認用に構成できますが、子ターゲットは構成できません。子ターゲットに requireApproval:true を含めることはできません。

マルチターゲットと子ターゲットには、カスタム実行環境構成を含めることができます。子ターゲットが実行環境を指定しない場合、子ターゲットはマルチターゲット定義で定義されているもの、またはデフォルトのものを継承します。詳しくは、実行環境と並行デプロイをご覧ください。

マルチターゲットを構成する

マルチターゲットは、デリバリー パイプラインのステージとして特定される単一のターゲットですが、1 つ以上の子ターゲットを指します。

マルチターゲット構成には multiTarget プロパティが含まれます。マルチターゲットに gkerun、または anthosCluster プロパティを指定することはできません。 マルチターゲットの構成は、デプロイ先のランタイムに関係なく同じです。

デリバリー パイプライン YAML または別の YAML ファイルで、multiTarget を含む基本的なターゲット定義を作成します。

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: TARGET_NAME
description: TARGET_DESCRIPTION
multiTarget:
 targetIds: [ CHILD_TARGET1, CHILD_TARGET2, CHILD_TARGETn ]

この YAML では...

  • TARGET_NAME は、このマルチターゲットの名前です。これは、デリバリー パイプライン定義stages.targetId プロパティで使用されます。

  • CHILD_TARGET1, CHILD_TARGET2,...CHILD_TARGETn は、このマルチターゲットがデプロイする子ターゲットの名前です。各名前は、子ターゲット定義の name プロパティに対応します。

multiTarget.targetIds プロパティがあると、このターゲットはマルチターゲットになります。

子ターゲットを構成する

マルチターゲット構成の子として特定された各ターゲットに対して、子ターゲットとして別のターゲットを構成します。

デリバリー パイプライン YAML または別の YAML ファイルで、基本的なターゲット定義を作成します。

GKE

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: CHILD_TARGET1
description: TARGET_DESCRIPTION
gke:
 cluster: projects/PROJECT_ID/locations/REGION/clusters/CLUSTER_NAME

この YAML では...

  • CHILD_TARGET1 は、この子ターゲットの名前です。この名前は、マルチターゲット定義multiTarget.targetIds プロパティにあるターゲットのリストのメンバーの 1 つに対応しています。

  • gke.cluster プロパティの値は、このターゲットが参照するクラスタのリソース名です。これには、プロジェクト ID、リージョン、クラスタ名が含まれます。

このターゲットは、標準の GKE ターゲットと同じように構成されています。 子ターゲットとなるのは、マルチターゲットの multiTarget.targetIds プロパティから参照される場合のみです。

Cloud Run

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: CHILD_TARGET1
description: TARGET_DESCRIPTION
run:
 location: projects/PROJECT_ID/locations/REGION

この YAML では...

  • CHILD_TARGET1 は、この子ターゲットの名前です。この名前は、マルチターゲット定義multiTarget.targetIds プロパティにあるターゲットのリストのメンバーの 1 つに対応しています。

  • run.location プロパティの値は、このターゲットが参照する Cloud Run サービスのリソース名です。これには、プロジェクト ID とリージョンが含まれます。

このターゲットは、標準の Cloud Run ターゲットと同じように構成されています。子ターゲットとなるのは、マルチターゲットの multiTarget.targetIds プロパティから参照される場合のみです。

GKE 接続クラスタ

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: CHILD_TARGET1
description: TARGET_DESCRIPTION
anthosCluster:
 membership: projects/PROJECT_ID/locations/global/memberships/MEMBERSHIP_NAME

この YAML では...

  • CHILD_TARGET1 は、この子ターゲットの名前です。この名前は、マルチターゲット定義multiTarget.targetIds プロパティにあるターゲットのリストのメンバーの 1 つに対応しています。

  • MEMBERSHIP_NAME は、フリートにクラスタを登録したときに選択した名前です。

カスタム ターゲット

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: CHILD_TARGET1
description: TARGET_DESCRIPTION
customTarget:
  customTargetType: CUSTOM_TARGET_TYPE_NAME

この YAML では...

  • CHILD_TARGET1 は、この子ターゲットの名前です。この名前は、マルチターゲット定義multiTarget.targetIds プロパティにあるターゲットのリストのメンバーの 1 つに対応しています。

  • CUSTOM_TARGET_TYPE_NAME は、このターゲットで使用されるカスタム ターゲット タイプの名前です。

デプロイ パラメータをターゲットに渡す

マニフェストにパラメータを含め、デリバリー パイプライン定義に値を含めることで、子ターゲットを区別できます。これらの値は、対応するターゲットのラベル照合に基づいて、個別のマニフェストに個別に適用できます。

たとえば、子ターゲットごとに異なる数のレプリカが必要になることがあります。これを行うには、配信パイプラインのプログレッションにパラメータと値を含め、各パラメータと値のペアに一致する子ターゲットのラベルを含めます。

デプロイ パラメータの詳細を確認する。

リリースを作成する

マルチターゲットと子ターゲットを構成したら、デリバリー パイプラインとターゲット リソースを作成し、通常どおりにリリースを作成します。

デリバリー パイプラインのライフサイクルは、Cloud Deploy パイプラインとターゲットと同じですが、マルチターゲットを使用してステージに到達すると、Cloud Deploy は、マルチターゲット用のコントローラロールアウトと、各子ターゲットにアプリケーションをデプロイするための子ロールアウトを作成する点が異なります。

Cloud Deploy オペレーションに対する Pub/Sub メッセージは、コントローラのロールアウトと子のロールアウトを区別します。

制限事項

  • マルチターゲットの子ターゲットは 100 個までです。

  • 1 つのマルチターゲットのすべての子ターゲットが同じターゲット ランタイム(たとえば、すべての GKE またはすべての Cloud Run)を持つ必要があります。

  • デリバリー パイプライン内では、子ターゲットが親のマルチターゲットを 1 つだけ持つことが可能です。

  • マルチターゲットを子なしにすることはできません。また、マルチターゲット自体や別のマルチターゲットを子ターゲットとして参照することもできません。

  • 1 つのデリバリー パイプライン内で子ターゲットを複数回使用することはできませんが、別のパイプラインで再利用することはできます。

  • 子ターゲットがカスタム ターゲットの場合、すべて同じ CustomTargetType を参照する必要があります。

  • デフォルト プールには同時実行数の上限がありますが、プライベート プールにはありません。

    マルチターゲットにデプロイすると、Cloud Build の同時実行制限まで、すべての子ロールアウトが同時にデプロイされます。この制限を超える子ターゲットがある場合、一部のターゲットのデプロイ ジョブは他のターゲットが完了するまで実行されません。つまり、Cloud Deploy ではすべての子ターゲットが同時にデプロイされるわけではありません。

    また、ターゲットに検証ジョブが含まれている場合、アプリケーションがすべての子ターゲットにデプロイされる前に、それらの検証ジョブの 1 つ以上が開始される可能性があります。

    Cloud Build のドキュメントで指定されている制限よりも多くのターゲットに同時にデプロイできる必要がある場合は、次の 2 つのオプションがあります。

実行環境と並行デプロイ

各ターゲットは、デフォルト以外の実行環境を使用するように構成できます。

  • マルチターゲットにデフォルト以外の実行環境がある場合、デフォルトの実行環境を使用するすべての子ターゲットは、マルチターゲットからデフォルト以外の実行環境を継承します。

  • マルチターゲットがデフォルトの実行環境を使用している場合、デフォルト以外の実行環境で構成されている子ターゲットは、デフォルト以外の実行環境を使用します。

これらのルールにより、実行環境をマルチターゲットから子ターゲットに簡単に伝達できるため、各子ターゲットの実行環境を定義または変更する必要がなくなりますが、必要な場合は、1 つ以上の子ターゲットに対する実行環境をカスタマイズできます。

Cloud Deploy の実行環境の詳細については、Cloud Deploy の実行環境を使用するをご覧ください。

並行デプロイをロールバックする

複数の並列ターゲットからデプロイをロールバックする必要がある場合は、ターゲットをロールバックするの説明に沿って、マルチターゲットをロールバックします。

並行デプロイの承認

他のターゲットと同様に、並行デプロイを構成して、承認を要求できます。ただし、並行デプロイでは、マルチターゲットでのみ承認を構成できます。この承認または拒否は、すべての子ターゲットに同時に影響します。

Google Cloud コンソールで並行デプロイを表示する

Google Cloud コンソールで、マルチターゲット、子ターゲット、コントローラのロールアウト、子ロールアウトの詳細を表示できます。

特定のデリバリー パイプラインのターゲットのリストを表示すると、[デリバリー パイプラインの詳細] にはマルチターゲットが表示されますが、子ターゲットは表示されません。 ただし、リリースの詳細を表示すると、コントローラのロールアウトと子ロールアウトを確認できます。コントローラと子ロールアウトは、デリバリー パイプラインの詳細ページの [ロールアウト] タブにも表示されます。

リリース インスペクタでは、子ロールアウトのレンダリングされたマニフェストを表示、比較できます。

デプロイ戦略で並列デプロイを使用する

カナリア デプロイ戦略を使用している場合は、並列でデプロイできます。詳細については、カナリア デプロイ戦略で並列デプロイを使用するをご覧ください。

次のステップ