ב-Cloud Run אפשר לציין אילו גרסאות יקבלו תעבורת נתונים, ואת אחוז תעבורת הנתונים שיתקבל בכל גרסה. התכונה הזו מאפשרת לחזור לגרסה קודמת, לפרוס גרסה בהדרגה ולפצל את התנועה בין כמה גרסאות. בדף הזה מוסבר איך משתמשים בתכונה הזו כדי לנהל את התנועה לגרסאות של Cloud Run.
שימו לב: השינויים בניתוב התנועה לא מתבצעים באופן מיידי. כשמשנים את התנועה לגרסאות, כל הבקשות שנמצאות בתהליך ימשיכו עד להשלמה. בקשות פעילות לא ייפסלו, ויכול להיות שהן יופנו לגרסה חדשה או לגרסה קודמת במהלך תקופת המעבר.
חלוקת התנועה וזיקה לסשן (session affinity)
אם אתם מפצלים את התנועה בין כמה עדכונים עם הפעלה של שמירת סשנים, כדאי לעיין במאמר שמירת סשנים ופיצול תנועה כדי להבין איך שמירת סשנים משפיעה על פיצול התנועה.
מחזור החיים של חלוקת התנועה
אם מפצלים את התנועה בין כמה עדכונים או מקצים תנועה לעדכון קודם, כל הפריסות הבאות ישתמשו בדפוס פיצול התנועה הזה. כדי לחזור לשימוש רק בגרסה האחרונה בלי פיצול תנועה, שולחים את כל התנועה לגרסה האחרונה.
התפקידים הנדרשים
כדי לקבל את ההרשאות שנדרשות לניהול שירותים ועדכונים ב-Cloud Run, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
- אם אתם מנהלים שירות שנפרס מקובץ אימג' של קונטיינר:
- Cloud Run Developer (
roles/run.developer) בשירות Cloud Run - משתמש בחשבון שירות
(
roles/iam.serviceAccountUser) בזהות השירות - Artifact Registry Reader
(
roles/artifactregistry.reader) במאגר Artifact Registry של קובצי האימג' של הקונטיינר של השירות (אם רלוונטי)
- Cloud Run Developer (
- אם אתם מנהלים שירות שנפרס מקוד מקור:
- Cloud Run Source Developer
(
roles/run.sourceDeveloper) בפרויקט - Service Usage Consumer
(
roles/serviceusage.serviceUsageConsumer) בפרויקט - משתמש בחשבון שירות
(
roles/iam.serviceAccountUser) בזהות השירות - בנוסף, מקצים לחשבון השירות של Cloud Build את התפקיד Cloud Run Builder (
roles/run.builder) בפרויקט. חשבון השירות של ה-build אחראי ליצירת השירות, ומוגדר כברירת מחדל כחשבון השירות של Compute Engine.
- Cloud Run Source Developer
(
רשימת ההרשאות והתפקידים ב-IAM שמשויכים ל-Cloud Run מופיעה במאמרים תפקידי IAM ב-Cloud Run והרשאות IAM ב-Cloud Run. אם שירות Cloud Run שלכם מתקשר עםGoogle Cloud ממשקי API, כמו ספריות לקוח ב-Cloud, כדאי לעיין במדריך להגדרת זהות שירות. מידע נוסף על מתן תפקידים זמין במאמרים הרשאות פריסה וניהול גישה.
חזרה לגרסה קודמת
כדי לחזור לגרסה קודמת:
המסוף
נכנסים לדף Services של Cloud Run במסוף Google Cloud :
מאתרים את השירות ברשימת השירותים ולוחצים עליו.
לוחצים על הכרטיסייה Revisions (גרסאות) כדי לראות את רשימת הגרסאות הנוכחיות של השירות הזה.
ברשימת הגרסאות, לוחצים על סמל האליפסה משמאל לגרסה שרוצים לבטל:
לוחצים על ניהול תנועה כדי להציג את הטופס לניהול תנועה:
- בוחרים בתפריט הנפתח את הגרסה הקודמת שאליה רוצים לחזור.
- מגדירים את אחוז התנועה של הגרסה הקודמת ל-100.
- מגדירים את אחוז התנועה של הגרסה המוצגת ל-0.
- לוחצים על Save.
gcloud
משתמשים בפקודה הבאה:
gcloud run services update-traffic SERVICE --to-revisions REVISION=100
- מחליפים את SERVICE בשם השירות.
- מחליפים את REVISION בשם של הגרסה שרוצים לחזור אליה.
YAML
אם אתם יוצרים שירות חדש, דלגו על השלב הזה. כדי לעדכן שירות קיים, מורידים את הגדרות ה-YAML שלו:
gcloud run services describe SERVICE --format export > service.yaml
מתחת למאפיין
spec, מאתרים את המאפייןtrafficומעדכנים אותו כך:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName: REVISION percent: 100החלפה
- REVISION בשם של הגרסה שרוצים לחזור אליה.
מחליפים את השירות בהגדרות החדשות באמצעות הפקודה הבאה:
gcloud run services replace service.yaml
מחכים שהעדכון יסתיים: אמורה להופיע הודעה שהגרסה שמשחזרים ממנה נפרסה ומציגה
0אחוז מהתנועה.
Terraform
כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.
מוסיפים את הטקסט הבא למשאבgoogle_cloud_run_v2_service בקובץ התצורה של Terraform:השקה הדרגתית של שינויים
כדי להשיק גרסה חדשה בהדרגה:
המסוף
נכנסים לדף Services של Cloud Run במסוף Google Cloud :
בוחרים שירות מרשימת השירותים.
לוחצים על פריסת גרסה חדשה.
ממלאים את טופס הפריסה לפי הצורך, אבל מוודאים שתיבת הסימון עם התווית Serve this revision immediately (הצגת הגרסה הזו באופן מיידי) לא מסומנת.
לוחצים על פריסה.
לוחצים על ניהול תנועה.
הגרסה החדשה מופיעה ברשימה, אבל מוגדר לה אחוז של 0: היא לא מציגה מודעות לאף גולש. בטופס:
- מגדירים את האחוז הרצוי, למשל 5. שימו לב: אחוז הגרסה שמוצגת יורד אוטומטית באותו שיעור.
- לוחצים על Save.
- חוזרים על השלבים של ניהול תנועה, אבל עם אחוזים שונים. מגדילים את האחוז לפי הצורך לגרסה החדשה. אין צורך לפרוס מחדש כדי לשנות את אחוזי התנועה.
gcloud
כדי לפרוס שירות מקובץ אימג' של קונטיינר:
פורסים את הגרסה שרוצים להשיק בהדרגה, ומגדירים אותה כך שלא תקבל תנועה בהתחלה:
כדי לפרוס שירות מקוד מקור:
gcloud run deploy --image IMAGE --no-traffic
מחליפים את IMAGE בתמונה שרוצים לפרוס.
כדי לפרוס שירות מקוד מקור:
gcloud run deploy SERVICE --source . --no-traffic
מחליפים את SERVICE בשם השירות.
מציינים את אחוז התנועה שהגרסה החדשה צריכה לטפל בו, לדוגמה, 5 אחוזים:
gcloud run services update-traffic SERVICE --to-revisions REVISION=PERCENTAGE
- מחליפים את SERVICE בשם השירות.
- מחליפים את REVISION בשם של הגרסה שפורסתם בהדרגה. כדי לציין את הגרסה האחרונה, אפשר להשתמש ב-
LATEST, לדוגמה,LATEST=5. - מחליפים את PERCENTAGE באחוז התנועה שרוצים לשלוח לגרסה החדשה, לדוגמה,
5כדי לשלוח 5% מהתנועה.
אחרי שהביצועים של הגרסה ישביעו רצון, חוזרים על שלב
update-trafficשלמעלה, אבל מגדילים את ערך האחוז לפי הצורך.
YAML
אם אתם יוצרים שירות חדש, דלגו על השלב הזה. כדי לעדכן שירות קיים, מורידים את הגדרות ה-YAML שלו:
gcloud run services describe SERVICE --format export > service.yaml
מבצעים את שינויי ההגדרות הרצויים בשירות ומציינים את שם הגרסה שרוצים לגרסה החדשה:
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: template: metadata: annotations: ... name: REVISION-NAMEהחלפה
- REVISION-NAME בשם שרוצים לתת לגרסה החדשה.
מתחת למאפיין
spec, מאתרים את המאפייןtrafficומעדכנים אותו כך שהגרסה החדשה תציג רק חלק קטן מהתנועה:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName: REVISION-NEW percent: PERCENT-NEW - revisionName: REVISION-FORMER percent: PERCENT-FORMERהערה: סכום האחוזים צריך להיות 100. החלפה
- REVISION-NEW בשם של הגרסה שאתם משיקים בהדרגה.
- REVISION-FORMER בשם של הגרסה הפעילה.
- PERCENT-NEW עם אחוז התנועה שרוצים להפנות לגרסה החדשה,
לדוגמה, משתמשים ב-
10כדי להפנות 10% מהתנועה לגרסה הזו. - PERCENT-FORMER עם אחוז התנועה שרוצים לשלוח לגרסה הקודמת
מחכים שהעדכון יסתיים: אמורה להופיע הודעה שהגרסה החדשה שמופצת בהדרגה נפרסה ושהיא מציגה את ערך אחוז התנועה שבו השתמשתם.
Terraform
מוסיפים את הנתונים הבאים לקובץ .tf ומעדכנים בהדרגה את אחוז התנועה מהגרסה הקודמת לגרסה האחרונה.
חשוב לזכור שכל שינוי בתנועה ידרוש הפעלה נוספת של terraform apply.
מזינים terraform apply כדי להחיל את השינויים.
פיצול התנועה בין כמה גרסאות
כדי לפצל את התנועה בין שתי גרסאות או יותר:
המסוף
נכנסים לדף Services של Cloud Run במסוף Google Cloud :
מחפשים את השירות ברשימת השירותים ולוחצים עליו.
לוחצים על ניהול תנועה.
הגרסה החדשה שמוצגת כרגע מופיעה ברשימה. בטופס:
- מגדירים את אחוז הגרסה שמוצגת כרגע לפי הפיצול הרצוי.
- בוחרים אחת מהגרסאות הקודמות באמצעות הרשימה הנפתחת ומגדירים אותה לפי אחוז החלוקה הרצוי.
- כדי לפצל את התנועה בין כמה גרסאות, לוחצים על הוספת גרסה, בוחרים את הגרסה ומגדירים את אחוז התנועה לפי הפיצול הרצוי.
- לוחצים על Save.
gcloud
מציינים את השינויים ואת אחוז התנועה לכל שינוי ברשימה מופרדת בפסיקים:
gcloud run services update-traffic SERVICE --to-revisions LIST
- מחליפים את SERVICE בשם השירות.
- מחליפים את LIST ברשימה של שינויים ואחוזים שמופרדים בפסיקים:
REVISION1=PERCENTAGE1,REVISION2=PERCENTAGE2,REVISIONn=PERCENTAGEx
לדוגמה,hello2-00005-red=25,hello2-00001-bod=25,hello2-00002-nan=50.
YAML
אם אתם יוצרים שירות חדש, דלגו על השלב הזה. כדי לעדכן שירות קיים, מורידים את הגדרות ה-YAML שלו:
gcloud run services describe SERVICE --format export > service.yaml
מתחת למאפיין
spec, מאתרים את המאפייןtrafficומעדכנים אותו כך שהגרסה החדשה תציג רק חלק קטן מהתנועה:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName: REVISION-A percent: PERCENT-A - revisionName: REVISION-B percent: PERCENT-B - revisionName: REVISION-C percent: PERCENT-Cהערה: סכום האחוזים צריך להיות 100. החלפה
- REVISION-A, REVISION-B, REVISION-C עם הגרסאות שאתם מקצים להן תנועה.
- PERCENT-A, PERCENT-B, PERCENT-C עם האחוז של הגרסה המתאימה.
מחליפים את השירות בהגדרות החדשות באמצעות הפקודה הבאה:
gcloud run services replace service.yaml
מחכים שהעדכון יסתיים: אמורה להופיע הודעה שהגרסה החדשה שמופעלת בהדרגה הופעלה ומציגה
5אחוזים (או כל ערך הדרגתי אחר שהשתמשתם בו) מהתנועה.
Terraform
מוסיפים את הקוד הבא לקובץ Terraform:
מזינים terraform apply כדי להחיל את השינויים.
שליחת כל התנועה לגרסה האחרונה
כשפורסים גרסה חדשה, אפשר להגדיר שגרסה זו וכל הגרסאות העתידיות יציגו 100% מהתנועה בהקדם האפשרי, וכך לבטל את חלוקת התנועה הקיימת:
המסוף
נכנסים לדף Services של Cloud Run במסוף Google Cloud :
מאתרים את השירות ברשימת השירותים ולוחצים עליו.
לוחצים על פריסת גרסה חדשה.
ממלאים את טופס הפריסה לפי הצורך, ומקפידים לסמן את התיבה Serve this revision immediately (הצגת הגרסה הזו באופן מיידי). הפעולה הזו תשנה את פיצול התנועה הקיים, והגרסה החדשה תוצג ל-100% מהתנועה.
לוחצים על פריסה.
gcloud
כדי לשלוח את כל התנועה לגרסה האחרונה שהופעלה:
gcloud run services update-traffic SERVICE --to-latest
מחליפים את SERVICE בשם השירות.
YAML
אם אתם יוצרים שירות חדש, דלגו על השלב הזה. כדי לעדכן שירות קיים, מורידים את הגדרות ה-YAML שלו:
gcloud run services describe SERVICE --format export > service.yaml
מתחת למאפיין
spec, מאתרים את המאפייןtrafficומעדכנים אותו לערך הבא:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - latestRevision: true percent: 100מחליפים את השירות בהגדרות החדשות באמצעות הפקודה הבאה:
gcloud run services replace service.yaml
מחכים שהעדכון יסתיים: אמורה להופיע הודעה שהגרסה (העדכנית) נפרסה ומוצגת ל-
100אחוזים מהתנועה.
Terraform
מוסיפים את הקוד הבא לקובץ Terraform:
מזינים terraform apply כדי להחיל את השינויים.
שימוש בתגים לבדיקה, להעברת תנועה ולהחזרה למצב קודם
כדי להימנע מחיוב על עלויות של עדכונים מתויגים, אפשר להשתמש במכונות מינימום ברמת השירות או להסיר תגים מעדכונים כשאין בהם יותר צורך.
תרחיש נפוץ לשימוש בתכונה הזו הוא בדיקה של גרסה חדשה של שירות לפני שהיא מתחילה לשרת תנועה, ברצף הפעולות הבא:
- הרצת בדיקות שילוב בקונטיינר במהלך הפיתוח.
- פריסת מאגר התגים ב Google Cloud פרויקט שמשמש רק לבדיקות, לא להצגת מודעות, ובדיקה מול גרסה מתוקנת עם תגים.
- לפרוס אותו בסביבת הייצור בלי להציג תנועה, ולבדוק אותו מול גרסה מתויגת בסביבת הייצור.
- מעבירים את התנועה לגרסה המתויגת.
פריסת גרסה חדשה עם תגים
כדי לפרוס גרסה חדשה של שירות קיים בסביבת ייצור:
gcloud
gcloud run deploy myservice --image IMAGE_URL --no-traffic --tag TAG_NAME
מחליפים את:
- IMAGE_URL מחליפים בכתובת ה-URL של התמונה.
- TAG_NAME בשם התג באותיות קטנות.
התג מאפשר לכם לבדוק ישירות את הגרסה החדשה בכתובת URL ספציפית, בלי להפנות אליה תנועה. כתובת ה-URL מתחילה בשם התג שסיפקתם: לדוגמה, אם השתמשתם בשם התג green בשירות myservice, תבדקו את הגרסה המתויגת בכתובת ה-URL https://green---myservice-abcdef.a.run.app
YAML
אם אתם יוצרים שירות חדש, דלגו על השלב הזה. כדי לעדכן שירות קיים, מורידים את הגדרות ה-YAML שלו:
gcloud run services describe SERVICE --format export > service.yaml
מתחת למאפיין
traffic, מאתרים את המאפייןtagשמתאים לגרסה שרוצים להוסיף לה תג ומעדכנים אותו:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName: REVISION percent: 100 - revisionName: REVISION-A tag: TAG-A - revisionName: REVISION-B tag: TAG-B - revisionName: REVISION-C tag: TAG-Cמחליפים את:
- TAG-A, TAG-B, TAG-C עם התג שמשויך לכל עדכון.
- REVISION בשם של גרסה קיימת שרוצים להפנות אליה את כל תעבורת הנתונים.
יוצרים או מעדכנים את השירות באמצעות הפקודה הבאה:
gcloud run services replace service.yaml
אם קיים קובץ
service.yaml, הפקודהgcloud run services replaceמשתמשת בו כברירת מחדל.
Terraform
מוסיפים את הקוד הבא לקובץ Terraform ומעדכנים בהדרגה את אחוז התנועה מהגרסה הישנה לגרסה החדשה ביותר באמצעות התג החדש.
חשוב לזכור שכל שינוי בתנועה ידרוש הפעלה נוספת של terraform apply.
מזינים terraform apply כדי להחיל את השינויים.
הסרת תג
כדי להסיר תג מגרסה:
המסוף
נכנסים לדף Services של Cloud Run במסוף Google Cloud :
בוחרים שירות מרשימת השירותים.
עוברים לקטע Revisions בשירות הרצוי ובוחרים את הגרסה שרוצים להסיר ממנה את התג הקיים.
מעבירים את העכבר מעל העמודה Revision URLs (tags) (כתובות URL של גרסאות (תגים)) ולוחצים על סמל העיפרון:
בתפריט של תיבת הדו-שיח Revision URLs, לוחצים על סמל פח האשפה כדי להסיר את התג הנוכחי שמשמש בגרסה.
לוחצים על Save.
gcloud
כדי להסיר תג של גרסה:
gcloud run services update-traffic SERVICE --remove-tags TAG_NAME
החלפה
- TAG_NAME בשם התג שאליו מעבירים את התנועה
- SERVICE בשם השירות שממנו מסירים את התג
YAML
אם אתם יוצרים שירות חדש, דלגו על השלב הזה. כדי לעדכן שירות קיים, מורידים את הגדרות ה-YAML שלו:
gcloud run services describe SERVICE --format export > service.yaml
מבצעים את שינויי ההגדרות הרצויים בשירות.
מתחת למאפיין
spec, מאתרים את המאפייןtagשל הגרסה המתויגת ומסירים אותו:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName: REVISION tag: TAG_NAME percent: PERCENT-NEWמחליפים את השירות בהגדרות החדשות באמצעות הפקודה הבאה:
gcloud run services replace service.yaml
Terraform
מוסיפים את הקוד הבא לקובץ Terraform:
מזינים terraform apply כדי להחיל את השינויים.
העברת תנועה לגרסה מתויגת
אחרי שמוודאים שהגרסה החדשה פועלת כמו שצריך, אפשר להתחיל להעביר אליה את התנועה באמצעות מסוף Google Cloud , שורת הפקודה של Google Cloud CLI, Terraform או קובץ YAML:
המסוף
נכנסים לדף Services של Cloud Run במסוף Google Cloud :
מחפשים את השירות ברשימת השירותים ולוחצים עליו:
בוחרים את הגרסה המתויגת שאליה רוצים לשלוח תנועה:
לוחצים על ניהול תנועה.
מאתרים את שם הגרסה שתויגה: היא מופיעה ברשימה אבל עם אחוז 0: כרגע לא מופנית אליה תנועה. בטופס ניהול תנועה*:
- מגדירים את האחוז הרצוי, למשל 5. שימו לב: האחוז של הגרסה שמוצגת כרגע יופחת אוטומטית באותו סכום.
- לוחצים על Save.
- במהלך שעות או ימים, לפי הצורך, חוזרים על השלבים של ניהול תנועת הגולשים, אבל עם אחוזים שונים. מגדילים את האחוז לפי הצורך לגרסה המתויגת. אין צורך לפרוס מחדש כדי לשנות את אחוזי התנועה.
gcloud
כדי להעביר תנועה לתג גרסה ספציפי:
gcloud run services update-traffic myservice --to-tags TAG_NAME=TRAFFIC_PERCENT
החלפה
- TAG_NAME בשם התג שאליו מעבירים את התנועה
- TRAFFIC_PERCENT עם אחוז התנועה שרוצים שהגרסה המתויגת תציג, לדוגמה,
1.
YAML
אם אתם יוצרים שירות חדש, דלגו על השלב הזה. כדי לעדכן שירות קיים, מורידים את הגדרות ה-YAML שלו:
gcloud run services describe SERVICE --format export > service.yaml
מבצעים את השינויים הרצויים בהגדרות השירות.
מתחת למאפיין
spec, מאתרים את המאפייןtrafficומעדכנים אותו עבור הגרסה המתויגת כך שהגרסה המתויגת תציג רק כמות קטנה של תנועה:apiVersion: serving.knative.dev/v1 kind: Service metadata: name: SERVICE spec: ... traffic: - revisionName: REVISION tag: TAG_NAME percent: PERCENT-NEW - revisionName: REVISION-FORMER percent: PERCENT-FORMERהערה: סכום האחוזים צריך להיות 100. החלפה
- REVISION בשם של הגרסה המתויגת.
- TAG_NAME בשם התג שאתם משיקים בהדרגה.
- PERCENT-NEW עם אחוז התנועה שרוצים להפנות לגרסה המתויגת, לדוגמה, שימוש ב-
10כדי להפנות 10% מהתנועה לגרסה הזו. - REVISION-FORMER עם השם של הגרסה שמוצגת כרגע.
- PERCENT-FORMER עם אחוז התנועה שרוצים לשלוח לגרסה הקודמת
מחליפים את השירות בהגדרות החדשות באמצעות הפקודה הבאה:
gcloud run services replace service.yaml
מחכים שהעדכון יסתיים: אמורה להופיע הודעה שהגרסה החדשה שמופצת בהדרגה נפרסה ושהיא מציגה את ערך אחוז התנועה שבו השתמשתם.
Terraform
מוסיפים לקובץ .tf את הנתונים הבאים:
במהלך שעות או ימים, לפי הצורך, מעדכנים בהדרגה מתג אחד לתג השני, ומגדילים את האחוז לפי הצורך עבור הגרסה המתויגת.
אחרי כל שינוי, מזינים terraform apply כדי להחיל אותו.