コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。
クイックスタート: アプリを複数のターゲットに同時にデプロイする

アプリを複数のターゲットに同時にデプロイする

このページでは、Google Cloud Deploy を使用して、サンプル アプリケーションを 2 つのターゲットに同時にデプロイする方法(並行的なデプロイ)について説明します。

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

  1. 2 つの GKE クラスタまたは 2 つの Cloud Run サービスを作成します。

    Anthos クラスタと並行してデプロイすることもできますが、このクイックスタートでは GKE と Cloud Run のみを使用します。

  2. Skaffold 構成を作成し、Kubernetes マニフェストまたは Cloud Run サービス定義を作成します。

  3. Google Cloud Deploy デリバリー パイプラインとデプロイ ターゲットを定義します。

    このパイプラインにはターゲットが 1 つしかありませんが、そのターゲットは、複数のデプロイ ターゲットを表すマルチ ターゲットとなります。このマルチターゲットは、2 つの実際のターゲットで構成され、2 つのクラスタまたはサービスにアプリを提供します。

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

  5. Google Cloud コンソールで「コントローラのロールアウト」と子のロールアウトを表示します。

始める前に

  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。

  4. Google Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage API を有効にします。

    API を有効にする

  5. Google Cloud CLI をインストールします。
  6. gcloud CLI を初期化するには:

    gcloud init
  7. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  8. Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。

  9. Google Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage API を有効にします。

    API を有効にする

  10. Google Cloud CLI をインストールします。
  11. gcloud CLI を初期化するには:

    gcloud init
  12. CLI がすでにインストールされている場合は、最新バージョンを実行していることを確認してください。

    gcloud components update
    

  13. デフォルトの Compute Engine サービス アカウントに十分な権限があることを確認します。

    このサービス アカウントにはすでに必要な権限が付与されている場合があります。これらの手順は、デフォルトのサービス アカウントの自動的なロール付与を無効にするプロジェクトに含まれています。

    1. まず、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"
      

    2. 特定のランタイムのデベロッパー ロールを追加します。
      • 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"
        

    3. ランタイムにデプロイする actAs 権限を含む iam.serviceAccountUser ロールを追加します。

      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
      

ランタイム環境を作成する

Cloud Run にデプロイする場合は、このコマンドをスキップできます

GKE の場合、デフォルト設定で quickstart-cluster-qsprod1quickstart-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 構成と Kubernetes マニフェストを準備する

Google Cloud Deploy では、Skaffold を使用して、デプロイする対象と、個々のターゲットに適切にデプロイする方法の詳細を提供します。

このクイックスタートでは、skaffold.yaml ファイルを作成して、サンプルアプリのデプロイに使用する Kubernetes マニフェストを識別します。

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

  2. 新しいディレクトリを作成し、そのディレクトリに移動します。

    GKE

    mkdir deploy-gke-parallel-quickstart
    cd deploy-gke-parallel-quickstart
    

    Cloud Run

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

    GKE

    apiVersion: skaffold/v4beta1
    kind: Config
    manifests:
      rawYaml:
      - k8s-pod.yaml
    deploy:
      kubectl: {}
    

    Cloud Run

    apiVersion: skaffold/v4beta1
    kind: Config
    manifests:
      rawYaml:
      - service.yaml
    deploy:
      cloudrun: {}
    

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

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

  4. アプリケーションの定義(Cloud Run のサービス定義、または GKE の Kubernetes マニフェスト)を作成します。

    GKE

    次の内容のファイルを k8s-pod.yaml という名前で作成します。

    apiVersion: v1
    kind: Pod
    metadata:
      name: getting-started
    spec:
      containers:
      - name: echoserver
        image: my-app-image
    

    このファイルは、アプリケーションをデプロイするためにクラスタに適用される単純な Kubernetes マニフェストです。

    Cloud Run

    次の内容のファイルを service.yaml という名前で作成します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: my-parallel-run-service
    spec:
      template:
        spec:
          containers:
          - image: my-app-image
    

    このファイルは単純な Cloud Run サービス定義であり、デプロイ時に Cloud Run サービスを作成するために使用されます。

デリバリー パイプラインとターゲットの作成

パイプラインとターゲットは、1 つのファイルまたは個別のファイルで定義できます。このクイックスタートでは、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: []
    ---
    
    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
    description: production cluster 1
    gke:
     cluster: projects/PROJECT_ID/locations/us-central1/clusters/quickstart-cluster-qsprod1
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
     name: qsprod-b
    description: production cluster 2
    gke:
     cluster: projects/PROJECT_ID/locations/us-west1/clusters/quickstart-cluster-qsprod2
    

    Cloud 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: []
    ---
    
    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
    description: production us-central1
    run:
     location: projects/PROJECT_ID/locations/us-central1
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
     name: qsprod-b
    description: production us-west1
    run:
     location: projects/PROJECT_ID/locations/us-west1
    
  2. パイプラインとターゲットを Google Cloud Deploy サービスに登録します。

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

    これで、2 つの GKE ターゲットまたは Cloud Run ターゲットから成るマルチターゲットを有するパイプラインが作成されました。これで、アプリケーションをデプロイする準備が整いました。

  3. パイプラインとターゲットを確認します。

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

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

    作成したデリバリー パイプラインが表示されます。clouddeploy.yaml ファイルで 3 つのターゲット(1 つのマルチ ターゲットと 2 つの子ターゲット)を構成している場合でも、[ターゲット] 列に 1 つのターゲットが表示されます。

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

    リストにあるのはマルチターゲット qsprod-multi のみです。子ターゲットは表示されません。

リリースを作成する

リリースはGoogle Cloud Deploy リソースの中心で、デプロイの変更を表します。デリバリー パイプラインは、そのリリースのライフサイクルを定義します。そのライフサイクルの詳細については、Google 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=registry.k8s.io/echoserver:1.4 \
   --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=gcr.io/cloudrun/hello \
   --to-target=qsprod-multi

通常どおり、リリースを作成すると、パイプラインの最初のターゲット(この場合は --to-target= を使用して指定された特定のターゲット)のロールアウトが自動的に作成されます。このクイックスタートでは、このターゲットはマルチターゲットです。そのため、rollout は 2 つの子ターゲットの「コントローラ ロールアウト」であり、デリバリー パイプラインには後続のターゲットはありません。つまり、ロールアウトが作成されるたびにアプリケーションがデプロイされます。

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

リリースの作成が完了し、コントローラのロールアウトと子ロールアウトが作成されたので、それらの子ロールアウトはそれぞれの GKE クラスタまたは Cloud Run サービスにデプロイされ(またはすでにデプロイ処理中)ます。

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

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

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

    可視化されたパイプラインでは、アプリのデプロイ ステータスが表示されます。パイプラインには 1 つのステージしかないため、可視化されたパイプラインにはノードが 1 つだけ表示されます。

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

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

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

    [ロールアウト] の下にロールアウトが表示されます。ロールアウトをクリックすると、デプロイログを含む詳細情報が表示されます。

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

クリーンアップ

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

  1. 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_ID
    

    Cloud 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
    
  2. デリバリー パイプライン、マルチターゲット、子ターゲット、リリース、ロールアウトを削除します。

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

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

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

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

次のステップ