Google Kubernetes Engineへのデプロイ

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

GitHub ActionsはGitHub Free、GitHub Pro、GitHub FreeのOrganization、GitHub Team、GitHub Enterprise Cloud、GitHub AEで利用できます。 GitHub Actionsは、レガシーのリポジトリごとのプランを使っているアカウントが所有しているプライベートリポジトリでは利用できません。 詳しい情報については「GitHubの製品」を参照してください。

はじめに

このガイドは、GitHub Actionsを使ってコンテナ化されたアプリケーションをビルドし、それをGoogle Container Registryにプッシュし、Google Kubernetes Engine (GKE)にデプロイする方法を説明します。

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

必要な環境

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

GKEクラスタの作成

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

例:

Shell
$ gcloud container clusters create $GKE_CLUSTER \
    --project=$GKE_PROJECT \
    --zone=$GKE_ZONE

APIの有効化

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

Shell
$ gcloud services enable \
    containerregistry.googleapis.com \
    container.googleapis.com

サービスアカウントの設定と資格情報の保存

この手順は、GKEインテグレーション用のサービスアカウントの作成方法を示します。 アカウントの作成、アカウントへのロールの追加、アカウントのキーの取得、それらのGKE_SA_KEYという名前のbase64エンコードされた暗号化されたリポジトリシークレットとしての保存の方法を説明します。

  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 \
      --role=roles/container.admin \
      --role=roles/storage.admin
    
  4. サービスアカウントのJSONキーファイルをダウンロードしてください。

    $ gcloud iam service-accounts keys create key.json --iam-account=$SA_EMAIL
    
  5. プロジェクトIDをGKE_PROJECTという名前のシークレットとして保存してください。

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

(オプション)kustomizeの設定

Kustomizeは、YAML仕様を管理するために使われるオプションのツールです。 kustomization ファイルの作成後、以下のワークフローを使用して、イメージのフィールドを動的に設定し、結果を kubectl にパイプすることができます。 詳しい情報については、「kustomize の使い方」を参照してください。

ワークフローの作成

必要な環境を整えたら、ワークフローの作成に進むことができます。

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

YAML
name: Build and Deploy to GKE

on:
  release:
    types: [created]

env:
  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

jobs:
  setup-build-publish-deploy:
    name: Setup, Build, Publish, and Deploy
    runs-on: ubuntu-latest
    steps:

    - name: Checkout
      uses: actions/checkout@v2

    # gcloud CLI のセットアップ
    - uses: google-github-actions/setup-gcloud@v0.2.0
      with:
        service_account_key: ${{ secrets.GKE_SA_KEY }}
        project_id: ${{ secrets.GKE_PROJECT }}

    # gcloud コマンドラインツールを認証情報ヘルパーとして使用するようにDockerを設定する
    - run: |-
        gcloud --quiet auth configure-docker

    # GKE 認証情報を取得して、クラスタにデプロイできるようにする
    - uses: google-github-actions/get-gke-credentials@v0.2.1
      with:
        cluster_name: ${{ env.GKE_CLUSTER }}
        location: ${{ env.GKE_ZONE }}
        credentials: ${{ secrets.GKE_SA_KEY }}

    # Docker イメージをビルドする
    - name: Build
      run: |-
        docker build \
          --tag "gcr.io/$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 "gcr.io/$PROJECT_ID/$IMAGE:$GITHUB_SHA"

    # kustomize を設定する
    - name: Set up Kustomize
      run: |-
        curl -sfLo kustomize https://github.com/kubernetes-sigs/kustomize/releases/download/v3.1.0/kustomize_3.1.0_linux_amd64
        chmod u+x ./kustomize

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

追加リソース

これらの例で使用されているツールの詳細については、次のドキュメントを参照してください。

このドキュメントは役立ちましたか?プライバシーポリシー

これらのドキュメントを素晴らしいものにするのを手伝ってください!

GitHubのすべてのドキュメントはオープンソースです。間違っていたり、はっきりしないところがありましたか?Pull Requestをお送りください。

コントリビューションを行う

OR, コントリビューションの方法を学んでください。

問題がまだ解決していませんか?

GitHubコミュニティで質問するサポートへの連絡