אוטומציה של קידום גרסאות והרחבת פריסה ב-Cloud Deploy
בדף הזה מוסבר איך להשתמש ב-Cloud Deploy כדי להעביר אוטומטית גרסת הפצה ליעד ולהעביר פריסה לשלב הבא שלה.
במדריך למתחילים הזה תבצעו את הפעולות הבאות:
יוצרים שני אשכולות GKE או שני שירותים של Cloud Run.
יוצרים הגדרת Skaffold ומניפסט של Kubernetes או הגדרת שירות של Cloud Run.
הגדרת צינור עיבוד הנתונים למסירה ויעדי הפריסה ב-Cloud Deploy.
הצינור יופעל בשני יעדים:
devו-staging. היעדstagingמשתמש באסטרטגיית פריסה קנרית.מגדירים שני כללים לאוטומציה:
אוטומציה לקידום הגרסה ל
stagingהיעד אחרי השקה מוצלחת בdev.אוטומציה להעברת ההשקה לשלב
stableאחרי השלמה מוצלחת של שלבcanary-25.
כדי ליצור מופע של צינור העברת הנתונים, יוצרים גרסת הפצה, שנפרסת באופן אוטומטי אל יעד
dev.אפשר לראות את צינור העברת התוכן ואת הגרסה במסוף Google Cloud .
בגלל המבצע האוטומטי, הגרסה הזו מקודמת אל
stagingבאופן אוטומטי.מכיוון שיעד
stagingמשתמש באסטרטגיית פריסה של קנרית, וזו הפריסה הראשונה בסביבת זמן הריצה הזו, שלבcanary-25נדלג. במאמר למה לפעמים מדלגים על שלבים מוסבר למה מדלגים על שלב הקנרי בפעם הראשונה.בגלל ההתקדמות האוטומטית בשלבים, ההשקה מתקדמת לשלב
stable.
לפני שמתחילים
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs, if any are not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
Install the Google Cloud CLI.
-
Configure the gcloud CLI to use your federated identity.
For more information, see Sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud initאם כבר התקנתם את ה-CLI, צריך לוודא שאתם מריצים את הגרסה העדכנית ביותר:
gcloud components update
- מוודאים שלחשבון השירות שמוגדר כברירת מחדל ב-Compute Engine יש הרשאות מספיקות.
יכול להיות שלחשבון השירות כבר יש את ההרשאות הנדרשות. השלבים האלה מיועדים לפרויקטים שבהם השבתתם את ההקצאות האוטומטיות של תפקידים בחשבונות שירות שמוגדרים כברירת מחדל.
- קודם מוסיפים את התפקיד
clouddeploy.jobRunner:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@ \ --role="roles/clouddeploy.jobRunner" - מוסיפים את התפקיד
clouddeploy.releaser:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@ \ --role="roles/clouddeploy.releaser" - מוסיפים את תפקיד המפתח לסביבת זמן הריצה הספציפית.
- ב-GKE:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@ \ --role="roles/container.developer" - ל-Cloud Run:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@ \ --role="roles/run.developer" -
מוסיפים את התפקיד
iam.serviceAccountUser, שכולל את ההרשאהactAsלחשבון השירות שמוגדר כברירת מחדל, כדי לפרוס לסביבת זמן הריצה:gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@ \ --member=serviceAccount:$(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@ \ --role="roles/iam.serviceAccountUser" \ --project=PROJECT_ID -
כדי להשתמש בחשבון השירות שמוגדר כברירת מחדל, צריך להוסיף לעצמכם את התפקיד
iam.serviceAccountUser, כולל ההרשאהactAs:gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe PROJECT_ID \ --format="value(projectNumber)")-compute@ \ --member=user:YOUR_EMAIL_ADDRESS \ --role="roles/iam.serviceAccountUser" \ --project=PROJECT_IDבמקרה הזה, YOUR_EMAIL_ADDRESS היא כתובת האימייל שבה אתם משתמשים כדי לגשת ל-Google Cloud.
- קודם מוסיפים את התפקיד
יצירת סביבות זמן ריצה
אם אתם פורסים ל-Cloud Run, אתם יכולים לדלג על הפקודה הזו.
ב-GKE, יוצרים שני אשכולות: automation-quickstart-cluster-dev
ו-automation-quickstart-cluster-staging, עם הגדרות ברירת מחדל. נקודות הקצה של Kubernetes API באשכולות צריכות להיות נגישות ברשת מהאינטרנט הציבורי. אשכולות GKE נגישים חיצונית כברירת מחדל.
gcloud container clusters create-auto automation-quickstart-cluster-dev \
--project=PROJECT_ID \
--region=us-central1 \
&& gcloud container clusters create-auto automation-quickstart-cluster-staging \
--project=PROJECT_ID \
--region=us-central1
מאתרים את מספר הפרויקט.
כדי לזהות את חשבון השירות שמוגדר כברירת מחדל, צריך את מספר הפרויקט. הפעולה הזו נדרשת כדי להגדיר את משאב האוטומציה.
מריצים את הפקודה הבאה כדי לקבל את מספר הפרויקט:
gcloud projects describe PROJECT_ID --format="value(projectNumber)"מעתיקים את מספר הפרויקט מהפלט של שורת הפקודה ומדביקים אותו כאן.
אין צורך להריץ את זה כפקודה. הדבקה שלו כאן תאכלס את ההפניה לחשבון השירות בהגדרת האוטומציה בהמשך המדריך למתחילים הזה.
PROJECT_NUMBER
הכנת ההגדרה של Skaffold ומניפסט האפליקציה
Cloud Deploy משתמש ב-Skaffold כדי לספק את הפרטים לגבי מה לפרוס ואיך לפרוס אותו בצורה נכונה עבור יעדים נפרדים.
במדריך למתחילים הזה יוצרים קובץ skaffold.yaml, שמזהה את מניפסט האפליקציה שישמש לפריסת האפליקציה לדוגמה.
פותחים חלון טרמינל.
יוצרים ספרייה חדשה ועוברים אליה.
GKE
mkdir deploy-automation-gke-quickstart cd deploy-automation-gke-quickstartCloud Run
mkdir deploy-automation-run-quickstart cd deploy-automation-run-quickstartיוצרים קובץ בשם
skaffold.yamlעם התוכן הבא:GKE
apiVersion: skaffold/v4beta7 kind: Config metadata: name: gke-automation manifests: rawYaml: - k8s-deployment.yaml deploy: kubectl: {}Cloud Run
apiVersion: skaffold/v4beta7 kind: Config metadata: name: run-automation profiles: - name: dev manifests: rawYaml: - run-dev.yaml - name: staging manifests: rawYaml: - run-staging.yaml deploy: cloudrun: {}הקובץ הזה הוא קובץ תצורה מינימלי של Skaffold. במדריך למתחילים הזה, אתם יוצרים את הקובץ. אבל אפשר גם לבקש מ-Cloud Deploy ליצור אחד בשבילכם, עבור אפליקציות פשוטות שאינן בסביבת ייצור.
מידע נוסף על הקובץ הזה מופיע ב
skaffold.yamlמאמרי העזרה.יוצרים את ההגדרה של האפליקציה – זוג הגדרות שירות ל-Cloud Run או מניפסט של Kubernetes ל-GKE.
GKE
יוצרים קובץ בשם
k8s-deployment.yamlעם התוכן הבא:apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment labels: app: my-app namespace: default spec: replicas: 1 selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: containers: - name: nginx image: my-app-image --- apiVersion: v1 kind: Service metadata: name: my-service namespace: default spec: selector: app: my-app ports: - protocol: TCP port: 80הקובץ הזה הוא מניפסט פשוט של Kubernetes, שמשמש לפריסת האפליקציה. קובץ האימג' של קונטיינר שרוצים לפרוס מוגדר כאן כפלייסהולדר,
my-app-image, שמוחלף באימג' הספציפי כשיוצרים את הגרסה.Cloud Run
יוצרים קובץ בשם
run-dev.yamlעם התוכן הבא:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: my-automation-run-service-dev spec: template: spec: containers: - image: my-app-imageיוצרים קובץ בשם
run-staging.yamlעם התוכן הבא:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: my-automation-run-service-staging spec: template: spec: containers: - image: my-app-image
הקובצים האלה הם הגדרות פשוטות של שירות Cloud Run, שמשמשות לפריסת האפליקציה. קובץ האימג' של קונטיינר לפריסה מוגדר כאן כפלייסהולדר,
my-app-image, שמוחלף באימג' הספציפי כשיוצרים את הגרסה.
יצירת צינורות העברה, יעדים ואוטומציה
אפשר להגדיר את צינור העברת הנתונים ואת יעדי ההעברה בקובץ אחד או בקבצים נפרדים. אפשר גם להגדיר פעולת אוטומציה בקובץ נפרד. במדריך הזה לשימוש מהיר, משתמשים בקובץ אחד לצינור, ליעדים ולאוטומציה.
יוצרים את צינור ההפצה, הגדרות היעד ופעולת האוטומציה:
GKE
בספרייה
deploy-automation-gke-quickstart, יוצרים קובץ חדש:clouddeploy.yaml, עם התוכן הבא:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: my-automation-demo-app-1 description: Automation demonstration pipeline serialPipeline: stages: - targetId: automation-quickstart-dev - targetId: automation-quickstart-staging profiles: [] strategy: canary: runtimeConfig: kubernetes: serviceNetworking: service: "my-service" deployment: "my-deployment" canaryDeployment: percentages: [25] verify: false --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: automation-quickstart-dev description: Dev cluster to demonstrate deploy automation gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/automation-quickstart-cluster-dev --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: automation-quickstart-staging description: Staging cluster to demonstrate deploy automation gke: cluster: projects/PROJECT_ID/locations/us-central1/clusters/automation-quickstart-cluster-staging --- apiVersion: deploy.cloud.google.com/v1 kind: Automation metadata: name: my-automation-demo-app-1/promote description: promotes a release suspended: false serviceAccount: PROJECT_NUMBER-compute@ selector: targets: - id: automation-quickstart-dev rules: - promoteReleaseRule: id: "promote-release" wait: 1m destinationTargetId: "@next" --- apiVersion: deploy.cloud.google.com/v1 kind: Automation metadata: name: my-automation-demo-app-1/advance description: advances a rollout suspended: false serviceAccount: PROJECT_NUMBER-compute@ selector: targets: - id: automation-quickstart-staging rules: - advanceRolloutRule: id: "advance-rollout" sourcePhases: ["canary-25"] wait: 1mCloud Run
בספרייה
deploy-automation-run-quickstart, יוצרים קובץ חדש:clouddeploy.yaml, עם התוכן הבא:apiVersion: deploy.cloud.google.com/v1 kind: DeliveryPipeline metadata: name: my-automation-demo-app-1 description: Automation demonstration pipeline serialPipeline: stages: - targetId: automation-quickstart-dev profiles: [dev] - targetId: automation-quickstart-staging profiles: [staging] strategy: canary: runtimeConfig: cloudRun: automaticTrafficControl: true canaryDeployment: percentages: [25] verify: false --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: automation-quickstart-dev description: Dev cluster to demonstrate deploy automation run: location: projects/PROJECT_ID/locations/us-central1 --- apiVersion: deploy.cloud.google.com/v1 kind: Target metadata: name: automation-quickstart-staging description: Staging cluster to demonstrate deploy automation run: location: projects/PROJECT_ID/locations/us-central1 --- apiVersion: deploy.cloud.google.com/v1 kind: Automation metadata: name: my-automation-demo-app-1/promote description: Promotes a release to the next target suspended: false serviceAccount: PROJECT_NUMBER-compute@ selector: targets: - id: automation-quickstart-dev rules: - promoteReleaseRule: id: "promote-release" wait: 1m destinationTargetId: "@next" --- apiVersion: deploy.cloud.google.com/v1 kind: Automation metadata: name: my-automation-demo-app-1/advance description: advances a rollout suspended: false serviceAccount: PROJECT_NUMBER-compute@ selector: targets: - id: automation-quickstart-staging rules: - advanceRolloutRule: id: "advance-rollout" sourcePhases: ["canary-25"] wait: 1mרושמים את צינור עיבוד הנתונים ואת היעדים בשירות Cloud Deploy:
gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_IDעכשיו יש לכם צינור עיבוד נתונים עם יעד אחד מרובה שכולל שני יעדים של GKE או Cloud Run, והוא מוכן לפריסת האפליקציה.
מאשרים את הצנרת ואת היעדים:
במסוף Google Cloud , נכנסים לדף Delivery pipelines של Cloud Deploy כדי לראות רשימה של צינורות העברת הנתונים שזמינים לכם.
צינור העברת הנתונים שיצרתם מוצג, עם שני יעדים שמופיעים בעמודה יעדים.

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

יצירת גרסה
הפצה היא המשאב המרכזי ב-Cloud Deploy שמייצג את השינויים שנפרסים. צינור העברת התוכן מגדיר את מחזור החיים של הגרסה הזו. פרטים על מחזור החיים הזה מופיעים במאמר ארכיטקטורת שירות Cloud Deploy.
GKE
מריצים את הפקודה הבאה מהספרייה deploy-automation-gke-quickstart כדי ליצור משאב release שמייצג את קובץ האימג' של הקונטיינר לפריסה:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=my-automation-demo-app-1 \
--images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa
שימו לב לדגל --images=, שמשמש להחלפת ה-placeholder (my-app-image) במניפסט בתמונה ספציפית עם חתימת SHA. Google ממליצה ליצור תבניות למניפסטים בדרך הזו, ולהשתמש בשמות תמונות שעומדים בדרישות של SHA כשיוצרים גרסת הפצה.
Cloud Run
מריצים את הפקודה הבאה מהספרייה deploy-automation-run-quickstart כדי ליצור משאב release שמייצג את קובץ האימג' של הקונטיינר לפריסה:
gcloud deploy releases create test-release-001 \
--project=PROJECT_ID \
--region=us-central1 \
--delivery-pipeline=my-automation-demo-app-1 \
--images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:95ade4b17adcd07623b0a0c68359e344fe54e65d0cb01b989e24c39f2fcd296a
שימו לב לדגל --images=, שמשמש להחלפת ה-placeholder (my-app-image) בהגדרת השירות בתמונה הספציפית שמוגדרת באמצעות SHA. Google ממליצה ליצור תבניות להגדרות של השירותים והמשימות בדרך הזו, ולהשתמש בשמות תמונות שעומדים בדרישות של SHA כשיוצרים מהדורה.
כברירת מחדל, כשיוצרים גרסה, נוצרת אוטומטית השקה עבור היעד הראשון בצינור.
במדריך למתחילים הזה יש שתי פעולות אוטומטיות, ולכן קורים שני דברים באופן אוטומטי:
אחרי פריסה מוצלחת ביעד הראשון, הגרסה מקודמת אוטומטית ליעד השני.
יש זמן המתנה של דקה אחת באוטומציה של קידום הסרטון.
ביעד השני, שבו מוגדרת השקת קנרי בשיעור של 25%, האוטומציה השנייה מקדמת את ההשקה מ-
canary-25ל-stable.בגרסה הראשונה הזו, השלב
canary-25נדלג, כי אין גרסה קיימת של האפליקציה שאפשר לבצע השוואה בינה לבין גרסת הקנרי. ההשקה תתקדם אוטומטית לשלבstable.יש עיכוב של דקה אחת באוטומציה המתקדמת.
כשהכול מסתיים, האפליקציה נפרסת בהצלחה בשני היעדים בלי שתצטרכו לעשות שום דבר נוסף.
אם אתם רוצים לקבל מידע נוסף על הפעלת שיטת פריסה מסוג Canary, אתם יכולים לנסות את המדריך למתחילים בנושא Canary.
הצגת התוצאות במסוף Google Cloud
אפשר לראות את התוצאות, כולל ההרצות של האוטומציה, בGoogle Cloud מסוף.
עוברים לדף צינורות העברת נתונים ב-Cloud Deploy כדי לראות את צינור העברת הנתונים.
לוחצים על השם של צינור העברת הנתונים 'my-automation-demo-app-1'.
בתרשים של צינור הנתונים מוצג סטטוס הפריסה של האפליקציה. אם עבר מספיק זמן, שני היעדים יוצגו בירוק.

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

הסרת המשאבים
כדי לא לצבור חיובים לחשבון Google Cloud על המשאבים שבהם השתמשתם בדף הזה:
מוחקים את אשכולות GKE או את שירותי Cloud Run:
GKE
gcloud container clusters delete automation-quickstart-cluster-dev --region=us-central1 --project=PROJECT_ID \ && gcloud container clusters delete automation-quickstart-cluster-staging --region=us-west1 --project=PROJECT_IDCloud Run
gcloud run services delete my-automation-run-service-dev --region=us-central1 --project=PROJECT_ID \ && gcloud run services delete my-automation-run-service-staging --region=us-central1 --project=PROJECT_IDמחיקת צינור העברת התוכן, יעדים, פעולות אוטומטיות, גרסה והשקות:
gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_IDמוחקים את הקטגוריות של Cloud Storage שנוצרו על ידי Cloud Deploy.
אחד מסתיים ב-
_clouddeploy, והשני הוא[region].deploy-artifacts.[project].appspot.com.
סיימתם את המדריך למתחילים.