Triển khai ứng dụng Cloud Run bằng tính năng Cloud Deploy

Triển khai ứng dụng Cloud Run bằng tính năng Cloud Deploy

Thông tin về lớp học lập trình này

subjectLần cập nhật gần đây nhất: thg 12 9, 2022
account_circleTác giả: Andrey Shakirov

1. Tổng quan

Trong phòng thí nghiệm này, bạn sẽ triển khai ứng dụng .Net cho Cloud Run bằng Cloud Deploy. Bạn sẽ tạo hình ảnh vùng chứa bằng Cloud Build mà không cần sử dụng Dockerfile. Bạn sẽ thiết lập một quy trình gồm 3 môi trường mục tiêu bằng Cloud Deploy và thực hiện các bước để quảng bá bản phát hành thông qua các môi trường. Cuối cùng, bạn sẽ phê duyệt bản phát hành để triển khai vào môi trường phát hành công khai.

916a54f51af5ee54.pngS

Cloud Build là gì?

Với Cloud Build, bạn có thể nhanh chóng tạo phần mềm trên tất cả ngôn ngữ lập trình.

Triển khai đám mây là gì?

Cloud Deploy là dịch vụ phân phối liên tục được quản lý toàn diện. Với Cloud Deploy, bạn có thể tạo quy trình triển khai cho GKE, Anthos và Cloud Run.

Cloud Run là gì?

Với Cloud Run, bạn có thể triển khai các ứng dụng trong vùng chứa có thể mở rộng, viết bằng bất kỳ ngôn ngữ nào (bao gồm cả Go, Python, Java, Node.js, .NET và Ruby) trên một nền tảng được quản lý hoàn toàn.

Skaffold là gì?

Skaffold là một công cụ dòng lệnh cho phép phát triển liên tục các ứng dụng dựa trên nền tảng Kubernetes. Cloud Deploy sử dụng Skaffold cho các hoạt động kết xuất và triển khai.

Kiến thức bạn sẽ học được

Trong phòng thí nghiệm này, bạn sẽ tìm hiểu cách thực hiện những việc sau:

  • Tạo quy trình Triển khai đám mây
  • Tạo hình ảnh vùng chứa cho ứng dụng .Net bằng Cloud Build mà không cần sử dụng Dockerfile
  • Triển khai ứng dụng cho Cloud Run bằng Cloud Deploy
  • Quảng bá các bản phát hành Cloud Deploy

Điều kiện tiên quyết

  • Phòng thí nghiệm này giả định rằng bạn đã quen thuộc với Bảng điều khiển Cloud và các môi trường shell.

2. Cách thiết lập và các yêu cầu

Thiết lập dự án trên Cloud

  1. Đăng nhập vào Google Cloud Console rồi tạo dự án mới hoặc sử dụng lại dự án hiện có. Nếu chưa có tài khoản Gmail hoặc Google Workspace, bạn phải tạo một tài khoản.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Tên dự án là tên hiển thị của những người tham gia dự án này. Đây là một chuỗi ký tự không được API của Google sử dụng. Bạn có thể cập nhật thông tin này bất cứ lúc nào.
  • Mã dự án là duy nhất trong tất cả các dự án Google Cloud và không thể thay đổi (không thể thay đổi sau khi đã đặt). Cloud Console sẽ tự động tạo một chuỗi duy nhất; thường bạn không quan tâm đến sản phẩm đó là gì. Trong hầu hết các lớp học lập trình, bạn sẽ cần tham chiếu đến Mã dự án (mã này thường được xác định là PROJECT_ID). Nếu không thích mã đã tạo, bạn có thể tạo một mã nhận dạng ngẫu nhiên khác. Ngoài ra, bạn có thể thử dùng tên của riêng mình để xem tên đó có được chấp nhận hay không. Bạn không thể thay đổi thông tin này sau bước này và thông báo đó sẽ vẫn tồn tại trong thời gian của dự án.
  • Đối với thông tin của bạn, có giá trị thứ ba, Project Number (Số dự án) mà một số API sử dụng. Tìm hiểu thêm về cả ba giá trị này trong tài liệu này.
  1. Tiếp theo, bạn sẽ phải bật tính năng thanh toán trong Cloud Console để sử dụng API/tài nguyên trên đám mây. Việc chạy qua lớp học lập trình này sẽ không tốn nhiều chi phí. Để tắt các tài nguyên nhằm tránh bị tính phí ngoài hướng dẫn này, bạn có thể xoá các tài nguyên bạn đã tạo hoặc xoá toàn bộ dự án. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí 300 USD.

Thiết lập môi trường

Kích hoạt Cloud Shell bằng cách nhấp vào biểu tượng ở bên phải thanh tìm kiếm.

eb0157a992f16fa3.png

Trên Cloud Shell, hãy chạy lệnh sau để thiết lập các biến môi trường của dự án:

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

Bật API:

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

Tạo kho lưu trữ Artifact Registry để lưu trữ hình ảnh vùng chứa ứng dụng:

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

3. Kiểm tra tệp cấu hình

29c2533441779de0.pngs

Mã nguồn ứng dụng nhân bản:

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

Xem lại cấu hình quy trình của 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

Xem xét tệp skaffold.yaml xác định 3 môi trường và tệp này đang sử dụng Cloud Run làm dịch vụ mục tiêu.

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

Xem xét các tệp cấu hình dịch vụ.

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

Xem tệp cloudbuild.yaml kèm theo các bước tạo hình ảnh vùng chứa và tạo bản phát hành 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. Tạo quy trình triển khai đám mây

Thay thế giá trị _PROJECT_ID trong Clouddeploy.yaml:

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

Tạo quy trình triển khai trên đám mây:

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

Xem lại quy trình đã tạo trong Cloud Deploy.

5. Tạo hình ảnh vùng chứa và tạo bản phát hành

Thêm quyền cho Trình điều khiển triển khai trên đám mây vào tài khoản dịch vụ 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

Tạo hình ảnh vùng chứa và bản phát hành trên 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}

Xem lại bản phát hành đã tạo trong Cloud Deploy. Hãy chờ cho đến khi quá trình triển khai sang môi trường phát triển hoàn tất.

6. Quảng bá bản phát hành lên môi trường đảm bảo chất lượng và PROD

Dùng Cloud Console hoặc Cloud Shell, quảng bá bản phát hành cho mục tiêu tiếp theo(qa-env).

Quảng bá bản phát hành bằng Cloud Shell, chạy lệnh gcloud để quảng bá bản phát hành.

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

Hãy chờ cho đến khi quá trình triển khai sang môi trường đảm bảo chất lượng hoàn tất. Quảng bá bản phát hành cho mục tiêu tiếp theo(prod-env).

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

Mở Cloud Deploy (Triển khai của Cloud) trong Cloud Console và phê duyệt bản phát hành để triển khai chính thức.

4c838b60770e9691.pngS

Xem trạng thái quy trình Cloud Deploy (Triển khai đám mây) và các chỉ số DORA hiện có ("số lần triển khai", "tần suất triển khai", "tỷ lệ lỗi triển khai").

Chỉ số

Nội dung mô tả

Số lần triển khai

Tổng số lần triển khai thành công và không thành công cho mục tiêu cuối cùng trong quy trình phân phối của bạn.

Tần suất triển khai

Tần suất quy trình phân phối triển khai đến mục tiêu cuối cùng trong quy trình phân phối của bạn.Một trong bốn chỉ số chính do chương trình Nghiên cứu và Đánh giá DevOps (DORA) xác định.

Tỷ lệ triển khai không thành công

Tỷ lệ phần trăm phát hành không thành công đến mục tiêu cuối cùng trong quy trình phân phối của bạn.

Xem xét các ứng dụng đã triển khai trong Cloud Run:

d6372b5350f10875.png

7. Xin chúc mừng!

Xin chúc mừng, bạn đã hoàn thành lớp học lập trình!

Nội dung chúng ta đã đề cập:

  • Cách tạo quy trình Triển khai đám mây
  • Cách tạo hình ảnh vùng chứa cho ứng dụng .Net bằng Cloud Build
  • Cách triển khai ứng dụng cho Cloud Run bằng Cloud Deploy
  • Cách quảng bá bản phát hành Cloud Deploy

Dọn dẹp

Để tránh làm phát sinh chi phí cho các tài nguyên được sử dụng trong hướng dẫn này trong tài khoản Google Cloud của bạn, hãy xoá dự án chứa các tài nguyên đó, hoặc giữ lại dự án và xoá từng tài nguyên riêng lẻ.

Xoá dự án

Cách dễ nhất để loại bỏ việc thanh toán là xoá dự án bạn đã tạo cho phần hướng dẫn.