Необходимые компоненты
Прежде чем приступить к созданию рабочего процесса, необходимо выполнить следующие действия для проекта Kubernetes. В этом руководстве предполагается, что в корневом каталоге проекта уже есть Dockerfile и файл конфигурации развертывания Kubernetes.
Создание кластера GKE
Чтобы создать кластер GKE, сначала потребуется пройти проверку подлинности с помощью CLI gcloud. Дополнительные сведения об этом действии см. в следующих статьях:
Например:
$ gcloud container clusters create $GKE_CLUSTER \
    --project=$GKE_PROJECT \
    --zone=$GKE_ZONE
$ gcloud container clusters create $GKE_CLUSTER \
    --project=$GKE_PROJECT \
    --zone=$GKE_ZONE
Включение API
Включите API-интерфейсы Kubernetes Engine Реестра контейнеров. Например:
$ gcloud services enable \
    containerregistry.googleapis.com \
    container.googleapis.com
$ gcloud services enable \
    containerregistry.googleapis.com \
    container.googleapis.com
Настройка учетной записи службы и сохранение ее учетных данных
В этой процедуре показано, как создать учетную запись службы для интеграции GKE. В нем объясняется, как создать учетную запись, добавить роли в нее, получить ключи и сохранить их в формате репозиторий с именем GKE_SA_KEYсекрета репозитория .
- 
Создайте новую учетную запись службы: Shell gcloud iam service-accounts create $SA_NAME gcloud iam service-accounts create $SA_NAME
- 
Получите адрес электронной почты только что созданной учетной записи службы: Shell gcloud iam service-accounts list gcloud iam service-accounts list
- 
Добавьте роли в учетную запись службы. Примечание. Применение более строгих ролей в соответствии с вашими требованиями. Shell gcloud projects add-iam-policy-binding $GKE_PROJECT \ --member=serviceAccount:$SA_EMAIL \ --role=roles/container.admin gcloud projects add-iam-policy-binding $GKE_PROJECT \ --member=serviceAccount:$SA_EMAIL \ --role=roles/storage.admin gcloud projects add-iam-policy-binding $GKE_PROJECT \ --member=serviceAccount:$SA_EMAIL \ --role=roles/container.clusterViewer gcloud projects add-iam-policy-binding $GKE_PROJECT \ --member=serviceAccount:$SA_EMAIL \ --role=roles/container.admin gcloud projects add-iam-policy-binding $GKE_PROJECT \ --member=serviceAccount:$SA_EMAIL \ --role=roles/storage.admin gcloud projects add-iam-policy-binding $GKE_PROJECT \ --member=serviceAccount:$SA_EMAIL \ --role=roles/container.clusterViewer
- 
Скачайте файл ключей JSON для учетной записи службы: Shell gcloud iam service-accounts keys create key.json --iam-account=$SA_EMAIL gcloud iam service-accounts keys create key.json --iam-account=$SA_EMAIL
- 
Сохраните ключ учетной записи службы в виде секрета: GKE_SA_KEYShell export GKE_SA_KEY=$(cat key.json | base64) export GKE_SA_KEY=$(cat key.json | base64)Дополнительные сведения о хранении секрета см. в разделе Использование секретов в GitHub Actions. 
Сохранение имени проекта
Сохраните имя проекта в виде секрета с именем GKE_PROJECT. Дополнительные сведения о хранении секрета см. в разделе Использование секретов в GitHub Actions.
(Необязательно) Настройка kustomize
Kustomize — это необязательное средство, используемое для управления спецификациями YAML. После создания файла kustomization приведенный ниже рабочий процесс можно использовать для динамического задания полей образа и канала в результате выполнения команды kubectl. Дополнительные сведения см. в разделе об использовании kustomize.
(Необязательно) Настройка среды развертывания
Среды используются для описания общего целевого объекта развертывания, такого как production, staging или development. Когда рабочий процесс GitHub Actions выполняет развертывание в среде, эта среда отображается на главной странице репозитория. Вы можете использовать среды, чтобы требовать утверждения для продолжения задания, ограничить, какие ветви могут активировать рабочий процесс, воротные развертывания с помощью настраиваемых правил защиты развертывания или ограничить доступ к секретам. Дополнительные сведения о создании сред см. в разделе Управление средами для развертывания.
Создание рабочего процесса
Выполнив предварительные требования, можно приступить к созданию рабочего процесса.
В следующем примере рабочего процесса показано, как создать образ контейнера и отправить его в GCR. Затем с помощью средств Kubernetes (например, kubectl и kustomize) образ извлекается в развертывание кластера.
Под ключом env измените значение GKE_CLUSTER на имя кластера, GKE_ZONE на зону кластера, DEPLOYMENT_NAME на имя развертывания и IMAGE на имя образа.
Если вы настроили среду развертывания, измените значение environment на имя среды. Если вы не настроили среду , удалите ключ environment.
# Этот рабочий процесс использует действия, которые не сертифицированы GitHub.
# Они предоставляются сторонним поставщиком, и на них распространяются
# отдельные условия обслуживания, политика конфиденциальности и поддержка
# документации.
# GitHub рекомендует закрепить действия в фиксации SHA.
# Чтобы получить более новую версию, потребуется обновить SHA.
# Вы также можете ссылаться на тег или ветвь, однако действие может измениться без предупреждения.
name: Build and Deploy to GKE
on:
  push:
    branches:
      - main
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
    environment: production
    steps:
    - name: Checkout
      uses: actions/checkout@v5
    # Setup gcloud CLI
    - uses: google-github-actions/setup-gcloud@1bee7de035d65ec5da40a31f8589e240eba8fde5
      with:
        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@db150f2cc60d1716e61922b832eae71d2a45938f
      with:
        cluster_name: ${{ env.GKE_CLUSTER }}
        location: ${{ env.GKE_ZONE }}
        credentials: ${{ secrets.GKE_SA_KEY }}
    # Build the Docker image
    - 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" \
          .
    # Push the Docker image to Google Container Registry
    - name: Publish
      run: |-
        docker push "gcr.io/$PROJECT_ID/$IMAGE:$GITHUB_SHA"
    # Set up kustomize
    - name: Set up Kustomize
      run: |-
        curl -sfLo kustomize http://github.com/kubernetes-sigs/kustomize/releases/download/v3.1.0/kustomize_3.1.0_linux_amd64
        chmod u+x ./kustomize
    # Deploy the Docker image to the GKE cluster
    - 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.
# Они предоставляются сторонним поставщиком, и на них распространяются
# отдельные условия обслуживания, политика конфиденциальности и поддержка
# документации.
# GitHub рекомендует закрепить действия в фиксации SHA.
# Чтобы получить более новую версию, потребуется обновить SHA.
# Вы также можете ссылаться на тег или ветвь, однако действие может измениться без предупреждения.
name: Build and Deploy to GKE
on:
  push:
    branches:
      - main
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
    environment: production
    steps:
    - name: Checkout
      uses: actions/checkout@v5
    # Setup gcloud CLI
    - uses: google-github-actions/setup-gcloud@1bee7de035d65ec5da40a31f8589e240eba8fde5
      with:
        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@db150f2cc60d1716e61922b832eae71d2a45938f
      with:
        cluster_name: ${{ env.GKE_CLUSTER }}
        location: ${{ env.GKE_ZONE }}
        credentials: ${{ secrets.GKE_SA_KEY }}
    # Build the Docker image
    - 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" \
          .
    # Push the Docker image to Google Container Registry
    - name: Publish
      run: |-
        docker push "gcr.io/$PROJECT_ID/$IMAGE:$GITHUB_SHA"
    # Set up kustomize
    - name: Set up Kustomize
      run: |-
        curl -sfLo kustomize http://github.com/kubernetes-sigs/kustomize/releases/download/v3.1.0/kustomize_3.1.0_linux_amd64
        chmod u+x ./kustomize
    # Deploy the Docker image to the GKE cluster
    - 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
Дополнительные материалы
Дополнительные сведения о средствах, используемых в этих примерах, см. в следующей документации:
- Полный шаблон рабочего процесса см. в разделе "Сборка и развертывание в GKE".
- Модуль настройки YAML Kubernetes: Kustomize.
- Развертывание контейнерного веб-приложения в документации по подсистеме Google Kubernetes.