デプロイ パラメータを使用する

このページでは、Cloud Deploy を使用して、それぞれのレンダリングされたマニフェストまたはサービス定義に異なる 3 つの方法を使用して異なるパラメータ値を渡し、サンプル アプリケーションを 2 つのターゲットに同時に配信する(並列デプロイ)方法を説明します。

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

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

    GKE 接続クラスタも使用できますが、このクイックスタートでは GKE と Cloud Run のみを使用します。

  2. Skaffold 構成および、Kubernetes マニフェストまたは Cloud Run サービス定義のいずれかを作成します。

    マニフェストまたはサービス定義は両方の子ターゲットで同じですが、デプロイ時に、このクイックスタートで構成された特定のパラメータに対して、子ターゲットごとにレンダリングされたマニフェストまたはサービスの定義には異なる値が設定されます。

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

    このパイプラインには、2 つの子ターゲットを参照する 1 つのマルチターゲットがあり、 アプリを 2 つのクラスタまたは 2 つのサービスに配信します。

  4. 3 つの異なる 場所でデプロイ パラメータを定義します。

    • パイプラインの進行中に
    • 子ターゲットで
    • コマンドラインで、リリースを作成するとき
  5. リリースを作成してデリバリー パイプラインをインスタンス化します。リリースは自動的に 2 つのターゲットに並行してデプロイされます。

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

始める前に

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

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  5. Google Cloud CLI をインストールします。

  6. 外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

  7. gcloud CLI を初期化するには、次のコマンドを実行します:

    gcloud init
  8. 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

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the APIs

  11. Google Cloud CLI をインストールします。

  12. 外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

  13. gcloud CLI を初期化するには、次のコマンドを実行します:

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

    gcloud components update
    

  15. デフォルトの 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. 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
      

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

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

GKE の場合は、デフォルト設定で deploy-params-cluster-prod1deploy-params-cluster-prod2 の 2 つのクラスタを作成します。クラスタの Kubernetes API エンドポイントは、公共のインターネットからネットワークに到達可能である必要があります。 GKE クラスタには、デフォルトで外部からアクセス可能です。

gcloud container clusters create-auto deploy-params-cluster-prod1 \
                 --project=PROJECT_ID \
                 --region=us-central1 \
                 && gcloud container clusters create-auto deploy-params-cluster-prod2 \
                 --project=PROJECT_ID \
                 --region=us-west1

Skaffold 構成とマニフェストを準備する

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

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

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

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

    GKE

    mkdir deploy-params-gke-quickstart
    cd deploy-params-gke-quickstart
    

    Cloud Run

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

    GKE

    apiVersion: skaffold/v4beta7
    kind: Config
    manifests:
      rawYaml:
      - kubernetes.yaml
    deploy:
      kubectl: {}
    

    Cloud Run

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

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

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

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

    GKE

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

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-deployment
    spec:
      replicas: 1 # from-param: ${replicaCount}
      selector:
        matchLabels:
          app: my-app
      template:
        metadata:
          labels:
            app: my-app
          annotations:
            commit: defaultShaValue # from-param: ${git-sha}
        spec:
          containers:
          - name: nginx
            image: my-app-image
            env:
            - name: envvar1
              value: default1 # from-param: ${application_env1}
            - name: envvar2
              value: default2 # from-param: ${application_env2}
    

    このファイルは Kubernetes マニフェストであり、アプリケーションを デプロイするためにクラスタに適用されます。デプロイするコンテナ イメージは、プレースホルダ my-app-image としてここに設定されます。これは、リリースを作成するときに特定のイメージに置き換えられます。

    Cloud Run

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

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: my-parallel-run-service
    spec:
      autoscaling.knative.dev/minScale: 1 # from-param: ${minInstances}
      selector:
        matchLabels:
          app: my-app
      template:
        metadata:
          annotations:
            commit: defaultShaValue # from-param: ${git-sha}
        spec:
          containers:
          - image: my-app-image
            env:
            - name: envvar1
              value: defaultValue1 # from-param: ${application_env1}
            - name: envvar2
              value: defaultValue2 # from-param: ${application_env2}
    

    このファイルは、アプリケーションのデプロイに使用される基本的な Cloud Run サービス定義です。デプロイするコンテナ イメージ は、プレースホルダ my-app-image としてここに設定されます。これは、リリースを作成するときに 特定のイメージに置き換えられますcreate the release

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

パイプラインとターゲットは、1 つのファイルまたは個別のファイルで定義できます。このクイックスタートでは、1 つのファイルを作成します。

  1. デリバリー パイプラインとターゲット定義を作成:

    GKE

    deploy-params-gke-quickstart ディレクトリに、次の内容を含む新しい clouddeploy.yaml ファイルを作成します。

    apiVersion: deploy.cloud.google.com/v1
    kind: DeliveryPipeline
    metadata:
      name: my-params-demo-app-1
    description: main application pipeline
    serialPipeline:
      stages:
      - targetId: params-prod-multi
        deployParameters:
        - values:
            replicaCount: "2"
          # Apply the deploy parameter replicaCount: "2" to the target with this label
          matchTargetLabels:
            label1: label1
        - values:
            replicaCount: "3"
          # Apply the deploy parameter replicaCount: "3" to the target with this label
          matchTargetLabels:
            label2: label2
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: params-prod-multi
    description: production clusters
    multiTarget:
      targetIds: [params-prod-a, params-prod-b]
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: params-prod-a
      labels:
        label1: label1
    description: production cluster 1
    deployParameters:
      application_env1: "sampleValue1"
    gke:
      cluster: projects/PROJECT_ID/locations/us-central1/clusters/deploy-params-cluster-prod1
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: params-prod-b
      labels:
        label2: label2
    description: production cluster 2
    deployParameters:
      application_env2: "sampleValue2"
    gke:
      cluster: projects/PROJECT_ID/locations/us-west1/clusters/deploy-params-cluster-prod2
    

    Cloud Run

    deploy-params-run-quickstart ディレクトリに、次の内容を含む新しい clouddeploy.yaml ファイルを作成します。

    apiVersion: deploy.cloud.google.com/v1
    kind: DeliveryPipeline
    metadata:
      name: my-params-demo-app-1
    description: main application pipeline
    serialPipeline:
      stages:
      - targetId: params-prod-multi
        deployParameters:
        - values:
            minInstances: "2"
          # Apply the deploy parameter minInstances: "2" to the target with this label
          matchTargetLabels:
            label1: label1
        - values:
            minInstances: "3"
          # Apply the deploy parameter minInstances: "3" to the target with this label
          matchTargetLabels:
            label2: label2
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: params-prod-multi
    description: production clusters
    multiTarget:
      targetIds: [params-prod-a, params-prod-b]
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: params-prod-a
      labels:
        label1: label1
    description: production cluster 1
    deployParameters:
      application_env1: "sampleValue1"
    run:
      location: projects/PROJECT_ID/locations/us-central1
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: params-prod-b
      labels:
        label2: label2
    description: production cluster 2
    deployParameters:
      application_env2: "sampleValue2"
    run:
      location: projects/PROJECT_ID/locations/us-west1
    
  2. パイプラインとターゲットを Cloud Deploy サービスに登録します。