استقرار برنامه Cloud Run با Cloud Deploy

1. بررسی اجمالی

در این آزمایشگاه، شما با استفاده از Cloud Deploy یک برنامه .Net را در Cloud Run مستقر خواهید کرد. بدون استفاده از Dockerfile یک تصویر ظرف با Cloud Build خواهید ساخت. شما یک خط لوله با سه محیط هدف با Cloud Deploy راه‌اندازی می‌کنید و مراحل ترویج انتشار از طریق محیط‌ها را طی می‌کنید. در نهایت، انتشار را برای استقرار در محیط تولید تأیید خواهید کرد.

916a54f51af5ee54.png

Cloud Build چیست؟

با Cloud Build می توانید به سرعت نرم افزار را در تمامی زبان های برنامه نویسی بسازید.

Cloud Deploy چیست؟

Cloud Deploy یک سرویس تحویل مستمر کاملاً مدیریت شده است. با Cloud Deploy می توانید خطوط لوله استقرار را برای GKE، Anthos و Cloud Run ایجاد کنید.

Cloud Run چیست؟

با Cloud Run می‌توانید برنامه‌های کانتینری مقیاس‌پذیر را که به هر زبانی نوشته شده‌اند (از جمله Go، Python، Java، Node.js، .NET و Ruby) بر روی یک پلتفرم کاملاً مدیریت شده مستقر کنید.

Skaffold چیست؟

Skaffold یک ابزار خط فرمان است که توسعه مداوم برنامه های بومی Kubernetes را امکان پذیر می کند. Cloud Deploy از Skaffold برای عملیات رندر و استقرار استفاده می کند.

آنچه خواهید آموخت

در این آزمایشگاه با نحوه انجام کارهای زیر آشنا می شوید:

  • خط لوله استقرار ابری ایجاد کنید
  • بدون استفاده از Dockerfile با Cloud Build تصویر کانتینر را برای برنامه Net ایجاد کنید
  • برنامه را در Cloud Run با Cloud Deploy اجرا کنید
  • انتشارات Cloud Deploy را تبلیغ کنید

پیش نیازها

  • این آزمایشگاه آشنایی با کنسول Cloud و محیط های پوسته را فرض می کند.

2. راه اندازی و الزامات

راه اندازی پروژه ابری

  1. به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. شما می توانید آن را در هر زمان به روز کنید.
  • شناسه پروژه در تمام پروژه‌های Google Cloud منحصربه‌فرد است و تغییرناپذیر است (پس از تنظیم نمی‌توان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برایت مهم نیست که چیست. در اکثر کدها، باید به شناسه پروژه ارجاع دهید (معمولاً به عنوان PROJECT_ID شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، می‌توانید خودتان را امتحان کنید و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند.
  • برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه که برخی از APIها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
  1. در مرحله بعد، برای استفاده از منابع/APIهای Cloud باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد. برای اینکه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید، می توانید منابعی را که ایجاد کرده اید حذف کنید یا کل پروژه را حذف کنید. کاربران جدید 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

مخزن Artifact Registry را برای ذخیره تصاویر کانتینر برنامه ایجاد کنید:

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 به عنوان سرویس هدف استفاده می کند.

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

فایل های پیکربندی سرویس را بررسی کنید.

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

فایل 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. Cloud Deploy Pipeline را ایجاد کنید

مقدار _PROJECT_ID را در clouddeploy.yaml جایگزین کنید:

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

ایجاد خط لوله Cloud Deploy:

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

بررسی خط لوله ایجاد شده در Cloud Deploy .

5. تصویر Container را بسازید و یک نسخه ایجاد کنید

مجوزهای اپراتور 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 مرور کنید. صبر کنید تا استقرار در محیط Dev کامل شود.

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

صبر کنید تا استقرار در محیط QA انجام شود. انتشار را به هدف بعدی (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. بعد چه