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

۱. مرور کلی

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

916a54f51af5ee54.png

ساخت ابری چیست؟

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

استقرار ابری چیست؟

Cloud Deploy یک سرویس تحویل مداوم کاملاً مدیریت‌شده است. با Cloud Deploy می‌توانید خطوط لوله استقرار برای GKE، Anthos و 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 را تبلیغ کنید

پیش‌نیازها

  • این آزمایشگاه فرض را بر آشنایی با محیط‌های Cloud Console و Shell می‌گذارد.

۲. تنظیمات و الزامات

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • نام پروژه ، نام نمایشی برای شرکت‌کنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمی‌شود. می‌توانید آن را در هر زمانی به‌روزرسانی کنید.
  • شناسه پروژه در تمام پروژه‌های گوگل کلود منحصر به فرد است و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید می‌کند؛ معمولاً برای شما مهم نیست که چیست. در اکثر آزمایشگاه‌های کد، باید به شناسه پروژه ارجاع دهید (که معمولاً با عنوان PROJECT_ID شناخته می‌شود). اگر شناسه تولید شده را دوست ندارید، می‌توانید یک شناسه تصادفی دیگر ایجاد کنید. به عنوان یک جایگزین، می‌توانید شناسه خودتان را امتحان کنید و ببینید که آیا در دسترس است یا خیر. پس از این مرحله قابل تغییر نیست و در طول پروژه باقی خواهد ماند.
  • برای اطلاع شما، یک مقدار سوم هم وجود دارد، شماره پروژه که برخی از APIها از آن استفاده می‌کنند. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات مراجعه کنید.
  1. در مرحله بعد، برای استفاده از منابع/API های ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد، اگر اصلاً هزینه‌ای نداشته باشد، هزینه زیادی نخواهد داشت. برای خاموش کردن منابع به طوری که پس از این آموزش متحمل پرداخت صورتحساب نشوید، می‌توانید منابعی را که ایجاد کرده‌اید یا کل پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.

تنظیمات محیط

با کلیک روی آیکون سمت راست نوار جستجو، 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 برای ذخیره تصاویر کانتینر برنامه:

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

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

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

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

استقرار-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

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

۴. ایجاد خط لوله استقرار ابری

مقدار _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 .

۵. ساخت ایمیج کانتینر و ایجاد یک نسخه آزمایشی

مجوزهای اپراتور 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 environment) کامل شود.

۶. انتشار در محیط‌های QA و PROD را ارتقا دهید

با استفاده از کنسول ابری یا پوسته ابری، انتشار را به مقصد بعدی (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

۷. تبریک می‌گویم!

تبریک می‌گویم، شما codelab را تمام کردید!

آنچه ما پوشش داده‌ایم:

  • نحوه ایجاد خط لوله Cloud Deploy
  • نحوه ایجاد تصویر کانتینر برای برنامه .Net با Cloud Build
  • نحوه استقرار برنامه در Cloud Run با Cloud Deploy
  • چگونه نسخه Cloud Deploy را تبلیغ کنیم

تمیز کردن

برای جلوگیری از تحمیل هزینه به حساب گوگل کلود خود برای منابع استفاده شده در این آموزش، یا پروژه‌ای که شامل منابع است را حذف کنید، یا پروژه را نگه دارید و منابع تکی را حذف کنید.

حذف پروژه

ساده‌ترین راه برای حذف هزینه‌ها، حذف پروژه‌ای است که برای آموزش ایجاد کرده‌اید.

۸. قدم بعدی چیست؟