Развертывание приложения Cloud Run с помощью Cloud Deploy

1. Обзор

В ходе этой лабораторной работы вы развернете приложение .Net в Cloud Run с помощью Cloud Deploy. Вы создадите образ контейнера с помощью Cloud Build без использования Dockerfile. Вы настроите конвейер с тремя целевыми средами с помощью Cloud Deploy и выполните шаги по продвижению выпуска через среды. Наконец, вы утвердите выпуск для развертывания в производственной среде.

916a54f51af5ee54.png

Что такое облачная сборка?

С помощью Cloud Build вы можете быстро создавать программное обеспечение на всех языках программирования.

Что такое облачное развертывание?

Cloud Deploy — это полностью управляемая служба непрерывной доставки. С помощью Cloud Deploy вы можете создавать конвейеры развертывания для GKE, Anthos и Cloud Run.

Что такое Cloud Run?

С помощью Cloud Run вы можете развертывать масштабируемые контейнерные приложения, написанные на любом языке (включая Go, Python, Java, Node.js, .NET и Ruby) на полностью управляемой платформе.

Что такое Скаффолд?

Skaffold — это инструмент командной строки, который обеспечивает непрерывную разработку собственных приложений Kubernetes. Cloud Deploy использует Skaffold для операций рендеринга и развертывания.

Что вы узнаете

В этой лабораторной работе вы научитесь делать следующее:

  • Создание конвейера облачного развертывания
  • Создайте образ контейнера для приложения .Net с помощью Cloud Build без использования Dockerfile.
  • Развертывание приложения в Cloud Run с помощью Cloud Deploy
  • Продвигайте выпуски Cloud Deploy

Предварительные условия

  • Эта лабораторная работа предполагает знакомство с облачной консолью и средами оболочки.

2. Настройка и требования

Настройка облачного проекта

  1. Войдите в Google Cloud Console и создайте новый проект или повторно используйте существующий. Если у вас еще нет учетной записи Gmail или Google Workspace, вам необходимо ее создать .

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Имя проекта — это отображаемое имя для участников этого проекта. Это строка символов, не используемая API Google. Вы можете обновить его в любое время.
  • Идентификатор проекта уникален для всех проектов Google Cloud и является неизменяемым (нельзя изменить после его установки). Cloud Console автоматически генерирует уникальную строку; обычно тебя не волнует, что это такое. В большинстве лабораторий кода вам потребуется указать идентификатор проекта (обычно он обозначается как PROJECT_ID ). Если вам не нравится сгенерированный идентификатор, вы можете создать другой случайный идентификатор. Кроме того, вы можете попробовать свой собственный и посмотреть, доступен ли он. Его нельзя изменить после этого шага, и он останется в силе на протяжении всего проекта.
  • К вашему сведению, есть третье значение — номер проекта , который используют некоторые API. Подробнее обо всех трех этих значениях читайте в документации .
  1. Затем вам необходимо включить выставление счетов в Cloud Console, чтобы использовать облачные ресурсы/API. Прохождение этой лаборатории кода не должно стоить много, если вообще стоит. Чтобы отключить ресурсы и избежать выставления счетов за пределами этого руководства, вы можете удалить созданные вами ресурсы или удалить весь проект. Новые пользователи Google Cloud имеют право на участие в программе бесплатной пробной версии стоимостью 300 долларов США .

Настройка среды

Активируйте Cloud Shell, щелкнув значок справа от панели поиска.

eb0157a992f16fa3.png

В Cloud Shell выполните следующую команду, чтобы установить переменные среды проекта:

export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
--format='value(projectNumber)')
export REGION=us-central1

Включить API:

gcloud services enable \
  run.googleapis.com \
  cloudbuild.googleapis.com \
  clouddeploy.googleapis.com \
  artifactregistry.googleapis.com

Создайте репозиторий реестра артефактов для хранения образов контейнеров приложений:

gcloud artifacts repositories create containers-repo \
  --repository-format=docker \
  --location=${REGION} \
  --description="Containers repository"

3. Просмотрите файлы конфигурации.

29c2533441779de0.png

Клонировать исходный код приложения:

git clone https://github.com/gitrey/deploy-cloudrun-app-with-clouddeploy.git
cd deploy-cloudrun-app-with-clouddeploy

Просмотрите конфигурацию конвейера Cloud Deploy:

CloudDeploy.yaml

apiVersion: deploy.cloud.google.com/v1
kind: DeliveryPipeline
metadata:
 name: cloud-run-pipeline
description: application deployment pipeline
serialPipeline:
 stages:
 - targetId: dev-env
   profiles: [dev]
 - targetId: qa-env
   profiles: [qa]
 - targetId: prod-env
   profiles: [prod]
---

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: dev-env
description: Cloud Run development service
run:
 location: projects/_PROJECT_ID/locations/us-west1
---

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: qa-env
description: Cloud Run QA service
run:
 location: projects/_PROJECT_ID/locations/us-central1
---

apiVersion: deploy.cloud.google.com/v1
kind: Target
metadata:
 name: prod-env
description: Cloud Run PROD service
run:
 location: projects/_PROJECT_ID/locations/us-south1

Просмотрите файл skaffold.yaml , который определяет три среды и использует Cloud Run в качестве целевой службы.

скаффолд.yaml

apiVersion: skaffold/v3alpha1
kind: Config
metadata: 
  name: cloud-run-app
profiles:
- name: dev
  manifests:
    rawYaml:
    - deploy-dev.yaml
- name: qa
  manifests:
    rawYaml:
    - deploy-qa.yaml
- name: prod
  manifests:
    rawYaml:
    - deploy-prod.yaml
deploy:
  cloudrun: {}

Просмотрите файлы конфигурации службы.

развертывание-dev.yaml

kind: Service
metadata:
  name: app-dev
spec:
  template:
    spec:
      containers:
      - image: app
        resources:
          limits:
            cpu: 1000m
            memory: 128Mi

развертывание-qa.yaml

kind: Service
metadata:
  name: app-dev
spec:
  template:
    spec:
      containers:
      - image: app

развертывание-prod.yaml

apiVersion: serving.knative.dev/v1
kind: Service
metadata:
  name: app-prod
spec:
  template:
    spec:
      containers:
      - image: app

Просмотрите файл cloudbuild.yaml с инструкциями по созданию образа контейнера и созданию выпуска Cloud Deploy:

CloudBuild.yaml

steps:
- name: 'gcr.io/k8s-skaffold/pack'
  entrypoint: 'pack'
  args: ['build',
         '--builder=gcr.io/buildpacks/builder',
         '--publish', '${_REGION}-docker.pkg.dev/${PROJECT_ID}/containers-repo/app:$BUILD_ID']
  id: Build and package .net app
- name: gcr.io/google.com/cloudsdktool/cloud-sdk:slim
  args: 
      [
        "deploy", "releases", "create", "release-$_RELEASE_TIMESTAMP",
        "--delivery-pipeline", "cloud-run-pipeline",
        "--region", "${_REGION}",
        "--images", "app=${_REGION}-docker.pkg.dev/${PROJECT_ID}/containers-repo/app:$BUILD_ID"
      ]
  entrypoint: gcloud

4. Создайте конвейер развертывания в облаке

Замените значение _PROJECT_ID в clouddeploy.yaml:

sed -i "s/_PROJECT_ID/$PROJECT_ID/g" clouddeploy.yaml

Создайте конвейер облачного развертывания:

gcloud deploy apply \
  --file=clouddeploy.yaml \
  --region=${REGION} \
  --project=${PROJECT_ID}

Просмотрите созданный конвейер в Cloud Deploy .

5. Создайте образ контейнера и создайте выпуск.

Добавьте разрешения оператора Cloud Deploy в учетную запись службы Cloud Build:

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
    --member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
    --role=roles/clouddeploy.operator

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
    --member=serviceAccount:${PROJECT_NUMBER}@cloudbuild.gserviceaccount.com \
    --role=roles/iam.serviceAccountUser

Создайте образ контейнера и выпуск Cloud Deploy:

export RELEASE_TIMESTAMP=$(date '+%Y%m%d-%H%M%S')

gcloud builds submit \
  --config cloudbuild-plus.yaml \
  --substitutions=_REGION=${REGION},_RELEASE_TIMESTAMP=${RELEASE_TIMESTAMP}

Просмотрите созданный выпуск в Cloud Deploy . Подождите, пока не завершится развертывание в среде разработки.

6. Продвигайте выпуск в средах QA и PROD.

С помощью Cloud Console или Cloud Shell перенесите выпуск на следующую цель (qa-env).

Продвигайте выпуск с помощью Cloud Shell. Для продвижения выпуска выполните команду gcloud.

gcloud beta deploy releases promote \
    --release="release-${RELEASE_TIMESTAMP}" \
    --delivery-pipeline=cloud-run-pipeline \
    --region=${REGION} \
    --quiet

Подождите, пока не завершится развертывание в среде контроля качества. Продвигать выпуск до следующей цели (prod-env).

gcloud beta deploy releases promote \
    --release="release-${RELEASE_TIMESTAMP}" \
    --delivery-pipeline=cloud-run-pipeline \
    --region=${REGION} \
    --quiet

Откройте Cloud Deploy в Cloud Console и утвердите выпуск для производственного развертывания.

4c838b60770e9691.png

Просмотрите состояние конвейера Cloud Deploy и доступные метрики DORA («количество развертываний», «частота развертывания», «частота сбоев развертывания»).

Метрика

Описание

Количество развертываний

Общее количество успешных и неудачных развертываний до конечной цели в вашем конвейере доставки.

Частота развертывания

Как часто конвейер доставки развертывается до конечной цели в вашем конвейере доставки. Один из четырех ключевых показателей, определенных программой исследований и оценки DevOps (DORA).

Частота неудачных развертываний

Процент неудачных развертываний до конечной цели в вашем конвейере доставки.

Просмотрите развернутые приложения в Cloud Run :

d6372b5350f10875.png

7. Поздравляем!

Поздравляем, вы завершили работу над кодом!

Что мы рассмотрели:

  • Как создать конвейер Cloud Deploy
  • Как создать образ контейнера для приложения .Net с помощью Cloud Build
  • Как развернуть приложение в Cloud Run с помощью Cloud Deploy
  • Как продвигать выпуск Cloud Deploy

Очистить

Чтобы избежать списания средств с вашей учетной записи Google Cloud за ресурсы, используемые в этом руководстве, либо удалите проект, содержащий ресурсы, либо сохраните проект и удалите отдельные ресурсы.

Удаление проекта

Самый простой способ избавиться от выставления счетов — удалить проект, созданный вами для этого руководства.

8. Что дальше