{"meta":{"title":"Развертывание в Google Kubernetes Engine","intro":"Узнайте, как развернуть проект в Google Kubernetes Engine (GKE) в рамках рабочего процесса непрерывного развертывания (CD).","product":"GitHub Actions","breadcrumbs":[{"href":"/ru/actions","title":"GitHub Actions"},{"href":"/ru/actions/how-tos","title":"Инструкции"},{"href":"/ru/actions/how-tos/deploy","title":"Развернуть"},{"href":"/ru/actions/how-tos/deploy/deploy-to-third-party-platforms","title":"Развертывание на сторонних платформах"},{"href":"/ru/actions/how-tos/deploy/deploy-to-third-party-platforms/google-kubernetes-engine","title":"Google Kubernetes Engine"}],"documentType":"article"},"body":"# Развертывание в Google Kubernetes Engine\n\nУзнайте, как развернуть проект в Google Kubernetes Engine (GKE) в рамках рабочего процесса непрерывного развертывания (CD).\n\n## Необходимые компоненты\n\nПрежде чем приступить к созданию рабочего процесса, необходимо выполнить следующие действия для проекта Kubernetes. В этом руководстве предполагается, что в корневом каталоге проекта уже есть `Dockerfile` и файл конфигурации развертывания Kubernetes.\n\n### Создание кластера GKE\n\nЧтобы создать кластер GKE, сначала потребуется пройти проверку подлинности с помощью CLI `gcloud`. Дополнительные сведения об этом действии см. в следующих статьях:\n\n* [`gcloud auth login`](https://cloud.google.com/sdk/gcloud/reference/auth/login)\n* [\n  `gcloud` интерфейс командной строки](https://cloud.google.com/sdk/gcloud/reference)\n* [CLI `gcloud` и пакет 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\nВключите API-интерфейсы Kubernetes Engine Реестра контейнеров. Например:\n\n```shell copy\n$ gcloud services enable \\\n    containerregistry.googleapis.com \\\n    container.googleapis.com\n```\n\n### Настройка учетной записи службы и сохранение ее учетных данных\n\nВ этой процедуре показано, как создать учетную запись службы для интеграции GKE. В нем объясняется, как создать учетную запись, добавить роли в нее, получить ключи и сохранить их в виде секрета зашифрованного `GKE_SA_KEY`репозитория в кодировке Base64.\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](/ru/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets).\n\n### Сохранение имени проекта\n\nСохраните имя проекта в виде секрета с именем `GKE_PROJECT`. Дополнительные сведения о хранении секрета см. в разделе [Использование секретов в GitHub Actions](/ru/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets).\n\n### (Необязательно) Настройка kustomize\n\nKustomize — это необязательное средство, используемое для управления спецификациями YAML. После создания файла `kustomization` приведенный ниже рабочий процесс можно использовать для динамического задания полей образа и канала в результате выполнения команды `kubectl`. Дополнительные сведения см. в разделе об [использовании kustomize](https://github.com/kubernetes-sigs/kustomize#usage).\n\n### (Необязательно) Настройка среды развертывания\n\nСреды используются для описания общего целевого объекта развертывания, такого как `production`, `staging` или `development`. Когда GitHub Actions рабочий процесс внедряется в окружение, среда отображается на главной странице репозитория. Вы можете использовать среды, чтобы требовать утверждения для продолжения задания, ограничить, какие ветви могут активировать рабочий процесс, воротные развертывания с помощью настраиваемых правил защиты развертывания или ограничить доступ к секретам. Дополнительные сведения о создании сред см. в разделе [Управление средами для развертывания](/ru/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* Полный шаблон рабочего процесса см. в [разделе](https://github.com/actions/starter-workflows/blob/main/deployments/google.yml) \"Сборка и развертывание в GKE\".\n* Модуль настройки YAML Kubernetes: [Kustomize](https://kustomize.io/).\n* [Развертывание контейнерного веб-приложения](https://cloud.google.com/kubernetes-engine/docs/tutorials/hello-app) в документации по подсистеме Google Kubernetes."}