アプリを複数のターゲットに同時にデプロイする
このページでは、Cloud Deploy を使用して、サンプル アプリケーションを 2 つのターゲットに同時にデプロイする方法(並行的なデプロイ)について説明します。
このクイックスタートでは、以下の内容を行います。
2 つの GKE クラスタまたは 2 つの Cloud Run サービスを作成します。
GKE 接続クラスタにも並行してデプロイできますが、このクイックスタートでは GKE と Cloud Run のみを使用します。
Skaffold 構成および、Kubernetes マニフェストまたは Cloud Run サービス定義のいずれかを作成します。
Cloud Deploy デリバリー パイプラインとデプロイ ターゲットを定義します。
このパイプラインにはターゲットが 1 つしかありませんが、そのターゲットは、複数のデプロイ ターゲットを表すマルチ ターゲットとなります。このマルチターゲットは、2 つの実際のターゲットで構成され、2 つのクラスタまたはサービスにアプリを提供します。
リリースを作成してデリバリー パイプラインをインスタンス化します。リリースは自動的に 2 つのターゲットに並行してデプロイされます。
コンソールで「コントローラのロールアウト」と子のロールアウトを表示します。 Google Cloud
始める前に
- アカウントにログインします。 Google Cloud を初めて使用する場合は、 Google Cloud、 アカウントを作成して、 実際のシナリオでプロダクトがどのように機能するかを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.-
Google Cloud CLI をインストールします。
-
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
-
gcloud CLI を初期化するには、次のコマンドを実行します:
gcloud init - デフォルトの Compute Engine サービス アカウントに十分な権限があることを確認します。
このサービス アカウントにはすでに必要な権限が付与されている場合があります。これらの手順は、デフォルトのサービス アカウントの自動的なロール付与を無効にするプロジェクトに含まれています。
- 最初に、
clouddeploy.jobRunnerロールを追加します。gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/clouddeploy.jobRunner" - 特定のランタイム向けのデベロッパー ロールを追加します。
- GKE の場合:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/container.developer" - Cloud Run の場合:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/run.developer" -
iam.serviceAccountUserロールを追加します。これには、ランタイムにデプロイするactAs権限が含まれます。gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@developer.gserviceaccount.com \ --role="roles/iam.serviceAccountUser" \ --project=PROJECT_ID
- 最初に、
CLI がすでにインストールされている場合は、最新バージョンを実行していることを確認してください。
gcloud components update
ランタイム環境を作成する
Cloud Run にデプロイする場合は、以下のコマンドをスキップできます。
GKE の場合は、デフォルト設定で quickstart-cluster-qsprod1 と quickstart-cluster-qsprod2 の 2 つのクラスタを作成します。クラスタの Kubernetes API エンドポイントは、公共のインターネットからネットワークに到達可能である必要があります。
GKE クラスタには、デフォルトで外部からアクセス可能です。
gcloud container clusters create-auto quickstart-cluster-qsprod1 \
--project=PROJECT_ID \
--region=us-central1 \
&& gcloud container clusters create-auto quickstart-cluster-qsprod2 \
--project=PROJECT_ID \
--region=us-west1
Skaffold 構成とアプリケーション マニフェストを準備する
Cloud Deploy では、Skaffold を使用して、デプロイする対象と、個々のターゲットに適切にデプロイする方法の詳細を提供します。
このクイックスタートでは、skaffold.yaml ファイルを作成して、サンプルアプリのデプロイに使用する アプリケーション マニフェストを識別します。
ターミナル ウィンドウを開きます。
新しいディレクトリを作成し、そのディレクトリに移動します。
GKE
mkdir deploy-gke-parallel-quickstart cd deploy-gke-parallel-quickstartCloud Run
mkdir deploy-run-parallel-quickstart cd deploy-run-parallel-quickstart次の内容のファイルを
skaffold.yamlという名前で作成します。GKE
apiVersion: skaffold/v4beta1 kind: Config manifests: rawYaml: - k8s-deployment.yaml deploy: kubectl: {}Cloud Run
apiVersion: skaffold/v4beta1 kind: Config manifests: rawYaml: - service.yaml deploy: cloudrun: {}このファイルは、最小限の Skaffold 構成ファイルです。このクイックスタートでは、このファイルを作成します。ただし、Cloud Deploy で作成することで、単純な非本番環境アプリケーション用に作成することもできます。
この構成ファイルの詳細については、
skaffold.yamlリファレンスをご覧ください。Cloud Run サービス定義または GKE Kubernetes マニフェストでアプリケーションの定義を作成します。
GKE
次の内容のファイルを
k8s-deployment.yamlという名前で作成します。apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment labels: app: my-app namespace: default spec: replicas: 1 # from-param: ${replicaCount} selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: nginx image: my-app-imageこのファイルは、アプリケーションをデプロイするためにクラスタに適用されるシンプルな Kubernetes マニフェストです。デプロイするコンテナ イメージは、プレースホルダ
my-app-imageとしてここに設定されます。これは、リリースを作成するときに特定のイメージに 置き換えられます。Cloud Run
次の内容のファイルを
service.yamlという名前で作成します。apiVersion: serving.knative.dev/v1 kind: Service metadata: name: my-parallel-run-service spec: template: metadata: annotations: autoscaling.knative.dev/minScale: 1 # from-param: ${minInstances} spec: containers: - image: my-app-imageこのファイルは単純な Cloud Run サービス定義であり、デプロイ時に Cloud Run サービスを作成するために使用されます。デプロイするコンテナ イメージは、プレースホルダとしてここに設定されます。
my-app-imageこれは、リリースを作成するときに特定のイメージに置き換えられます。 create the release
デリバリー パイプラインとターゲットの作成
パイプラインとターゲットは、1 つのファイルまたは個別のファイルで定義できます。このクイックスタートでは、1 つのファイルを作成します。
デリバリー パイプラインとターゲット定義を作成:
GKE
deploy-gke-parallel-quickstartディレクトリに、次の内容を含む新しいclouddeploy.yamlファイルを作成します。apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: my-parallel-demo-app-1 description: main application pipeline serialPipeline: stages: - targetId: qsprod-multi profiles: [] deployParameters: - values: replicaCount: "1" matchTargetLabels: label1: label1 - values: replicaCount: "2" matchTargetLabels: label2: label2 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: qsprod-multi description: production clusters multiTarget: targetIds: [qsprod-a, qsprod-b] --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: qsprod-a labels: label1: label1 description: production cluster 2 gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/quickstart-cluster-qsprod1 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: qsprod-b labels: label2: label2 description: production cluster 3 gke: cluster: projects/PROJECT_ID/locations/us-west1/clusters/quickstart-cluster-qsprod2Cloud Run
deploy-run-parallel-quickstartディレクトリに、次の内容を含む新しいclouddeploy.yamlファイルを作成します。apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: my-parallel-demo-app-1 description: main application pipeline serialPipeline: stages: - targetId: qsprod-multi profiles: [] deployParameters: - values: minInstances: "2" matchTargetLabels: label1: label1 - values: minInstances: "3" matchTargetLabels: label2: label2 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: qsprod-multi description: production multiTarget: targetIds: [qsprod-a, qsprod-b] --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: qsprod-a labels: label1: label1 description: production us-central1 run: location: projects/PROJECT_ID/locations/us-central1 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: qsprod-b labels: label2: label2 description: production us-west1 run: location: projects/PROJECT_ID/locations/us-west1このファイルには、3 つのターゲット(1 つのマルチターゲットと 2 つの子ターゲット)が含まれています。デリバリー パイプラインではなく、別のファイルでターゲットを構成することもできます。
また、デリバリー パイプラインにはラベルを含む
deployParametersが含まれ、子ターゲットにはこれらのパラメータに一致するラベルが含まれることに注意してください。これにより、必要に応じて、別個の値を別個の子ターゲットに渡すことができます。 詳細パイプラインとターゲットを Cloud Deploy サービスに登録します。
gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_IDこれで、2 つの GKE ターゲットまたは Cloud Run ターゲットから成るマルチターゲットを有するパイプラインが作成されました。これで、アプリケーションをデプロイする準備が整いました。
次のように、パイプラインとターゲットを確認します。
コンソールで、Cloud Deploy の [**デリバリー パイプライン**] ページに移動し、使用可能なデリバリー パイプラインのリストを表示します。 Google Cloud
作成したデリバリー パイプラインが表示されます。
clouddeploy.yamlファイルで 3 つのターゲット(1 つのマルチ ターゲットと 2 つの子ターゲット)を構成している場合でも、[ターゲット] 列に 1 つのターゲットが表示されます。
リストにあるターゲットはマルチターゲット
qsprod-multiのみです。子ターゲットは表示されません。
リリースを作成する
リリースは Cloud Deploy リソースの中心で、デプロイの変更を表します。デリバリー パイプラインは、そのリリースのライフサイクルを定義します。このライフサイクルの詳細については、Cloud Deploy のサービス アーキテクチャをご覧ください。
GKE
deploy-gke-parallel-quickstart ディレクトリから次のコマンドを実行して、デプロイするコンテナ イメージを表す release リソースを作成します。
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=my-parallel-demo-app-1 \
--images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa \
--to-target=qsprod-multi
Cloud Run
deploy-run-parallel-quickstart
ディレクトリから次のコマンドを実行して、デプロイするコンテナ
イメージを表す release リソースを作成します。
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=my-parallel-demo-app-1 \
--images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:95ade4b17adcd07623b0a0c68359e344fe54e65d0cb01b989e24c39f2fcd296a \
--to-target=qsprod-multi
--images= フラグに注意してください。このフラグを使用して、
マニフェストまたはサービス定義
のプレースホルダ(my-app-image)を、SHA 修飾された特定のイメージに置き換えます。このようにマニフェストをテンプレート化し、リリース作成時に SHA 修飾されたイメージ名を使用することをおすすめします。
通常どおり、リリースを作成すると、パイプラインの
最初のターゲット(この場合は、
--to-target= を使用して指定された特定のターゲット)のロールアウトが自動的に作成されます。このクイックスタートでは、このターゲットはマルチターゲットです。そのため、
rollout は 2 つの
子ターゲットの「コントローラ ロールアウト」であり、デリバリー パイプラインには後続のターゲットはありません。
つまり、ロールアウトが作成されるたびにアプリケーションがデプロイされます。
コンソールで結果を表示する Google Cloud
リリースの作成が完了し、コントローラのロールアウトと子ロールアウトが作成されたので、それらの子ロールアウトはそれぞれの GKE クラスタまたは Cloud Run サービスにデプロイされ(またはすでにデプロイ処理中)ます。
コンソールで、Cloud Deploy の [**デリバリー パイプライン**] ページに移動し、**my-parallel-demo-app-1** デリバリー パイプラインを表示します。 Google Cloud
デリバリー パイプラインの名前「my-parallel-demo-app-1」をクリックします。
可視化されたパイプラインでは、アプリのデプロイ ステータスが表示されます。パイプラインには 1 つのステージしかないため、可視化されたパイプラインにはノードが 1 つだけ表示されます。

リリースが [デリバリー パイプラインの詳細] の下の [リリース] タブに表示されます。
リリース名
test-release-001をクリックします。ロールアウトが [ロールアウト] に表示されます。ロールアウトをクリックすると、デプロイログなどの詳細を表示できます。

クリーンアップ
このページで使用したリソースについて、アカウントに課金されないようにするには、次の手順を実施します。 Google Cloud
GKE クラスタまたは Cloud Run サービスを削除します。
GKE
gcloud container clusters delete quickstart-cluster-qsprod1 --region=us-central1 --project=PROJECT_ID \ && gcloud container clusters delete quickstart-cluster-qsprod2 --region=us-west1 --project=PROJECT_IDCloud Run
gcloud run services delete my-parallel-run-service --region=us-central1 --project=PROJECT_ID \ && gcloud run services delete my-parallel-run-service --region=us-west1 --project=PROJECT_IDデリバリー パイプライン、マルチターゲット、子ターゲット、リリース、ロールアウトを削除します。
gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_IDCloud Deploy によって作成された Cloud Storage バケットを削除します。
1 つは
_clouddeployで終わり、もう 1 つは[region].deploy-artifacts.[project].appspot.comで終わります。
これでクイックスタートの演習はすべて終了です。