このドキュメントでは、カスタム カナリア デプロイを構成して使用し、Cloud Deploy を使用してすべてのターゲット タイプにアプリケーションをデプロイする方法について説明します。
カスタム カナリア デプロイの仕組み
カスタム カナリア デプロイ戦略を使用してデプロイする場合、Cloud Deploy は選択したトラフィック バランシング構成を容易にするためにマニフェストを変更しません。代わりに、各カナリア フェーズのターゲット ランタイムに適用されるマニフェストを指定する必要があります。
必要な権限があることを確認してください。
Cloud Deploy の使用に必要な他の Identity and Access Management 権限に加えて、カナリア デプロイに必要な追加のアクションを実行するには、次の権限が必要です。
clouddeploy.rollouts.advanceclouddeploy.rollouts.ignoreJobclouddeploy.rollouts.cancelclouddeploy.rollouts.retryJobclouddeploy.jobRuns.getclouddeploy.jobRuns.listclouddeploy.jobRuns.terminate
使用可能なロールにこれらの権限が含まれているかどうかについては、IAM のロールと権限をご覧ください。
skaffold.yaml を準備する
skaffold.yaml ファイルは、マニフェストのレンダリングとデプロイの方法を定義します。カスタム カナリア デプロイでは、選択したトラフィック バランシング構成を容易にするために、各カナリア フェーズに関連付けるプロファイルを定義する必要があります。これらのプロファイルは、デリバリー パイプライン戦略構成のフェーズにマッピングされます。
カスタム カナリアで使用される skaffold.yaml 構成の例を次に示します。
apiVersion: skaffold/v4beta7
kind: Config
profiles:
- name: canary-25
manifests:
rawYaml:
- canary-25-resources.yaml
- name: canary-50
manifests:
rawYaml:
- canary-50-resources.yaml
- name: stable
manifests:
rawYaml:
- stable-resources.yaml
カスタム カナリアを構成する
カスタム カナリア構成では、デリバリー パイプライン定義で次のものを指定します。
ロールアウト フェーズ名
完全に自動化されたカナリアでは、Cloud Deploy がフェーズに名前を付けます(
canary-25、canary-75、stableなど)。ただし、カスタム カナリアでは、このカナリア ステージのすべてのフェーズで一意であり、リソース ID の制限を満たす限り、各フェーズに任意の名前を付けることができます。ただし、最終フェーズ(100%)の名前はstableにする必要があります。各フェーズの割合の目標
各フェーズの割合を個別に指定します。
フェーズで使用する Skaffold プロファイル
フェーズごとに個別の Skaffold プロファイルを使用することも、同じプロファイルを使用することも、任意の組み合わせを使用することもできます。プロファイルは、それぞれ異なる Cloud Run サービス定義を使用できます。特定のフェーズに複数のプロファイルを使用することもできます。Cloud Deploy はこれらを組み合わせます。
そのフェーズの確認ジョブがあるかどうか
フェーズにデプロイ前ジョブまたはデプロイ後ジョブがあるかどうか
カスタム カナリアの構成要素
次の YAML は、完全にカスタムのカナリア デプロイのフェーズの構成を示しています。
strategy:
canary:
# Custom configuration for each canary phase
customCanaryDeployment:
phaseConfigs:
- phaseId: "PHASE1_NAME"
percentage: PERCENTAGE1
profiles: [ "PROFILE_NAME" ]
verify:
tasks: [TASKS]
predeploy:
tasks: [TASKS]
postdeploy:
tasks: [TASKS]
- …
- phaseId: "stable"
percentage: 100
profiles: [ "LAST_PROFILE_NAME" ]
verify:
tasks: [TASKS]
predeploy:
tasks: [TASKS]
postdeploy:
tasks: [TASKS]
この YAML の内容は以下のとおりです。
PHASE1_NAMEフェーズの名前です。各フェーズ名は一意である必要があります。
[ "PROFILE_NAME" ]フェーズで使用するプロファイルの名前です。フェーズごとに同じプロファイル、フェーズごとに異なるプロファイル、または任意の組み合わせで使用することもできます。また、複数のプロファイルを指定することもできます。Cloud Deploy では、指定したすべてのプロファイルと、ステージ全体で使用されるプロファイルまたはマニフェストを使用します。
stable最終フェーズには
stableという名前を付ける必要があります。PERCENTAGE1最初のフェーズでデプロイする割合です。各フェーズは一意の割合値を持つ必要があり、その値は全体の割合である必要があります(たとえば、
10.5ではありません)。フェーズは昇順である必要があります。verifyスタンザを構成することで、デプロイの検証を有効にできます。有効にすると、フェーズにverifyジョブが追加されます。predeployスタンザを構成することで、事前デプロイフックを有効にできます。有効にすると、フェーズにpredeployジョブが追加されます。postdeployスタンザを構成することで、デプロイ後のフックを有効にできます。有効にすると、フェーズにpostdeployジョブが追加されます。verify、predeploy、postdeployのtasksプロパティは、そのジョブの一部として実行する 1 つ以上のタスクで構成されます。構成されたタスクは、定義された順序で順番に実行されます。
最終フェーズの割合は 100 にする必要があります。フェーズは、この customCanaryDeployment スタンザで構成した順序に従って実行されますが、割合の値が昇順でない場合は、デリバリー パイプラインを登録するコマンドはエラーで失敗します。
カスタム カナリアの構成には runtimeConfig スタンザが含まれていないことに注意してください。runtimeConfig を含めると、カスタム自動カナリアと見なされます。
次のステップ
カナリアのロールアウトのライフサイクルを管理する方法を確認する。
詳しくは、並列デプロイをご覧ください。
Cloud Deploy のデプロイ戦略の詳細を確認する。