GKE へのデプロイ

このページでは、Cloud Build を使用して Kubernetes にアプリケーションをデプロイする方法について説明します。

Cloud Build には、コンテナ化されたアプリケーションを GKE クラスタにデプロイできる gke-deploy ビルダーがあります。

gke-deploykubectl のラッパーで、Kubernetes 用のコマンドライン インターフェースです。Kubernetes にアプリケーションをデプロイする際に、次の方法で Google 推奨の方法を適用します。

  • タグの代わりにコンテナ イメージのダイジェストを使用するように、アプリケーションの Kubernetes リソース ファイルを更新します。

  • 推奨ラベルを Kubernetes リソース ファイルに追加します。

  • イメージをデプロイする GKE クラスタの認証情報を取得します。

  • 送信された Kubernetes リソース ファイルの準備が完了するまで待機します。

kubectl を直接使用してアプリケーションをデプロイし、追加の機能を必要としない場合は、Cloud Build の kubectl ビルダーを使用してアプリケーションを GKE クラスタにデプロイできます。

始める前に

  • GKE クラスタをまだ作成していない場合は作成します。

  • コンテナ化されたアプリケーション(ソースコード形式)と Dockerfile を用意します。ソースコードは、Cloud Source Repositories、GitHub、Bitbucket などのリポジトリに保存する必要があります。

  • アプリケーションの実行に使用する Kubernetes リソースを記述する Kubernetes リソース ファイルが少なくとも 1 つ必要です。Kubernetes リソース ファイルがない場合は、次の手順に従ってアプリケーション用の Kubernetes リソース ファイルを作成します。

    1. Google Cloud Console で Kubernetes Engine クラスタのページにアクセスします。
    2. Kubernetes Engine クラスタのページで、[デプロイ] をクリックします。
    3. コンテナを選択して、[続行] をクリックします。構成セクションが表示されます。
    4. [構成 YAML] で [YAML を表示] をクリックし、サンプルの Kubernetes リソース ファイルを取得します。

必要な IAM 権限

Google Kubernetes Engine デベロッパーのロールをアカウントに追加します。

  1. Cloud Build 設定ページを開きます。

    Cloud Build 設定ページを開く

    [サービス アカウント権限] ページが表示されます。

    サービス アカウント権限ページのスクリーンショット

  2. Kubernetes Engine デベロッパー ロールのステータスを「有効」に設定します。

ビルド済みのコンテナ イメージをデプロイする

gke-deploy を使用して特定のバージョンのアプリケーションをデプロイするには:

  1. Kubernetes リソース ファイルが正しいコンテナ イメージのタグまたはダイジェストを参照していることを確認します。

  2. ビルド構成ファイルgke-deploy ステップを追加します。

    YAML

    steps:
    ...
    # deploy container image to GKE
    - name: "gcr.io/cloud-builders/gke-deploy"
      args:
      - run
      - --filename=kubernetes-resource-file
      - --location=location
      - --cluster=cluster
    

    JSON

    {
      "steps": [
        {
          "name": "gcr.io/cloud-builders/gke-deploy",
          "args": [
            "run",
            "--filename=kubernetes-resource-file",
            "--location=location",
            "--cluster=cluster"
          ]
        }
      ]
    }
    

    ここで

    • kubernetes-resource-file は、Kubernetes リソース ファイルのパスか、Kubernetes リソース ファイルが含まれるディレクトリのパスです。
    • cluster は、アプリケーションのデプロイ先となる GKE クラスタの名前です。
    • location は、クラスタのリージョン / クラスタです。

    使用可能なフラグの詳細については、gke-deploy run フラグをご覧ください。

  3. ビルドを開始します。

    gcloud builds submit --region=REGION --project=project-id --config build-config
    

    ここで

新しいコンテナ イメージをビルドしてデプロイする

新しいコンテナ イメージをビルドしてデプロイするには:

  1. --image 属性を使用して、新しいコンテナ イメージで Kubernetes リソース ファイルを更新します。

    YAML

    steps:
      # build the container image
    - name: "gcr.io/cloud-builders/docker"
      args: ["build", "-t", "gcr.io/project-id/image:tag", "."]
      # push container image
    - name: "gcr.io/cloud-builders/docker"
      args: ["push", "gcr.io/project-id/image:tag"]
      # deploy container image to GKE
    - name: "gcr.io/cloud-builders/gke-deploy"
      args:
      - run
      - --filename=kubernetes-resource-file
      - --image=gcr.io/project-id/image:tag
      - --location=location
      - --cluster=cluster
    

    JSON

    {
      "steps": [
        {
          "name": "gcr.io/cloud-builders/docker",
          "args": [
            "build",
            "-t",
            "gcr.io/project-id/image:tag",
            "."
          ]
        },
        {
          "name": "gcr.io/cloud-builders/docker",
          "args": [
            "push",
            "gcr.io/project-id/image:tag"
          ]
        },
        {
          "name": "gcr.io/cloud-builders/gke-deploy",
          "args": [
            "run",
            "--filename=kubernetes-resource-file",
            "--image=gcr.io/project-id/image:tag",
            "--location=location",
            "--cluster=cluster"
          ]
        }
      ]
    }
    

    ここで

    • project-id はプロジェクトの ID です。
    • image は、コンテナ イメージの名前です。通常は、アプリケーション名です。
    • tag は、コンテナ イメージのタグです。
      • 各 commit で新しいコンテナ イメージを作成する場合は、commit の短縮 SHA をタグとして使用することをおすすめします。Cloud Build は、デフォルトの置換として $SHORT_SHA を使用します。
    • kubernetes-resource-file は、Kubernetes リソース ファイルのパスか、Kubernetes リソース ファイルが含まれるディレクトリのパスです。
    • cluster は、アプリケーションのデプロイ先となる GKE クラスタの名前です。
    • location は、デプロイするクラスタのリージョンまたはゾーンです。
  2. ビルドを開始します。

    gcloud builds submit --region=REGION --project=project-id --config build-config
    

    ここで

デプロイを自動化する

Cloud Build でトリガーを作成すると、GKE へのアプリケーションのデプロイを自動化できます。コードの変更を push するたびにイメージをビルドしてデプロイするようにトリガーを構成できます。

ビルドトリガーを作成するには:

  1. Google Cloud Console で [トリガー] ページを開きます。

    [トリガー] ページを開く

  2. ページ上部にあるプロジェクト セレクタのプルダウン メニューからプロジェクトを選択します。

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

  4. [トリガーを作成] をクリックします。

    [トリガーの作成] ページで、次の設定を入力します。

    1. トリガーの名前を入力します。

    2. トリガーを開始するリポジトリ イベントを選択します。

    3. ソースコードとビルド構成ファイルを含むリポジトリを選択します。

    4. トリガーを開始するブランチまたはタグ名を正規表現で指定します。

    5. トリガーの [構成] を選択します。

      Cloud Build 構成ファイルを選択するときに、変数名とその変数に関連付ける値を指定して代入変数を指定できます。以下の例では、ユーザー定義の代入変数 _CLOUDSDK_CONTAINER_CLUSTER にデプロイ先のクラスタを指定し、ユーザー定義の代入変数 _CLOUDSDK_COMPUTE_ZONE にその場所を指定します。別のクラスタにデプロイする場合、同じビルド構成を使用すると、代入変数の値を変更するだけで済みます。

      YAML

      steps:
      ...
      # deploy container image to GKE
      - name: "gcr.io/cloud-builders/gke-deploy"
        args:
        - run
        - --filename=kubernetes-resource-file
        - --image=gcr.io/project-id/image:tag
        - --location=${_CLOUDSDK_COMPUTE_ZONE}
        - --cluster=${_CLOUDSDK_CONTAINER_CLUSTER}
      

      JSON

      {
        "steps": [
          {
            "name": "gcr.io/cloud-builders/gke-deploy",
            "args": [
              "run",
              "--filename=kubernetes-resource-file",
              "--image=gcr.io/project-id/image:tag",
              "--location=${_CLOUDSDK_COMPUTE_ZONE}",
              "--cluster=${_CLOUDSDK_CONTAINER_CLUSTER}"
            ]
          }
        ]
      }
      

      ここで

      • kubernetes-resource-file は、Kubernetes 構成ファイルのパスか、Kubernetes リソース ファイルが含まれるディレクトリのパスです。
      • project-id はプロジェクトの ID です。
      • image は、コンテナ イメージの名前です。通常は、アプリケーション名です。
      • tag は、コンテナ イメージのタグです。

      ビルド構成ファイルの置換を定義する方法については、ユーザー定義の置換の使用をご覧ください。

  5. [作成] をクリックして、ビルドトリガーを保存します。

リポジトリにコードを push すると、Cloud Build によってビルドが自動的にトリガーされます。ビルドトリガーの詳細については、ビルドトリガーの作成と管理をご覧ください。

次のステップ