Skip to main content

Google Kubernetes Engineへのデプロイ

継続的デプロイメント(CD)ワークフローの一部として、Google Kubernetes Engineへのデプロイを行えます。


This guide explains how to use GitHub Actions to build a containerized application, push it to Google Container Registry (GCR), and deploy it to Google Kubernetes Engine (GKE) when there is a push to the main branch.

GKEはGoogle CloudによるマネージドなKubernetesクラスタサービスで、コンテナ化されたワークロードをクラウドもしくはユーザ自身のデータセンターでホストできます。 詳しい情報についてはGoogle Kubernetes Engineを参照してください。


ワークフローの作成に進む前に、Kubernetesプロジェクトについて以下のステップを完了しておく必要があります。 このガイドは、プロジェクトのルートにDockerfileとKubernetes Deployment設定ファイルがすでに存在することを前提としています。 例としてはgoogle-github-actionsを参照してください。


GKEクラスタを作成するには、まずgcloud CLIで認証を受けなければなりません。 このステップに関する詳しい情報については、以下の記事を参照してください。


$ gcloud container clusters create $GKE_CLUSTER \
    --project=$GKE_PROJECT \


Kubernetes Engine及びContainer Registry APIを有効化してください。 例:

$ gcloud services enable \ \


この手順は、GKEインテグレーション用のサービスアカウントの作成方法を示します。 It explains how to create the account, add roles to it, retrieve its keys, and store them as a base64-encoded encrypted repository secret named GKE_SA_KEY.

  1. 新しいサービスアカウントを作成してください。

    $ gcloud iam service-accounts create $SA_NAME
  2. 作成したサービスアカウントのメールアドレスを取得してください。

    $ gcloud iam service-accounts list
  3. サービスアカウントにロールを追加してください。 ノート: 要件に合わせて、より制約の強いロールを適用してください。

    $ gcloud projects add-iam-policy-binding $GKE_PROJECT \
      --member=serviceAccount:$SA_EMAIL \
    $ gcloud projects add-iam-policy-binding $GKE_PROJECT \
      --member=serviceAccount:$SA_EMAIL \
    $ gcloud projects add-iam-policy-binding $GKE_PROJECT \
      --member=serviceAccount:$SA_EMAIL \
  4. サービスアカウントのJSONキーファイルをダウンロードしてください。

    $ gcloud iam service-accounts keys create key.json --iam-account=$SA_EMAIL
  5. Store the service account key as a secret named GKE_SA_KEY:

    $ export GKE_SA_KEY=$(cat key.json | base64)

    For more information about how to store a secret, see "Encrypted secrets."

Storing your project name

Store the name of your project as a secret named GKE_PROJECT. For more information about how to store a secret, see "Encrypted secrets."


Kustomizeは、YAML仕様を管理するために使われるオプションのツールです。 After creating a kustomization file, the workflow below can be used to dynamically set fields of the image and pipe in the result to kubectl. 詳しい情報については、「kustomize の使い方」を参照してください。

(Optional) Configure a deployment environment

環境は、productionstagingdevelopmentのような一般的なターゲットを記述するために使われます。 GitHub Actionsワークフローが環境にデプロイする場合、その環境はリポジトリのメインページに表示されます。 環境を使って、ジョブが進むために承認を必要にしたり、ワークフローをトリガーできるブランチを制限したり、シークレットへのアクセスを制限したりできます。 環境の作成に関する詳しい情報については「デプロイメントのための環境の利用」を参照してください。



以下のワークフロー例は、コンテナイメージを作成して GCR にプッシュする方法を示しています。 次に、Kubernetes ツール(kubectlkustomize など)を使用して、イメージをクラスタデプロイメントにプルします。

Under the env key, change the value of GKE_CLUSTER to the name of your cluster, GKE_ZONE to your cluster zone, DEPLOYMENT_NAME to the name of your deployment, and IMAGE to the name of your image.

デプロイメント環境を設定したなら、environmentの値をその環境の名前に変更してください。 環境を設定していないなら、environmentキーを削除してください。

# このワークフローはGitHubによって認定されていないアクションを使用します。
# それらはサードパーティによって提供され、
# 別個の利用規約、プライバシーポリシー、
# サポートドキュメンテーションが適用されます。

# GitHub recommends pinning actions to a commit SHA.
# To get a newer version, you will need to update the SHA.
# You can also reference a tag or branch, but the action may change without warning.

name: Build and Deploy to GKE

      - main

  PROJECT_ID: ${{ secrets.GKE_PROJECT }}
  GKE_CLUSTER: cluster-1    # Add your cluster name here.
  GKE_ZONE: us-central1-c   # Add your cluster zone here.
  DEPLOYMENT_NAME: gke-test # Add your deployment name here.
  IMAGE: static-site

    name: Setup, Build, Publish, and Deploy
    runs-on: ubuntu-latest
    environment: production

    - name: Checkout
      uses: actions/checkout@v2

    # Setup gcloud CLI
    - uses: google-github-actions/setup-gcloud@94337306dda8180d967a56932ceb4ddcf01edae7
        service_account_key: ${{ secrets.GKE_SA_KEY }}
        project_id: ${{ secrets.GKE_PROJECT }}

    # Configure Docker to use the gcloud command-line tool as a credential
    # helper for authentication
    - run: |-
        gcloud --quiet auth configure-docker

    # Get the GKE credentials so we can deploy to the cluster
    - uses: google-github-actions/get-gke-credentials@fb08709ba27618c31c09e014e1d8364b02e5042e
        cluster_name: ${{ env.GKE_CLUSTER }}
        location: ${{ env.GKE_ZONE }}
        credentials: ${{ secrets.GKE_SA_KEY }}

    # Build the Docker image
    - name: Build
      run: |-
        docker build \
          --tag "$PROJECT_ID/$IMAGE:$GITHUB_SHA" \
          --build-arg GITHUB_SHA="$GITHUB_SHA" \
          --build-arg GITHUB_REF="$GITHUB_REF" \

    # Docker イメージを Google Container Registry にプッシュする
    - name: Publish
      run: |-
        docker push "$PROJECT_ID/$IMAGE:$GITHUB_SHA"

    # kustomize を設定する
    - name: Set up Kustomize
      run: |-
        curl -sfLo kustomize
        chmod u+x ./kustomize

    # Docker イメージを GKE クラスタにデプロイする
    - name: Deploy
      run: |-
        ./kustomize edit set image$PROJECT_ID/$IMAGE:$GITHUB_SHA
        ./kustomize build . | kubectl apply -f -
        kubectl rollout status deployment/$DEPLOYMENT_NAME
        kubectl get services -o wide