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

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

О практической работе

subjectПоследнее обновление: дек. 9, 2022
account_circleАвторы: Andrey Shakirov

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 за ресурсы, используемые в этом руководстве, либо удалите проект, содержащий ресурсы, либо сохраните проект и удалите отдельные ресурсы.

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

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