פריסת אפליקציית Cloud Run באמצעות Cloud Deploy

1. סקירה כללית

בשיעור ה-Lab הזה תפרסו אפליקציית ‎ .Net ב-Cloud Run באמצעות Cloud Deploy. במדריך הזה תלמדו ליצור קובץ אימג' של קונטיינר באמצעות Cloud Build בלי להשתמש ב-Dockerfile. תגדירו צינור עיבוד נתונים עם שלוש סביבות יעד באמצעות 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 לפעולות של עיבוד ופריסה.

מה תלמדו

בשיעור Lab זה תלמדו איך:

  • יצירת פייפליין של Cloud Deploy
  • יצירת קובץ אימג' של קונטיינר לאפליקציית ‎ .Net באמצעות Cloud Build בלי להשתמש ב-Dockerfile
  • פריסת אפליקציה ב-Cloud Run באמצעות Cloud Deploy
  • קידום גרסאות של Cloud Deploy

דרישות מוקדמות

  • ההנחה בשיעור ה-Lab הזה היא שאתם מכירים את Cloud Console ואת סביבות ה-Shell.

2. הגדרה ודרישות

הגדרה של פרויקט ב-Cloud

  1. נכנסים ל-מסוף Google Cloud ויוצרים פרויקט חדש או משתמשים בפרויקט קיים. אם עדיין אין לכם חשבון Gmail או Google Workspace, אתם צריכים ליצור חשבון.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • שם הפרויקט הוא השם המוצג של הפרויקט הזה למשתתפים. זו מחרוזת תווים שלא נמצאת בשימוש ב-Google APIs. אפשר לעדכן את המיקום הזה בכל שלב.
  • מזהה הפרויקט הוא ייחודי לכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו אחרי שהוא מוגדר. מסוף Cloud יוצר באופן אוטומטי מחרוזת ייחודית, ובדרך כלל לא צריך לדעת מה היא. ברוב ה-Codelabs, תצטרכו להפנות למזהה הפרויקט (בדרך כלל הוא מסומן כ-PROJECT_ID). אם אתם לא אוהבים את המזהה שנוצר, אתם יכולים ליצור מזהה אקראי אחר. אפשר גם לנסות שם משתמש משלכם ולבדוק אם הוא זמין. אי אפשר לשנות את ההגדרה הזו אחרי השלב הזה, והיא תישאר כזו למשך הפרויקט.
  • לידיעתכם, יש ערך שלישי, מספר פרויקט, שחלק מממשקי ה-API משתמשים בו. במאמרי העזרה מפורט מידע נוסף על שלושת הערכים האלה.
  1. בשלב הבא, תצטרכו להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבי Cloud או בממשקי API של 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

מחליפים את הערך _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. איך יוצרים קובץ אימג' של קונטיינר וגרסה

מוסיפים הרשאות של Cloud Deploy Operator לחשבון השירות ב-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

מחכים עד שהפריסה לסביבת QA תסתיים. קידום מהדורה ליעד הבא(סביבת ייצור).

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 Research and Assessment (DORA).

שיעור הכישלון בפריסה

אחוז הפריסות שנכשלו ביעד הסופי בצינור ההפצה.

בדיקת אפליקציות שפרסתם ב-Cloud Run:

d6372b5350f10875.png

7. מעולה!

כל הכבוד, סיימתם את ה-Codelab!

הנושאים שדיברנו עליהם:

  • איך יוצרים צינור עיבוד נתונים ב-Cloud Deploy
  • איך ליצור קובץ אימג' של קונטיינר לאפליקציית ‎ .Net באמצעות Cloud Build
  • איך פורסים אפליקציה ב-Cloud Run באמצעות Cloud Deploy
  • איך מקדמים גרסת Cloud Deploy

הסרת המשאבים

כדי להימנע מחיובים בחשבון Google Cloud בגלל השימוש במשאבים שנעשה במסגרת המדריך הזה, אפשר למחוק את הפרויקט שמכיל את המשאבים, או להשאיר את הפרויקט ולמחוק את המשאבים בנפרד.

מחיקת הפרויקט

הדרך הקלה ביותר לבטל את החיוב היא למחוק את הפרויקט שיצרתם בשביל המדריך.

8. המאמרים הבאים