{"meta":{"title":"Google Kubernetes Engineへのデプロイ","intro":"継続的デプロイ (CD) ワークフローの一部として、Google Kubernetes Engine (GKE) にプロジェクトをデプロイする方法について説明します。","product":"GitHub Actions","breadcrumbs":[{"href":"/ja/actions","title":"GitHub Actions"},{"href":"/ja/actions/how-tos","title":"方法"},{"href":"/ja/actions/how-tos/deploy","title":"デプロイ"},{"href":"/ja/actions/how-tos/deploy/deploy-to-third-party-platforms","title":"サード パーティのプラットフォームへのデプロイ"},{"href":"/ja/actions/how-tos/deploy/deploy-to-third-party-platforms/google-kubernetes-engine","title":"Google Kubernetes エンジン"}],"documentType":"article"},"body":"# Google Kubernetes Engineへのデプロイ\n\n継続的デプロイ (CD) ワークフローの一部として、Google Kubernetes Engine (GKE) にプロジェクトをデプロイする方法について説明します。\n\n## 前提条件\n\nワークフローの作成に進む前に、Kubernetesプロジェクトについて以下のステップを完了しておく必要があります。 このガイドは、プロジェクトのルートに `Dockerfile` と Kubernetes Deployment 構成ファイルが既にあることを前提としています。\n\n### GKEクラスタの作成\n\nGKE クラスターを作成するには、まず `gcloud` CLI を使用して認証する必要があります。 このステップに関する詳しい情報については、以下の記事を参照してください。\n\n* [`gcloud auth login`](https://cloud.google.com/sdk/gcloud/reference/auth/login)\n* [\n  `gcloud` コマンドラインインターフェース (CLI)](https://cloud.google.com/sdk/gcloud/reference)\n* [\n  `gcloud` CLI と Cloud SDK](https://cloud.google.com/sdk/gcloud#the_gcloud_cli_and_cloud_sdk)\n\n次に例を示します。\n\n```shell copy\n$ gcloud container clusters create $GKE_CLUSTER \\\n    --project=$GKE_PROJECT \\\n    --zone=$GKE_ZONE\n```\n\n### APIの有効化\n\nKubernetes Engine及びContainer Registry APIを有効化してください。 次に例を示します。\n\n```shell copy\n$ gcloud services enable \\\n    containerregistry.googleapis.com \\\n    container.googleapis.com\n```\n\n### サービスアカウントの設定と資格情報の保存\n\nこの手順は、GKEインテグレーション用のサービスアカウントの作成方法を示します。 アカウントを作成し、ロールを追加し、そのキーを取得し、という名前の base64 でエンコードされた暗号化された `GKE_SA_KEY`repository シークレットとして格納する方法について説明します。\n\n1. 新しいサービス アカウントを作成します。\n\n   ```shell copy\n   gcloud iam service-accounts create $SA_NAME\n   ```\n\n2. 作成したサービス アカウントのメール アドレスを取得します。\n\n   ```shell copy\n   gcloud iam service-accounts list\n   ```\n\n3. サービスアカウントにロールを追加してください。\n\n   > \\[!NOTE]\n   > 要件に合わせて、より制約の強いロールを適用してください。\n\n   ```shell copy\n   gcloud projects add-iam-policy-binding $GKE_PROJECT \\\n     --member=serviceAccount:$SA_EMAIL \\\n     --role=roles/container.admin\n   gcloud projects add-iam-policy-binding $GKE_PROJECT \\\n     --member=serviceAccount:$SA_EMAIL \\\n     --role=roles/storage.admin\n   gcloud projects add-iam-policy-binding $GKE_PROJECT \\\n     --member=serviceAccount:$SA_EMAIL \\\n     --role=roles/container.clusterViewer\n   ```\n\n4. サービス アカウントの JSON キーファイルをダウンロードします。\n\n   ```shell copy\n   gcloud iam service-accounts keys create key.json --iam-account=$SA_EMAIL\n   ```\n\n5. サービス アカウント キーを `GKE_SA_KEY` という名前のシークレットとして格納します。\n\n   ```shell copy\n   export GKE_SA_KEY=$(cat key.json | base64)\n   ```\n\n   シークレットを格納する方法について詳しくは、「[GitHub Actions でのシークレットの使用](/ja/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets)」をご覧ください。\n\n### プロジェクト名の保存\n\nプロジェクトの名前を `GKE_PROJECT` という名前のシークレットとして保存します。 シークレットを格納する方法について詳しくは、「[GitHub Actions でのシークレットの使用](/ja/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets)」をご覧ください。\n\n### kustomize（オプション）の設定\n\nKustomizeは、YAML仕様を管理するために使われるオプションのツールです。\n`kustomization` ファイルを作成した後、次のワークフローを使用して、イメージのフィールドを動的に設定し、結果を `kubectl` にパイプできます。 詳細については、「[kustomize の使用](https://github.com/kubernetes-sigs/kustomize#usage)」を参照してください。\n\n### (省略可能) デプロイ環境を構成する\n\n環境は、一般的なデプロイ ターゲットを記述するために使用されます (例: `production`、`staging`、または `development`)。\nGitHub Actions ワークフローが環境にデプロイされると、その環境がリポジトリのメイン ページに表示されます。 環境を使って、ジョブを進めるために承認を必要とすること、ワークフローをトリガーできるブランチを制限すること、カスタム デプロイ保護規則でデプロイを制限すること、またはシークレットへのアクセスを制限することができます。 環境の作成の詳細については、「[デプロイメント用の環境管理](/ja/actions/how-tos/deploy/configure-and-manage-deployments/manage-environments)」を参照してください。\n\n## ワークフローの作成\n\n必要な環境を整えたら、ワークフローの作成に進むことができます。\n\n以下のワークフロー例は、コンテナイメージを作成して GCR にプッシュする方法を示しています。 次に、Kubernetes ツール (`kubectl` や `kustomize` など) を使用して、イメージがクラスター デプロイにプルされます。\n\n`env` キーの下で、`GKE_CLUSTER` の値をクラスターの名前に、`GKE_ZONE` をクラスター ゾーンに、`DEPLOYMENT_NAME` をデプロイの名前に、`IMAGE` をイメージの名前に変更します。\n\nデプロイ環境を構成した場合は、`environment` の値を環境の名前に変更します。 環境を構成しなかった場合、またはワークフローがプライベート リポジトリにあり、GitHub Enterprise Cloud を使わない場合は、`environment` キーを削除します。\n\n```yaml copy\n# このワークフローはGitHubによって認定されていないアクションを使用します。\n# それらはサードパーティによって提供され、\n# 別個の利用規約、プライバシーポリシー、\n# ドキュメントを参照してください。\n\n# GitHub では、コミット SHA にアクションをピン留めすることが推奨されます。\n# 新しいバージョンを取得するには、SHA を更新する必要があります。\n# タグまたはブランチを参照することもできますが、アクションは警告なしに変更される可能性があります。\n\nname: Build and Deploy to GKE\n\non:\n  push:\n    branches:\n      - main\n\nenv:\n  PROJECT_ID: ${{ secrets.GKE_PROJECT }}\n  GKE_CLUSTER: cluster-1    # Add your cluster name here.\n  GKE_ZONE: us-central1-c   # Add your cluster zone here.\n  DEPLOYMENT_NAME: gke-test # Add your deployment name here.\n  IMAGE: static-site\n\njobs:\n  setup-build-publish-deploy:\n    name: Setup, Build, Publish, and Deploy\n    runs-on: ubuntu-latest\n    environment: production\n\n    steps:\n    - name: Checkout\n      uses: actions/checkout@v6\n\n    # Setup gcloud CLI\n    - uses: google-github-actions/setup-gcloud@1bee7de035d65ec5da40a31f8589e240eba8fde5\n      with:\n        service_account_key: ${{ secrets.GKE_SA_KEY }}\n        project_id: ${{ secrets.GKE_PROJECT }}\n\n    # Configure Docker to use the gcloud command-line tool as a credential\n    # helper for authentication\n    - run: |-\n        gcloud --quiet auth configure-docker\n\n    # Get the GKE credentials so we can deploy to the cluster\n    - uses: google-github-actions/get-gke-credentials@db150f2cc60d1716e61922b832eae71d2a45938f\n      with:\n        cluster_name: ${{ env.GKE_CLUSTER }}\n        location: ${{ env.GKE_ZONE }}\n        credentials: ${{ secrets.GKE_SA_KEY }}\n\n    # Build the Docker image\n    - name: Build\n      run: |-\n        docker build \\\n          --tag \"gcr.io/$PROJECT_ID/$IMAGE:$GITHUB_SHA\" \\\n          --build-arg GITHUB_SHA=\"$GITHUB_SHA\" \\\n          --build-arg GITHUB_REF=\"$GITHUB_REF\" \\\n          .\n\n    # Push the Docker image to Google Container Registry\n    - name: Publish\n      run: |-\n        docker push \"gcr.io/$PROJECT_ID/$IMAGE:$GITHUB_SHA\"\n\n    # Set up kustomize\n    - name: Set up Kustomize\n      run: |-\n        curl -sfLo kustomize https://github.com/kubernetes-sigs/kustomize/releases/download/v3.1.0/kustomize_3.1.0_linux_amd64\n        chmod u+x ./kustomize\n\n    # Deploy the Docker image to the GKE cluster\n    - name: Deploy\n      run: |-\n        ./kustomize edit set image gcr.io/PROJECT_ID/IMAGE:TAG=gcr.io/$PROJECT_ID/$IMAGE:$GITHUB_SHA\n        ./kustomize build . | kubectl apply -f -\n        kubectl rollout status deployment/$DEPLOYMENT_NAME\n        kubectl get services -o wide\n```\n\n## 参考資料\n\nこれらの例で使用されているツールの詳細については、次のドキュメントを参照してください。\n\n* 完全なワークフロー テンプレートについては、「[\"GKE へのビルドとデプロイ\" ワークフロー](https://github.com/actions/starter-workflows/blob/main/deployments/google.yml)」を参照してください。\n* Kubernetes YAML カスタマイズ エンジン: [Kustomize](https://kustomize.io/)。\n* Google Kubernetes Engine ドキュメントの「[コンテナ化されたウェブ アプリケーションのデプロイ](https://cloud.google.com/kubernetes-engine/docs/tutorials/hello-app)」。"}