פריסת אפליקציית 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 הוא שירות מנוהל לפריסה רציפה (CD). בעזרת 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 ובסביבות מעטפת.

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 כדי להשתמש במשאבים או ב-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 או 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 ומאשרים את הגרסה לפריסה בסביבת הייצור.

4c838b60770e9691.png

בודקים את המצב של צינור עיבוד הנתונים של Cloud Deploy ואת מדדי ה-DORA הזמינים ('ספירת הפריסות', 'תדירות הפריסות', 'שיעור הכשלויות בפריסות').

מדד

תיאור

מספר הפריסות

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

תדירות הפריסה

תדירות הפריסה של צינור עיבוד הנתונים ל-DevOps ליעד הסופי בצינור עיבוד הנתונים.אחד מארבעת מדדי המפתח שהוגדרו על ידי תוכנית DevOps Research and Assessment‏ (DORA).

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

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

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

d6372b5350f10875.png

7. מעולה!

כל הכבוד, סיימת את הקודלאב!

הנושאים שעסקנו בהם:

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

הסרת המשאבים

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

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

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

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