Cloud Deploy を使用してアプリを GKE にデプロイする。

このページでは、Cloud Deploy を使用して、nginx という名前のサンプル アプリケーション イメージを一連の 2 つの Google Kubernetes Engine クラスタに配信する方法を説明します。

このクイックスタートでは、以下の内容を行います。

  1. 2 つのクラスタを作成します。

  2. Skaffold 構成と Kubernetes マニフェストを作成して、デプロイする(事前にビルドされた)コンテナ イメージを指定します。

  3. Cloud Deploy デリバリー パイプラインとデプロイ ターゲットを定義します。これらは、2 つのクラスタを指します。

  4. リリースを作成してデリバリー パイプラインをインスタンス化します。リリースは自動的に最初のターゲットにデプロイされます。

  5. リリースを 2 番目のターゲットにプロモートします。

  6. Google Cloud コンソールで両方のロールアウトを表示します。

始める前に

  • Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  • 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  • このガイドで既存のプロジェクトを使用する場合は、このガイドを完了するために必要な権限があることを確認します。新しいプロジェクトを作成した場合は、必要な権限がすでに付与されています。

  • 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.

    Enable the APIs

  • Install the 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 the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  • このガイドで既存のプロジェクトを使用する場合は、このガイドを完了するために必要な権限があることを確認します。新しいプロジェクトを作成した場合は、必要な権限がすでに付与されています。

  • 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.

    Enable the APIs

  • 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 サービス アカウントに付与するよう管理者に依頼してください。

    ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

    管理者は、カスタムロールや他の事前定義ロールを使用して、Cloud Deploy サービス アカウントに必要な権限を付与することもできます。

    Google Kubernetes Engine クラスタを作成する

    デフォルト設定で 2 つのクラスタ(qsdevqsprod)を作成します。クラスタの 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 マニフェストを識別します。

    1. ターミナル ウィンドウを開きます。

    2. deploy-gke-quickstart という名前で新しいディレクトリを作成し、そのディレクトリに移動します。

      mkdir deploy-gke-quickstart
      cd deploy-gke-quickstart
      
    3. 次の内容のファイルを skaffold.yaml という名前で作成します。

      apiVersion: skaffold/v4beta7
      kind: Config
      manifests:
        rawYaml:
        - k8s-*
      deploy:
        kubectl: {}
      

      このファイルは、マニフェストを識別する最小限の Skaffold 構成ファイルです。このクイックスタートでは、このファイルを作成します。ただし、Cloud Deploy で作成することで、単純な非本番環境アプリケーション用に作成することもできます。

      この構成ファイルの詳細については、skaffold.yaml リファレンスをご覧ください。

    4. 次の内容のファイルを 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 つのファイルを作成します。

    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
      
    2. パイプラインとターゲットを Cloud Deploy サービスに登録します。

      gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
      

      これで、ターゲットを持つパイプラインが用意され、最初のターゲットにアプリケーションをデプロイする準備が整いました。

    3. 次のとおりに、パイプラインとターゲットを確認します。

      Google Cloud コンソールで、Cloud Deploy の [デリバリー パイプライン] ページに移動し、使用可能なデリバリー パイプラインのリストを表示します。

      [デリバリー パイプライン] ページを開く

      作成したデリバリー パイプラインが表示され、[ターゲット] 列に 2 つのターゲットが一覧表示されます。

       Google Cloud コンソールでのデリバリー パイプラインの可視化

    リリースを作成する

    リリースは 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 ではロールアウト リソースも自動的に作成されます。アプリケーションは、進行中の最初のターゲットに自動的にデプロイされます。

    リリースを昇格する

    1. [デリバリー パイプライン] ページで、my-gke-demo-app-1 パイプラインをクリックします。

      [デリバリー パイプライン] ページを開く

      デリバリー パイプラインの詳細ページには、デリバリー パイプラインの進行状況がグラフィカルに表示されます。この場合、リリースが qsdev ターゲットにデプロイされたことを示します。

       Google Cloud コンソールでのデリバリー パイプラインの可視化

    2. デリバリー パイプラインの可視化の最初のターゲットで、[Promote] をクリックします。

      [リリースの昇格] ダイアログが表示されます。昇格先のターゲットの詳細が表示されます。

    3. [Promote] をクリックします。

      これで、リリースは qsprod へのデプロイのためにキューに入れられます。デプロイが完了すると、デリバリー パイプラインの可視化にデプロイ済みと表示されます。

       Google Cloud コンソールでのデリバリー パイプラインの可視化

    Google Cloud コンソールで結果を表示する

    1. Google Cloud コンソールで、Cloud Deploy の [デリバリー パイプライン] ページに移動し、[my-gke-demo-app-1] デリバリー パイプラインを表示します。

      [デリバリー パイプライン] ページを開く

    2. デリバリー パイプラインの名前「my-gke-demo-app-1」をクリックします。

      パイプラインの可視化では、パイプラインにおけるアプリの進行状況が表示されます。

       Google Cloud コンソールでのデリバリー パイプラインの可視化

      リリースが [デリバリー パイプラインの詳細] の下の [リリース] タブに表示されます。

    3. リリース名 test-release-001 をクリックします。

      ロールアウトは [ロールアウト] に表示されます。ロールアウトをクリックすると、デプロイログなどの詳細を表示できます。

       Google Cloud コンソールでのロールアウト

    クリーンアップ

    このページで使用したリソースについて、 Google Cloud アカウントに課金されないようにするには、次の手順を実施します。

    1. qsdev クラスタを削除します。

      gcloud container clusters delete quickstart-cluster-qsdev --region=us-central1 --project=PROJECT_ID
      
    2. qsprod クラスタを削除します。

      gcloud container clusters delete quickstart-cluster-qsprod --region=us-central1 --project=PROJECT_ID
      
    3. デリバリー パイプライン、ターゲット、リリース、ロールアウトを削除します。

      gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
      
    4. Cloud Deploy によって作成された Cloud Storage バケットを削除します。

      1 つは _clouddeploy で終わり、もう 1 つは [region].deploy-artifacts.[project].appspot.com で終わります。

      Cloud Storage ブラウザページを開く

    これでクイックスタートの演習はすべて終了です。

    次のステップ