Cloud Deploy を使用してアプリを GKE にデプロイする。
このページでは、Cloud Deploy を使用して、nginx という名前のサンプル アプリケーション イメージを一連の 2 つの Google Kubernetes Engine クラスタに配信する方法を説明します。
このクイックスタートでは、以下の内容を行います。
始める前に
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, 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 the serviceusage.services.enable permission. Learn how to grant
roles.
Install the Google Cloud CLI.
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
gcloud CLI を初期化するには、次のコマンドを実行します。
gcloud initIn 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, 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 the serviceusage.services.enable permission. Learn how to grant
roles.
Install the Google Cloud CLI.
外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。
gcloud CLI を初期化するには、次のコマンドを実行します。
gcloud init必要なロール
Cloud Deploy の配信パイプラインとリリースを作成するために必要な権限を取得するには、プロジェクトに対する Cloud Deploy ジョブ実行者 (roles/clouddeploy.jobrunner)IAM ロールを付与するよう管理者に依頼してください。
Cloud Deploy オペレーションを実行して Cloud Run にデプロイするために必要な権限が Cloud Deploy サービス アカウントに付与されるように、プロジェクトに対する次の IAM ロールを Cloud Deploy サービス アカウントに付与するよう管理者に依頼してください。
-
Google Kubernetes Engine デベロッパー (
roles/container.developer) -
IAM サービス アカウント ユーザー (
roles/iam.serviceAccountUser)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
管理者は、カスタムロールや他の事前定義ロールを使用して、Cloud Deploy サービス アカウントに必要な権限を付与することもできます。
Google Kubernetes Engine クラスタを作成する
デフォルト設定で 2 つのクラスタ(qsdev と qsprod)を作成します。クラスタの Kubernetes API エンドポイントは、公共のインターネットからネットワークに到達可能である必要があります。
GKE クラスタには、デフォルトで外部からアクセス可能です。
gcloud container clusters create-auto quickstart-cluster-qsdev --project=PROJECT_ID --region=us-central1 && gcloud container clusters create-auto quickstart-cluster-qsprod --project=PROJECT_ID --region=us-central1
Skaffold 構成と Kubernetes マニフェストを準備する
Cloud Deploy では、Skaffold を使用して、デプロイする対象と、個々のターゲットに適切にデプロイする方法の詳細を提供します。
このクイックスタートでは、skaffold.yaml ファイルを作成して、サンプルアプリのデプロイに使用する Kubernetes マニフェストを識別します。
ターミナル ウィンドウを開きます。
deploy-gke-quickstartという名前で新しいディレクトリを作成し、そのディレクトリに移動します。mkdir deploy-gke-quickstart cd deploy-gke-quickstart次の内容のファイルを
skaffold.yamlという名前で作成します。apiVersion: skaffold/v4beta7 kind: Config manifests: rawYaml: - k8s-* deploy: kubectl: {}このファイルは、マニフェストを識別する最小限の Skaffold 構成ファイルです。このクイックスタートでは、このファイルを作成します。ただし、Cloud Deploy で作成することで、単純な非本番環境アプリケーション用に作成することもできます。
この構成ファイルの詳細については、
skaffold.yamlリファレンスをご覧ください。次の内容のファイルを
k8s-pod.yamlという名前で作成します。apiVersion: v1 kind: Pod metadata: name: getting-started spec: containers: - name: nginx image: my-app-imageこのファイルは、基本的な Kubernetes マニフェストであり、アプリケーションをデプロイするためにクラスタに適用されます。デプロイするコンテナ イメージは、プレースホルダ
my-app-imageとしてここに設定されます。これは、リリースを作成するときに特定のイメージに置き換えられます。
デリバリー パイプラインとターゲットの作成
パイプラインとターゲットは、1 つのファイルまたは個別のファイルで定義できます。このクイックスタートでは、1 つのファイルを作成します。
deploy-gke-quickstartディレクトリに、次の内容を含む新しいclouddeploy.yamlファイルを作成します。apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: my-gke-demo-app-1 description: main application pipeline serialPipeline: stages: - targetId: qsdev profiles: [] - targetId: qsprod profiles: [] --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: qsdev description: development cluster gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/quickstart-cluster-qsdev --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: qsprod description: production cluster gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/quickstart-cluster-qsprodパイプラインとターゲットを Cloud Deploy サービスに登録します。
gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_IDこれで、ターゲットを持つパイプラインが用意され、最初のターゲットにアプリケーションをデプロイする準備が整いました。
次のとおりに、パイプラインとターゲットを確認します。
Google Cloud コンソールで、Cloud Deploy の [デリバリー パイプライン] ページに移動し、使用可能なデリバリー パイプラインのリストを表示します。
作成したデリバリー パイプラインが表示され、[ターゲット] 列に 2 つのターゲットが一覧表示されます。

リリースを作成する
リリースは Cloud Deploy リソースの中心で、デプロイの変更を表します。デリバリー パイプラインは、そのリリースのライフサイクルを定義します。このライフサイクルの詳細については、Cloud Deploy のサービス アーキテクチャをご覧ください。
deploy-gke-quickstart ディレクトリから次のコマンドを実行して、デプロイするコンテナ イメージを表す release リソースを作成します。
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=my-gke-demo-app-1 \
--images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa
--images= フラグに注目してください。このフラグは、マニフェスト内のプレースホルダ(my-app-image)を特定の SHA 修飾イメージに置き換えるために使用します。Google は、この方法でマニフェストをテンプレート化し、リリースの作成時に SHA 修飾イメージ名を使用することをおすすめします。
すべてのリリース(--disable-initial-rollout を含むものを除き)において、Cloud Deploy ではロールアウト リソースも自動的に作成されます。アプリケーションは、進行中の最初のターゲットに自動的にデプロイされます。
リリースを昇格する
[デリバリー パイプライン] ページで、
my-gke-demo-app-1パイプラインをクリックします。デリバリー パイプラインの詳細ページには、デリバリー パイプラインの進行状況がグラフィカルに表示されます。この場合、リリースが
qsdevターゲットにデプロイされたことを示します。
デリバリー パイプラインの可視化の最初のターゲットで、[Promote] をクリックします。
[リリースの昇格] ダイアログが表示されます。昇格先のターゲットの詳細が表示されます。
[Promote] をクリックします。
これで、リリースは
qsprodへのデプロイのためにキューに入れられます。デプロイが完了すると、デリバリー パイプラインの可視化にデプロイ済みと表示されます。
Google Cloud コンソールで結果を表示する
Google Cloud コンソールで、Cloud Deploy の [デリバリー パイプライン] ページに移動し、[my-gke-demo-app-1] デリバリー パイプラインを表示します。
デリバリー パイプラインの名前「my-gke-demo-app-1」をクリックします。
パイプラインの可視化では、パイプラインにおけるアプリの進行状況が表示されます。

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

クリーンアップ
このページで使用したリソースについて、 Google Cloud アカウントに課金されないようにするには、次の手順を実施します。
qsdevクラスタを削除します。gcloud container clusters delete quickstart-cluster-qsdev --region=us-central1 --project=PROJECT_IDqsprodクラスタを削除します。gcloud container clusters delete quickstart-cluster-qsprod --region=us-central1 --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で終わります。
これでクイックスタートの演習はすべて終了です。