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

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

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

916a54f51af5ee54.png

מה זה Cloud Build?

באמצעות Cloud Build תוכלו לפתח תוכנות במהירות בכל שפות התכנות.

מה זה Cloud Deploy?

Cloud Deploy הוא שירות מנוהל לפיתוח רציף (continuous delivery). באמצעות 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 והמעטפת.

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

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Project name הוא השם המוצג של המשתתפים בפרויקט. זו מחרוזת תווים שלא משמשת את Google APIs. אפשר לעדכן אותו בכל שלב.
  • Project ID הוא ייחודי בכל הפרויקטים ב-Google Cloud ואי אפשר לשנות אותו (אי אפשר לשנות אותו אחרי שמגדירים אותו). מסוף Cloud יוצר מחרוזת ייחודית באופן אוטומטי; בדרך כלל לא מעניין אותך מה זה. ברוב ה-Codelabs תצטרכו להפנות אל מזהה הפרויקט (בדרך כלל הוא מזוהה כ-PROJECT_ID). אם המזהה שנוצר לא מוצא חן בעיניך, יש לך אפשרות ליצור מזהה אקראי אחר. לחלופין, אפשר לנסות תבנית משלך ולבדוק אם היא זמינה. לא ניתן לשנות אותו אחרי השלב הזה, והוא יישאר למשך הפרויקט.
  • לידיעתך, יש ערך שלישי – Project Number (מספר פרויקט), שחלק מממשקי ה-API משתמשים בו. מידע נוסף על כל שלושת הערכים האלה זמין במסמכי התיעוד.
  1. בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים או בממשקי API של Cloud. מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. כדי להשבית את המשאבים ולא לצבור חיובים מעבר למדריך הזה, אתם יכולים למחוק את המשאבים שיצרתם או למחוק את הפרויקט כולו. משתמשים חדשים ב-Google Cloud זכאים להצטרף לתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.

הגדרת סביבה

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

מחליפים את הערך _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

ממתינים עד לסיום הפריסה בסביבת בקרת האיכות. קידום הגרסה ליעד הבא(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 Research and Assessment (DORA).

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

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

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

d6372b5350f10875.png

7. מעולה!

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

נושאים שטיפלנו בהם:

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

הסרת המשאבים

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

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

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

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