ב-Cloud Run אפשר לציין אילו גרסאות יקבלו תנועה, ואת אחוז התנועה שיתקבל בגרסה. התכונה הזו מאפשרת לחזור לגרסה קודמת, לפרוס גרסה בהדרגה ולפצל את התנועה בין כמה גרסאות. בדף הזה מוסבר איך משתמשים בתכונה הזו כדי לנהל את התנועה לגרסאות של Cloud Run.
שימו לב: השינויים בניתוב התנועה לא מתבצעים באופן מיידי. כשמשנים את התנועה לגרסאות, כל הבקשות שנמצאות בתהליך ימשיכו עד להשלמה. בקשות פעילות לא יימחקו, ויכול להיות שהן יופנו לגרסה חדשה או לגרסה קודמת במהלך תקופת המעבר.
חלוקת תנועה וזיקה לסשן
אם אתם מפצלים את התנועה בין כמה גרסאות והאפשרות 'זיקה לסשן (session affinity)' מופעלת, כדאי לעיין במאמר זיקה לסשן (session affinity) וחלוקת התנועה כדי להבין איך זיקה לסשן (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) בפרויקט - צרכן של שימוש בשירות
(
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, כדאי לעיין במדריך להגדרת זהות שירות. מידע נוסף על מתן תפקידים זמין במאמרים הרשאות פריסה וניהול גישה.
חזרה לגרסה קודמת
כדי לחזור לגרסה קודמת:
המסוף
במסוף Google Cloud , נכנסים לדף Services של Cloud Run:
מאתרים את השירות ברשימת השירותים ולוחצים עליו.
לוחצים על הכרטיסייה 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:השקה הדרגתית של שינויים
כדי להשיק גרסה חדשה בהדרגה:
המסוף
במסוף Google Cloud , נכנסים לדף Services של Cloud Run:
בוחרים שירות מרשימת השירותים.
לוחצים על Deploy New Revision (פריסת גרסה חדשה).
ממלאים את טופס הפריסה לפי הצורך, אבל מוודאים שתיבת הסימון עם התווית 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 עם אחוז התנועה שרוצים להפנות לגרסה החדשה,
לדוגמה, משתמשים ב-PERCENT-NEW כדי להפנות 10% מהתנועה לגרסה הזו.
10 - PERCENT-FORMER עם אחוז התנועה שרוצים לשלוח לגרסה הקודמת
מחכים שהעדכון יסתיים: אמורה להופיע הודעה שהגרסה החדשה שאתם משיקים בהדרגה נפרסה ושהיא מציגה את ערך אחוז התנועה שבו השתמשתם.
Terraform
מוסיפים לקובץ .tf את הנתונים הבאים ומעדכנים בהדרגה את אחוז התנועה מהגרסה הקודמת לגרסה האחרונה.
חשוב לזכור שכל שינוי בתנועה ידרוש הפעלה נוספת של terraform apply.
מזינים terraform apply כדי להחיל את השינויים.
פיצול התנועה בין כמה גרסאות
כדי לפצל את התנועה בין שתי גרסאות או יותר:
המסוף
במסוף Google Cloud , נכנסים לדף Services של Cloud Run:
מחפשים את השירות ברשימת השירותים ולוחצים עליו.
לוחצים על ניהול תנועה.
מוצגת הגרסה החדשה שמוצגת כרגע. בטופס:
- מגדירים את אחוז הגרסה שמוצגת כרגע לחלוקה הרצויה.
- בוחרים אחת מהגרסאות הקודמות באמצעות הרשימה הנפתחת ומגדירים את אחוז החלוקה הרצוי.
- כדי לפצל את התנועה בין כמה גרסאות, לוחצים על הוספת גרסה, בוחרים את הגרסה הרצויה ומגדירים את אחוז הפיצול הרצוי.
- לוחצים על 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
מוסיפים לקובץ .tf את הנתונים הבאים:
מזינים terraform apply כדי להחיל את השינויים.
שליחת כל התנועה לגרסה האחרונה
כשפורסים גרסה חדשה, אפשר להגדיר שגרסה זו וכל הגרסאות העתידיות ישרתו 100% מהתנועה בהקדם האפשרי, וכך לבטל את כל חלוקת התנועה הקיימת:
המסוף
במסוף Google Cloud , נכנסים לדף Services של Cloud Run:
מאתרים את השירות ברשימת השירותים ולוחצים עליו.
לוחצים על Deploy New Revision (פריסת גרסה חדשה).
ממלאים את טופס הפריסה לפי הצורך, ומקפידים לסמן את התיבה 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
מוסיפים לקובץ .tf את הנתונים הבאים:
מזינים 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
Terraform
מוסיפים את הקוד הבא לקובץ .tf ומעדכנים בהדרגה את אחוז התנועה מהגרסה הישנה לגרסה החדשה ביותר עם התג החדש.
חשוב לזכור שכל שינוי בתנועה ידרוש הפעלה נוספת של terraform apply.
מזינים terraform apply כדי להחיל את השינויים.
הסרת תג
כדי להסיר תג מגרסה:
המסוף
במסוף Google Cloud , נכנסים לדף Services של Cloud Run:
בוחרים שירות מרשימת השירותים.
עוברים לקטע 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
מוסיפים לקובץ .tf את הנתונים הבאים:
מזינים terraform apply כדי להחיל את השינויים.
העברת תנועה לגרסה מתויגת
אחרי שמוודאים שהגרסה החדשה פועלת כמו שצריך, אפשר להתחיל להעביר אליה תנועה באמצעות מסוף Google Cloud , שורת הפקודה של gcloud, Terraform או קובץ YAML:
המסוף
במסוף Google Cloud , נכנסים לדף Services של Cloud Run:
מחפשים את השירות ברשימת השירותים ולוחצים עליו:
בוחרים את הגרסה המתויגת שאליה רוצים לשלוח תנועה:
לוחצים על ניהול תנועה.
מאתרים את שם הגרסה שתויגה: היא מופיעה ברשימה אבל מוגדר לה אחוז של 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 אחרי כל שינוי.