במאמר הזה מוסבר איך להגדיר פריסות קנריות ולהשתמש בהן כדי לפרוס את האפליקציות ב-Cloud Run. פריסת קנרית ב-Cloud Deploy תומכת בשירותים ובמאגרי עובדים ב-Cloud Run, אבל לא במשימות.
פריסה של גרסה ראשונית (canary) היא הטמעה הדרגתית של גרסה חדשה של האפליקציה, שבה מגדילים בהדרגה את אחוז תעבורת הנתונים שנשלחת לגרסה החדשה, תוך מעקב אחר ביצועי האפליקציה. כך תוכלו לזהות בעיות פוטנציאליות בשלב מוקדם ולמזער את ההשפעה שלהן על המשתמשים.
איך פועל פריסת קנרית ב-Cloud Run
כשפורסים ל-Cloud Run באמצעות אסטרטגיית פריסה של גרסה ראשונית (canary), Cloud Deploy מעדכן את השירות הקיים עם גרסה חדשה. הגרסה החדשה מקבלת אחוז מסוים מהתנועה, והגרסה הישנה ממשיכה לקבל את שאר התנועה. מגדילים בהדרגה את חלוקת התנועה לגרסה החדשה לאורך זמן.
באמצעות Cloud Deploy, אתם יכולים להגדיר פריסות קנרית ל-Cloud Run בשלב אחד או בכמה שלבים.
ההוראות שמופיעות כאן כוללות רק את מה שספציפי להגדרת קנרי. במסמך פריסת שירות, משימה או מאגר עובדים של Cloud Run מפורטות ההוראות הכלליות להגדרה ולהפעלה של צינור עיבוד הנתונים לפריסה.
בודקים שיש לכם את ההרשאות הנדרשות
בנוסף להרשאות אחרות של ניהול זהויות והרשאות גישה שנדרשות לשימוש ב-Cloud Deploy, אתם צריכים את ההרשאות הבאות כדי לבצע פעולות נוספות שעשויות להידרש לפריסה של גרסה ראשונית (canary):
clouddeploy.rollouts.advanceclouddeploy.rollouts.ignoreJobclouddeploy.rollouts.cancelclouddeploy.rollouts.retryJobclouddeploy.jobRuns.getclouddeploy.jobRuns.listclouddeploy.jobRuns.terminate
במאמר תפקידים והרשאות ב-IAM מוסבר אילו תפקידים זמינים כוללים את ההרשאות האלה.
הכנת skaffold.yaml
קובץ ה-skaffold.yaml מגדיר איך הגדרות השירות של Cloud Run מוצגות ונפרסות. כדי לבצע פריסה של גרסה ראשונית(canary) ב-Cloud Run, צריך לוודא שהיא מצביעה נכון על קובצי הגדרת השירות ומגדירה את כל ארטיפקטי הבנייה הנדרשים (כמו קובצי אימג' של קונטיינרים). לא נדרשת הגדרה מיוחדת ל-Canary בתוך skaffold.yaml, מעבר למה שנדרש לפריסה רגילה. אפשר להשתמש בפרופילים של Skaffold כדי לנהל וריאציות שונות של הגדרות שירות עבור שלבים מותאמים אישית של בדיקות קנריות.
הכנת ההגדרה של מאגר העובדים או השירות
קובץ ההגדרה הרגיל של שירות Cloud Run מספיק, אבל בלי פסקה traffic. Cloud Deploy מנהל את פיצול התנועה בין הגרסה האחרונה שעברה בהצלחה לבין הגרסה החדשה.
שירות
דוגמה service.yaml (ללא פסקה traffic):
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: my-cloudrun-service
spec:
template:
spec:
containers:
- image: gcr.io/my-project/my-cloudrun-app
ports:
- containerPort: 8080
מאגר עובדים
דוגמה worker-pool.yaml (ללא פסקה instanceSplit):
apiVersion: run.googleapis.com/v1
kind: WorkerPool
metadata:
name: my-wp
annotations:
run.googleapis.com/launch-stage: BETA
spec:
template:
spec:
containers:
- image: us-docker.pkg.dev/cloudrun/container/worker-pool
הגדרת קנרי אוטומטי
הגדרת קנרית אוטומטית ישירות בהגדרת צינור עיבוד הנתונים לפריסה בשלב ספציפי של Cloud Run. Cloud Deploy מורה ל-Cloud Run באופן אוטומטי לפצל את התנועה בין הגרסה היציבה האחרונה לבין הגרסה החדשה, בהתאם לאחוזים שצוינו.
serialPipeline:
stages:
- targetId: prod
profiles: []
strategy:
canary:
runtimeConfig:
cloudRun:
automaticTrafficControl: true
canaryDeployment:
percentages: [PERCENTAGES]
verify:
tasks: [TASKS]
predeploy:
tasks: [TASKS]
postdeploy:
tasks: [TASKS]
בהגדרה הזו:
PERCENTAGES היא רשימה מופרדת בפסיקים של ערכי אחוזים שמייצגים את העלייה בשיעור התנועה לגרסת הקנרית. לדוגמה: PERCENTAGES.
[25, 50, 75]הערה: ההנחה היא שפריסת הקנרי היא בשיעור של 100%, ולכן היא לא נכללת ב-100, והיא מטופלת בשלבstable.כדי להפעיל את אימות הפריסה, צריך להגדיר את קטע ה-
verify. אם תעשו את זה, תתווסףverifyמשימה לכל שלב של קנרי.כדי להפעיל ווים של פריסה מוקדמת, צריך להגדיר את פסקה
predeploy. אם תעשו את זה, תתווסף משימהpredeployלשלב הראשון של קנרי.כדי להפעיל postdeploy hooks, צריך להגדיר את ה-stanza
postdeploy. אם תעשו את זה, משימהpostdeployתתווסף לשלבstable.כל נכס
tasksבקטעverify,predeployו-postdeployמורכב ממשימה אחת או יותר שמופעלות כחלק מהעבודה הזו. כל המשימות שהוגדרו יפעלו ברצף לפי הסדר שבו הן הוגדרו.
הגדרת קנרי אוטומטי בהתאמה אישית
השילוב הזה מאפשר להגדיר שלבים מותאמים אישית (שמות, אחוזים, פרופילים, אימות, hooks) עם ניהול התנועה האוטומטי של Cloud Deploy ל-Cloud Run. אתם מגדירים את השלבים, אבל Cloud Deploy מורה ל-Cloud Run להעביר את התנועה על סמך האחוזים.
כדי להגדיר את זה, צריך לכלול את ההגדרה runtimeConfig.cloudRun.automaticTrafficControl: true ואת הקטע customCanaryDeployment (שמגדיר את phaseConfigs) בתוך הבלוק strategy.canary. Cloud Deploy ישתמש בפרופילים שצוינו של Skaffold כדי לעבד את הגדרת השירות (שעדיין לא אמורה לכלול קטע traffic), אבל ינהל את התעבורה באופן אוטומטי בהתאם לאחוזים של השלב.
serialPipeline:
stages:
- targetId: cloudrun-prod
profiles: []
strategy:
canary:
# Include runtimeConfig for automatic traffic management
runtimeConfig:
cloudRun:
automaticTrafficControl: true
# Include customCanaryDeployment for phase customization
customCanaryDeployment:
phaseConfigs:
- phaseId: "warmup-cr"
percentage: 10
profiles: ["base-config"] # Profile rendering service def (no traffic stanza)
verify:
tasks: [TASKS]
- phaseId: "scaling-cr"
percentage: 50
profiles: ["base-config"] # Can use the same profile
verify:
tasks: [TASKS]
- phaseId: "stable"
percentage: 100
profiles: ["base-config"]
verify:
tasks: [TASKS]
הפעלת Canary ב-Cloud Run
רישום של צינור עיבוד נתונים ויעדים: מחילים את קובצי ההגדרות של צינור העברת הנתונים והיעד ב-Cloud Run.
gcloud deploy apply --file=delivery-pipeline.yaml --region=REGION gcloud deploy apply --file=cloudrun-targets.yaml --region=REGIONצינור העברת הנתונים כולל את ההגדרה האוטומטית או המותאמת אישית של קנרי, עבור זמן הריצה שבחרתם.
יצירת גרסת הפצה: מתחילים את הפריסה ומזינים את שם התמונה.
gcloud deploy releases create RELEASE_NAME \ --delivery-pipeline=PIPELINE_NAME \ --region=REGIONצינור העברת הנתונים שזוהה על ידי
PIPELINE_NAMEמכיל את ההגדרה האוטומטית או המותאמת אישית של קנרי שמתוארת במסמך הזה.קידום גרסת הגישוש:
CLI של gcloud
gcloud deploy rollouts advance ROLLOUT_NAME \ --release=RELEASE_NAME \ --delivery-pipeline=PIPELINE_NAME \ --region=REGIONכאשר:
ROLLOUT_NAMEהוא השם של ההשקה הנוכחית שרוצים להעביר לשלב הבא.
RELEASE_NAMEהוא שם הגרסה שההשקה הזו היא חלק ממנה.
PIPELINE_NAMEהוא השם של צינור ההפצה שבו אתם משתמשים כדי לנהל את הפריסה של הגרסה הזו.
REGIONהוא שם האזור שבו נוצרה הגרסה, למשלus-central1. זהו שדה חובה.מידע נוסף על הפקודה
gcloud deploy rollouts advanceזמין במאמר בנושא Google Cloud SDK.מסוף Google Cloud
לוחצים על צינור עיבוד הנתונים שמופיע ברשימת צינורות עיבוד הנתונים להעברה.
בדף הפרטים של צינור ההפצה מוצג ייצוג גרפי של ההתקדמות בצינור ההפצה.
בכרטיסייה השקות, בקטע פרטים של צינור ההפצה, לוחצים על שם ההשקה.
יוצג דף הפרטים של ההשקה.

שימו לב שבדוגמה הזו, ההשקה כוללת שלב
canary-50ושלבstable. יכול להיות שההשקה שלכם תכלול יותר שלבים או שלבים שונים.לוחצים על הפצה מתקדמת.
ההשקה מתקדמת לשלב הבא.
שלבים שדילגו עליהם
אם פורסים קנרי והאפליקציה עדיין לא נפרסה בסביבת זמן הריצה הזו, Cloud Deploy מדלג על שלב הקנרי ומריץ את השלב היציב. במאמר דילוג על שלבים בפעם הראשונה מוסבר למה זה קורה.
המאמרים הבאים
אפשר לנסות את המדריך להתחלת העבודה עם פריסה של גרסה ראשונית (canary).