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 コンソールで両方のロールアウトを表示します。

始める前に

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

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

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

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

    API を有効にする

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

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

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

  8. Google Cloud プロジェクトで課金が有効になっていることを確認します

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

    API を有効にする

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

    gcloud init
  12. デフォルトの 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. Kubernetes 開発者の権限を追加します。

      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"
      

      これらのロールのいずれかを追加できない場合は、プロジェクト管理者にお問い合わせください。

    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
      

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

デフォルト設定で qsdevqsprod の 2 つのクラスタを作成します。クラスタの 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 マニフェストであり、アプリケーションをデプロイするためにクラスタに適用されます。

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

パイプラインとターゲットは、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

すべてのリリース(--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 Console でのデリバリー パイプラインの可視化

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

  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 ブラウザページを開く

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

次のステップ