Wdrażanie aplikacji Cloud Run za pomocą Cloud Deploy

Wdrażanie aplikacji Cloud Run za pomocą Cloud Deploy

Informacje o tym ćwiczeniu (w Codelabs)

subjectOstatnia aktualizacja: gru 9, 2022
account_circleAutorzy: Andrey Shakirov

1. Omówienie

W tym module wdrożysz aplikację .NET w Cloud Run za pomocą Cloud Deploy. Utwórz obraz kontenera za pomocą Cloud Build bez użycia pliku Dockerfile. Skonfigurujesz potok z 3 środowiskami docelowymi w Cloud Deploy i wykonasz czynności, aby awansować wersję w tych środowiskach. Na koniec zatwierdzisz wersję do wdrożenia w środowisku produkcyjnym.

916a54f51af5ee54.png

Co to jest Cloud Build?

Dzięki Cloud Build możesz szybko tworzyć oprogramowanie w różnych językach programowania.

Co to jest Cloud Deploy?

Cloud Deploy to w pełni zarządzana usługa ciągłego dostarczania. Za pomocą Cloud Deploy możesz tworzyć potoki wdrożeniowe dla GKE, Anthos i Cloud Run.

Co to jest Cloud Run?

Dzięki Cloud Run możesz wdrażać skalowalne konteneryzowane aplikacje napisane w dowolnym języku (np. Go, Python, Java, Node.js, .NET i Ruby) na w pełni zarządzanej platformie.

Czym jest Skaffold?

Skaffold to narzędzie wiersza poleceń, które umożliwia ciągłe programowanie aplikacji natywnych dla Kubernetes. Cloud Deploy używa Skaffold do operacji renderowania i wdrażania.

Czego się nauczysz

Z tego modułu dowiesz się, jak:

  • Tworzenie potoku Cloud Deploy
  • Tworzenie obrazu kontenera dla aplikacji .NET za pomocą Cloud Build bez używania pliku Dockerfile
  • Wdrażanie aplikacji w Cloud Run za pomocą Cloud Deploy
  • Promowanie wersji Cloud Deploy

Wymagania wstępne

  • Ten moduł zakłada, że użytkownik zna środowisko konsoli Cloud i powłoki.

2. Konfiguracja i wymagania

Konfiguracja projektu Cloud

  1. Zaloguj się w konsoli Google Cloud i utwórz nowy projekt lub użyj istniejącego. Jeśli nie masz jeszcze konta Gmail ani Google Workspace, musisz je utworzyć.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Nazwa projektu to wyświetlana nazwa uczestników tego projektu. Jest to ciąg znaków, którego nie używają interfejsy API Google. Możesz ją zaktualizować w dowolnym momencie.
  • Identyfikator projektu jest niepowtarzalny w ramach wszystkich projektów Google Cloud i nie można go zmienić (po ustawieniu). Cloud Console automatycznie generuje unikalny ciąg znaków. Zwykle nie ma znaczenia, jaki to ciąg. W większości laboratoriów z kodem musisz odwoływać się do identyfikatora projektu (zazwyczaj jest to PROJECT_ID). Jeśli nie podoba Ci się wygenerowany identyfikator, możesz wygenerować inny losowy. Możesz też spróbować użyć własnego konta i sprawdzić, czy jest ono dostępne. Po tym kroku nie można go zmienić. Pozostanie ona niezmieniona przez cały czas trwania projektu.
  • Informacyjnie: istnieje jeszcze 3 wartość, numer projektu, którego używają niektóre interfejsy API. Więcej informacji o wszystkich 3 wartościach znajdziesz w dokumentacji.
  1. Następnie musisz włączyć rozliczenia w konsoli Cloud, aby korzystać z zasobów i interfejsów API Cloud. Przejście przez ten moduł Codelab nie powinno wiązać się z wielkimi kosztami, jeśli w ogóle z nimi będzie. Aby wyłączyć zasoby, aby nie generować opłat po zakończeniu samouczka, możesz usunąć utworzone zasoby lub cały projekt. Nowi użytkownicy Google Cloud mogą skorzystać z bezpłatnego okresu próbnego, w którym mają do dyspozycji środki w wysokości 300 USD.

Konfiguracja środowiska

Aktywuj Cloud Shell, klikając ikonę po prawej stronie paska wyszukiwania.

eb0157a992f16fa3.png

Aby ustawić zmienne środowiskowe projektu, uruchom w Cloud Shell to polecenie:

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

Włącz interfejsy API:

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

Utwórz repozytorium Artifact Registry, w którym będą przechowywane obrazy kontenerów aplikacji:

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

3. Sprawdzanie plików konfiguracji

29c2533441779de0.png

Sklonuj kod źródłowy aplikacji:

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

Sprawdź konfigurację potoku 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

Przejrzyj plik skaffold.yaml, który definiuje 3 środowiska i korzysta z Cloud Run jako usługi docelowej.

skaffold.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
: {}

Sprawdź pliki konfiguracji usługi.

deploy-dev.yaml

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

deploy-qa.yaml

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

deploy-prod.yaml

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

Przejrzyj plik cloudbuild.yaml, aby dowiedzieć się, jak skompilować obraz kontenera i utworzyć wersję 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. Tworzenie potoku Cloud Deploy

Zastąp wartość _PROJECT_ID w pliku clouddeploy.yaml:

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

Tworzenie potoku Cloud Deploy:

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

Sprawdź utworzony potok w Cloud Deploy.

5. Kompilowanie obrazu kontenera i tworzenie wersji

Dodaj uprawnienia operatora Cloud Deploy do konta usługi 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

Utwórz obraz kontenera i wersję 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}

Sprawdź utworzoną wersję w Cloud Deploy. Zaczekaj na zakończenie wdrażania do środowiska deweloperskiego.

6. Promowanie wersji do środowisk QA i PROD

Za pomocą Cloud Console lub Cloud Shell przenieś wersję do następnego środowiska docelowego(qa-env).

Promowanie wersji za pomocą Cloud Shell: uruchom polecenie gcloud, aby promować wersję.

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

Zaczekaj na zakończenie wdrażania do środowiska QA. Promowanie wersji do następnego miejsca docelowego(otoczenie produkcyjne).

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

Otwórz Cloud Deploy w Cloud Console i zatwierdź wersję do wdrożenia w produkcji.

4c838b60770e9691.png

Sprawdź stan potoku Cloud Deploy i dostępne dane DORA („liczba wdrożeń”, „częstotliwość wdrażania”, „odsetek błędów wdrożenia”).

Dane

Opis

Liczba wdrożeń

Łączna liczba udanych i nieudanych wdrożeń do ostatecznego miejsca docelowego w potoku dostarczania.

Częstotliwość wdrażania

Częstotliwość, z jaką potok dostarczania przeprowadza wdrożenia w swoim ostatecznym miejscu docelowym.Jeden z 4 kluczowych wskaźników zdefiniowanych w programie DevOps Research and Assessment (DORA).

Odsetek nieudanych wdrożeń

Odsetek nieudanych wdrożeń w ostatecznym miejscu docelowym w potoku dostarczania.

Sprawdź wdrożone aplikacje w Cloud Run:

d6372b5350f10875.png

7. Gratulacje!

Gratulacje! Masz ukończone zajęcia.

Omówione zagadnienia:

  • Tworzenie potoku Cloud Deploy
  • Jak utworzyć obraz kontenera dla aplikacji .NET za pomocą Cloud Build
  • Wdrażanie aplikacji w Cloud Run za pomocą Cloud Deploy
  • Jak promować wersję w Cloud Deploy

Czyszczenie danych

Aby uniknąć obciążenia konta Google Cloud opłatami za zasoby zużyte w tym samouczku, możesz usunąć projekt zawierający te zasoby lub zachować projekt i usunąć poszczególne zasoby.

Usuwanie projektu

Najprostszym sposobem na uniknięcie płatności jest usunięcie projektu utworzonego na potrzeby samouczka.