ב-Cloud Run אפשר לציין אילו גרסאות יקבלו תעבורת נתונים, ואת אחוז תעבורת הנתונים שיתקבל בכל גרסה. התכונה הזו מאפשרת לחזור לגרסה קודמת, לפרוס גרסה בהדרגה ולפצל את התנועה בין כמה גרסאות. בדף הזה מוסבר איך משתמשים בתכונה הזו כדי לנהל את התנועה לגרסאות של Cloud Run.
חשוב לזכור ששינויים בניתוב התנועה לא מתבצעים באופן מיידי. כשמשנים את התנועה לגרסאות, כל הבקשות שנמצאות בתהליך ימשיכו עד להשלמה. בקשות פעילות לא יימחקו, ויכול להיות שהן יופנו לגרסה חדשה או לגרסה קודמת במהלך תקופת המעבר.
חלוקת התנועה וזיקה לסשן (session affinity)
אם אתם מפצלים את התנועה בין כמה עדכונים עם הפעלה של שמירת סשנים, כדאי לעיין במאמר שמירת סשנים ופיצול תנועה כדי להבין איך שמירת סשנים משפיעה על פיצול התנועה.
מחזור החיים של חלוקת התנועה
אם מפצלים את התנועה בין כמה עדכונים או מקצים תנועה לעדכון קודם, כל הפריסות הבאות ישתמשו בדפוס פיצול התנועה הזה. כדי לחזור לשימוש רק בגרסה האחרונה בלי פיצול תנועה, שולחים את כל התנועה לגרסה האחרונה.
התפקידים הנדרשים
כדי לקבל את ההרשאות שנדרשות לניהול שירותים ועדכונים ב-Cloud Run, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:
- אם אתם מנהלים שירות שנפרס מקובץ אימג' של קונטיינר:
- Cloud Run Developer (
roles/run.developer) בשירות Cloud Run - משתמש בחשבון שירות
(
roles/iam.serviceAccountUser) בזהות השירות - קריאה ב-Artifact Registry (
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 :
מאתרים את השירות ברשימת השירותים ולוחצים עליו.
לוחצים על הכרטיסייה היסטוריית גרסאות כדי לראות את רשימת הגרסאות הנוכחיות של השירות.
ברשימת הגרסאות, לוחצים על סמל האליפסה משמאל לגרסה שרוצים לבטל:
לוחצים על ניהול תנועה כדי להציג את האפשרויות לניהול תנועה.
בוחרים באפשרות שליחת כל התנועה לגרסה אחת ובוחרים את הגרסה מהתפריט הנפתח.
לוחצים על 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 :
בוחרים שירות מרשימת השירותים.
מגדירים את השירות לפי הצורך.
לוחצים על הצגת ההבדלים ופריסה מחדש.
מוודאים שהאפשרות הצגת הגרסה הזו באופן מיידי לא נבחרה.
לוחצים על פריסת השינויים.
לוחצים על הכרטיסייה היסטוריית גרסאות. אם הגרסה החדשה עדיין לא מופיעה ברשימה, לוחצים על לחצן הרענון.
ברשימת הגרסאות, לוחצים על סמל האליפסה משמאל לגרסה שאליה רוצים להחזיר את השינויים.
לוחצים על ניהול תנועה כדי להציג את האפשרויות לניהול תנועה.
לוחצים על פיצול התנועה בין כמה גרסאות.
בוחרים את הגרסאות שרוצים לפצל ביניהן את התנועה ואת אחוז התנועה לכל גרסה.
לוחצים על 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 :
בוחרים שירות מרשימת השירותים.
עוברים לכרטיסייה היסטוריית גרסאות.
לוחצים על הסמל ניהול תגי גרסה לצד התג שרוצים למחוק.
לוחצים על סמל המחיקה כדי להסיר את התג הנוכחי שמשמש בגרסה.
לוחצים על 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 :
מאתרים את השירות ברשימת השירותים ולוחצים עליו.
בוחרים את הגרסה המתויגת שרוצים לשלוח אליה תנועה.
לוחצים על ניהול התנועה.
לוחצים על שליחת כל התנועה לגרסה אחת אם רוצים שהגרסה תקבל 100% מהתנועה, או על פיצול התנועה בין כמה גרסאות כדי לחלק את התנועה בין כמה גרסאות.
בוחרים את הגרסאות מהתפריט ומציינים את אחוז התנועה, אם רלוונטי.
לוחצים על 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 כדי להחיל אותו.