{"meta":{"title":"Google Kubernetes Engine에 배포","intro":"CD(지속적인 배포) 워크플로의 일부로 GKE(Google Kubernetes Engine)에 프로젝트를 배포하는 방법을 알아보세요.","product":"GitHub Actions","breadcrumbs":[{"href":"/ko/actions","title":"GitHub Actions"},{"href":"/ko/actions/how-tos","title":"사용법"},{"href":"/ko/actions/how-tos/deploy","title":"배포"},{"href":"/ko/actions/how-tos/deploy/deploy-to-third-party-platforms","title":"타사 플랫폼에 배포"},{"href":"/ko/actions/how-tos/deploy/deploy-to-third-party-platforms/google-kubernetes-engine","title":"Google Kubernetes 엔진"}],"documentType":"article"},"body":"# Google Kubernetes Engine에 배포\n\nCD(지속적인 배포) 워크플로의 일부로 GKE(Google Kubernetes Engine)에 프로젝트를 배포하는 방법을 알아보세요.\n\n## 필수 조건\n\n워크플로 만들기를 계속 진행하기 전에 Kubernetes 프로젝트에 대해 다음 단계를 완료해야 합니다. 이 가이드에서는 프로젝트의 루트에 `Dockerfile` 및 Kubernetes 배포 구성 파일이 이미 있다고 가정합니다.\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 및 클라우드 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`저장하는 방법을 설명합니다.\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에서 비밀 사용](/ko/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets)을(를) 참조하세요.\n\n### 프로젝트 이름 저장\n\n프로젝트 이름을 `GKE_PROJECT`라는 비밀로 저장합니다. 비밀을 저장하는 방법에 대한 자세한 내용은 [GitHub Actions에서 비밀 사용](/ko/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`)을 설명하는 데 사용됩니다. 워크플로가 GitHub Actions 환경에 배포되면 환경이 리포지토리의 기본 페이지에 표시됩니다. 환경을 사용하여 작업이 진행되기 전에 승인을 요구하거나, 워크플로를 트리거할 수 있는 분기를 제한하거나, 사용자 지정 배포 보호 규칙으로 배포를 제어하거나, 비밀 정보에 대한 액세스를 제한할 수 있습니다. 환경을 만드는 방법에 대한 자세한 내용은 [배포 환경 관리](/ko/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# 커밋 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)"}