Cloud Deploy を使用すると、複数のターゲットを表すように構成されたターゲットにデプロイできます。アプリケーションは、それらのターゲットに並列(同時に)デプロイされます。パイプラインのステージとして特定するターゲットは、マルチ ターゲットと呼ばれ、マルチ ターゲットが構成しているターゲットは、子ターゲットと呼ばれます。
Kubernetes Engine、Cloud Run、GKE Enterprise など、Google Cloud Deploy がサポートする任意のターゲット タイプで並行デプロイを使用できます。
並行デプロイを選ぶ理由
たとえば、アプリケーションを複数の本番環境ターゲットにデプロイするため、並行デプロイを使用できます。この場合、進捗がない(例: 開発からステージング、さらに本番環境に)ため、各ターゲットに連続してデプロイする必要はありません。
この並行デプロイは、通常のデリバリー パイプライン進行の一部になります。
dev -> staging -> prod [prod1, prod2, prod3, prod4, ...]
並行デプロイに使用される Cloud Deploy リソース
並行デプロイでは、次の Cloud Deploy 専用リソースが使用されます。
マルチターゲット
マルチターゲットは、ターゲット構成 YAML の最上位にあるプロパティ
multiTarget
で構成されたターゲットであり、ランタイム クラスタまたはサービスを参照するのではなく、multiTarget.targetIds
を使用して、1 つ以上の他のターゲットを参照します。子ターゲット
子ターゲットは、マルチターゲットによって
multiTarget.targetIds
として参照されるターゲットです。子も、サポートされているターゲット タイプ(Google Kubernetes Engine、GKE Enterprise、Cloud Run)を参照する必要があります。コントローラのロールアウト
コントローラのロールアウトは、マルチターゲットに対応するロールアウトです。
コントローラのロールアウトでできる操作とできない操作の詳細については、制限事項をご覧ください。
-
子ロールアウトでできる操作とできない操作の詳細については、制限事項をご覧ください。
並行デプロイを設定する
並行デプロイの設定では、1 つのマルチターゲットと、必要な子ターゲットの数(上限まで)を定義します。ターゲットの定義は、次の点を除き、すべてのターゲットと同じです。
- マルチターゲットには
multiTarget
プロパティが含まれます。 - 子ターゲットには
multiTarget
プロパティは含まれませんが、multiTarget.targetIds
プロパティを使用してマルチターゲットから参照されます。 - 承認のためにマルチターゲットを構成できますが、子ターゲットは構成できません。子ターゲットには
requireApproval:true
を含めることはできません。
マルチターゲットと子ターゲットには、カスタム実行環境構成を含めることができます。子ターゲットが実行環境を指定しない場合、子ターゲットはマルチターゲット定義で定義されているもの、またはデフォルトのものを継承します。詳しくは、実行環境と並行デプロイをご覧ください。
マルチターゲットを構成する
マルチターゲットは、デリバリー パイプラインのステージとして識別される単一のターゲットですが、1 つ以上の子ターゲットを指しています。
マルチターゲット構成には multiTarget
プロパティが含まれています。マルチターゲットに gke
、run
、または 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 Enterprise
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 は、GKE Enterprise ユーザークラスタをフリートに登録したときに選択した名前です。
このターゲットは、標準の GKE Enterprise ターゲットと同じように構成されています。
子ターゲットとなるのは、マルチターゲットの multiTarget.targetIds
プロパティから参照される場合のみです。
デプロイ パラメータをターゲットに渡す
マニフェストにパラメータを含め、デリバリー パイプラインの定義に値を含めることで、子ターゲットを区別できます。これらの値は、対応するターゲットのラベルの一致に基づいて、個別のマニフェストに個別に適用できます。
たとえば、子ターゲットごとに異なるレプリカ数を指定できます。これを行うには、配信パイプラインの進行状況にパラメータと値を追加し、パラメータと値のペアごとに一致する子ターゲットのラベルを追加します。
デプロイ パラメータの詳細を確認する。
リリースを作成する
マルチターゲットと子ターゲットを構成したら、デリバリー パイプラインとターゲット リソースを作成し、通常どおりにリリースを作成します。
デリバリー パイプラインのライフサイクルは、Cloud Deploy パイプラインとターゲットと同じですが、マルチターゲットを使用してステージに到達すると、Cloud Deploy は、マルチターゲット用のコントローラロールアウトと、各子ターゲットにアプリケーションをデプロイするための子ロールアウトを作成する点が異なります。
Cloud Deploy オペレーションに応答する Pub/Sub メッセージは、コントローラのロールアウトと子ロールアウトを区別します。
制限事項
マルチターゲットに設定できる子ターゲットは 100 個までです。
1 つのマルチターゲットのすべての子ターゲットが同じターゲット ランタイム(たとえば、すべての GKE またはすべての GKE Enterprise)を持つ必要があります。
デリバリー パイプライン内では、子ターゲットが親のマルチターゲットを 1 つだけ持つことが可能です。
マルチターゲットを子なしにすることはできません。また、マルチターゲット自体や別のマルチターゲットを子ターゲットとして参照することもできません。
子ターゲットは 1 つのデリバリー パイプライン内で複数回使用することはできませんが、別のパイプラインで再利用できます。
デフォルト プールには同時実行数の上限がありますが、プライベート プールには上限がありません。
マルチターゲットにデプロイする場合、すべての子ロールアウトは、Cloud Build の同時実行の上限まで同時にデプロイされます。この制限を超える子ターゲットがある場合、一部のターゲットのデプロイ ジョブは他のターゲットが完了するまで実行されません。つまり、Cloud Deploy ではすべての子ターゲットが同時にデプロイされるわけではありません。
また、ターゲットに検証ジョブが含まれている場合、アプリケーションがすべての子ターゲットにデプロイされる前に、1 つ以上の検証ジョブが開始される可能性があります。
Cloud Build のドキュメントで指定されている制限よりも多くのターゲットに同時にデプロイできる必要がある場合は、次の 2 つのオプションがあります。
同時に実行できるビルド数の増加をリクエストします。
実行環境と並行デプロイ
各ターゲットは、デフォルト以外の実行環境を使用するように構成できます。
マルチターゲットにデフォルト以外の実行環境がある場合、デフォルトの実行環境を使用するすべての子ターゲットは、マルチターゲットからデフォルト以外の実行環境を継承します。
マルチターゲットがデフォルトの実行環境を使用する場合、デフォルト以外の実行環境で構成された子ターゲットは、そのデフォルト以外の実行環境を使用します。
これらのルールにより、実行環境をマルチターゲットから子ターゲットに簡単に伝達できるため、各子ターゲットの実行環境を定義または変更する必要がなくなりますが、必要な場合は、1 つ以上の子ターゲットに対する実行環境をカスタマイズできます。
Cloud Deploy の実行環境の詳細については、Google Cloud Deploy 実行環境の使用をご覧ください。
並行デプロイをロールバックする
複数の並列ターゲットからデプロイをロールバックする必要がある場合は、ターゲットをロールバックするで説明されているように、マルチターゲットをロールバックします。
並行デプロイの承認
他のターゲットと同様に、並行デプロイを構成して、承認を要求できます。ただし、並行デプロイでは、マルチターゲットでのみ承認を構成できます。この承認または拒否は、すべての子ターゲットに同時に影響します。
Google Cloud コンソールで並行デプロイを表示する
Google Cloud コンソールで、マルチターゲット、子ターゲット、コントローラのロールアウト、子ロールアウトの詳細を表示できます。
特定のデリバリー パイプラインのターゲットのリストを表示すると、[デリバリー パイプラインの詳細] にはマルチターゲットが表示されますが、子ターゲットは表示されません。 ただし、リリースの詳細を表示すると、コントローラのロールアウトと子ロールアウトを確認できます。コントローラと子ロールアウトは、デリバリー パイプラインの詳細ページの [ロールアウト] タブにも表示されます。
リリース インスペクタでは、子ロールアウトのレンダリングされたマニフェストを表示、比較できます。
デプロイ戦略で並列デプロイを使用する
カナリア デプロイ戦略を使用している場合は、並列でデプロイできます。詳細については、カナリア デプロイ戦略で並列デプロイを使用するをご覧ください。
次のステップ
詳しくは、デプロイ パラメータの使用をご覧ください。
ターゲット構成スキーマを確認する。
Cloud Deploy サービス アーキテクチャの記事を確認する。