החזרות לגרסה קודמת, השקות הדרגתיות והעברת תעבורת נתונים

ב-Cloud Run אתם יכולים לציין אילו גרסאות יקבלו תנועה, וגם את אחוזי התנועה שגרסה מסוימת תקבל. התכונה הזו מאפשרת לחזור לגרסה קודמת, לפרוס גרסה בהדרגה ולפצל את התנועה בין כמה גרסאות. בדף הזה מוסבר איך משתמשים בתכונה הזו כדי לנהל את התנועה לגרסאות של Cloud Run.

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

חלוקת התנועה וזיקה לסשן (session affinity)

אם אתם מפצלים את התנועה בין כמה גרסאות כשהתכונה "זיקה לסשן" מופעלת, קראו את המאמר זיקה לסשן ופיצול תנועה כדי להבין איך הזיקה לסשן משפיעה על פיצול התנועה.

מחזור החיים של חלוקת התנועה

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

התפקידים הנדרשים

כדי לקבל את ההרשאות שנדרשות לניהול שירותים ועדכונים ב-Cloud Run, צריך לבקש מהאדמין להקצות לכם את תפקידי ה-IAM הבאים:

  • אם אתם מנהלים שירות שנפרס מקובץ אימג' של קונטיינר:
  • אם אתם מנהלים שירות שנפרס מקוד מקור:
    • 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 אחראי ליצירת ה-build של השירות, וברירת המחדל שלו היא חשבון השירות שמוגדר כברירת מחדל ב-Compute Engine.

רשימת ההרשאות והתפקידים ב-IAM שמשויכים ל-Cloud Run מופיעה במאמרים תפקידי IAM ב-Cloud Run והרשאות IAM ב-Cloud Run. אם שירות Cloud Run שלכם מתממשק עם ממשקי API שלCloud de Confiance , כמו ספריות הלקוח ב-Cloud, עיינו במדריך להגדרת זהות השירות. מידע נוסף על מתן תפקידים זמין במאמרים הרשאות פריסה וניהול גישה.

חזרה לגרסה קודמת

כדי לחזור לגרסה קודמת:

המסוף

  1. נכנסים לדף Services של Cloud Run במסוף Cloud de Confiance by S3NS :

    כניסה ל-Cloud Run

  2. מאתרים את השירות ברשימת השירותים ולוחצים עליו.

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

  4. ברשימת הגרסאות, לוחצים על סמל האליפסה משמאל לגרסה שרוצים לבטל:

  5. לוחצים על ניהול תנועה כדי להציג את האפשרויות לניהול תנועה.

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

  7. לוחצים על Save.

gcloud

משתמשים בפקודה הבאה:

gcloud run services update-traffic SERVICE --to-revisions REVISION=100

  • מחליפים את SERVICE בשם השירות.
  • מחליפים את REVISION בשם של הגרסה שרוצים לחזור אליה.

YAML

  1. אם אתם יוצרים שירות חדש, דלגו על השלב הזה. אם אתם מעדכנים שירות קיים, הורידו את הגדרת ה-YAML שלו:

    gcloud run services describe SERVICE --format export > service.yaml
  2. מתחת למאפיין spec, מאתרים את המאפיין traffic ומעדכנים אותו לערך הבא:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
    ...
      traffic:
      - revisionName: REVISION
        percent: 100
    

    החלפה

    • ‫REVISION בשם הגרסה שרוצים לחזור אליה.
  3. מחליפים את השירות בהגדרות החדשות באמצעות הפקודה הבאה:

    gcloud run services replace service.yaml
  4. מחכים שהעדכון יסתיים: אמורה להופיע הודעה שהגרסה שאתם מחזירים למצב קודם ממנה נפרסה ומטפלת ב-0 אחוזים מהתנועה.

Terraform

כדי ללמוד איך להחיל הגדרות ב-Terraform או להסיר אותן, ראו פקודות בסיסיות ב-Terraform.

מוסיפים את הקוד הבא למשאב google_cloud_run_v2_service בתצורה של Terraform:

resource "google_cloud_run_v2_service" "default" {
  name     = "my-service"
  location = "us-central1"

  deletion_protection = false # set to true to prevent destruction of the resource

  template {}

  traffic {
    percent = 100
    # This revision needs to already exist
    revision = "green"
    type     = "TRAFFIC_TARGET_ALLOCATION_TYPE_REVISION"

  }
}

השקה הדרגתית של גרסאות

כדי להשיק גרסה חדשה בהדרגה:

המסוף

  1. נכנסים לדף Services של Cloud Run במסוף Cloud de Confiance by S3NS :

    כניסה ל-Cloud Run

  2. בוחרים שירות ברשימת השירותים.

  3. מגדירים את השירות לפי הצורך.

  4. לוחצים על View diff and redeploy.

  5. מוודאים שהאפשרות הצגת הגרסה הזו באופן מיידי לא מסומנת.

  6. לוחצים על פריסת השינויים.

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

  8. ברשימת הגרסאות, לוחצים על סמל האליפסה משמאל לגרסה שאליה רוצים להחזיר את השינויים.

  9. לוחצים על ניהול התנועה כדי להציג את אפשרויות ניהול התנועה.

  10. לוחצים על פיצול התנועה בין כמה גרסאות.

  11. בוחרים את הגרסאות שרוצים לפצל ביניהן את התנועה ואת אחוז התנועה לכל גרסה.

  12. לוחצים על Save.

gcloud

כדי לפרוס שירות מקובץ אימג' של קונטיינר:

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

    • כדי לפרוס שירות מקוד מקור:

      gcloud run deploy --image IMAGE --no-traffic

      מחליפים את IMAGE בתמונה שפורסים.

    • כדי לפרוס שירות מקוד מקור:

      gcloud run deploy SERVICE --source . --no-traffic

      מחליפים את SERVICE בשם השירות.

  2. מציינים את אחוז התנועה שרוצים שהגרסה החדשה תטפל בה, לדוגמה, 5 אחוזים:

    gcloud run services update-traffic SERVICE --to-revisions REVISION=PERCENTAGE
    • מחליפים את SERVICE בשם השירות.
    • מחליפים את REVISION בשם הגרסה שרוצים להשיק בהדרגה. כדי לציין את הגרסה האחרונה, אפשר להשתמש ב-LATEST, לדוגמה, LATEST=5.
    • מחליפים את PERCENTAGE באחוז התנועה שרוצים לשלוח לגרסה החדשה, לדוגמה, 5 כדי לשלוח אליה 5% מהתנועה.
  3. אחרי שהביצועים של הגרסה המשופצת יהיו משביעי רצון, חוזרים על שלב update-traffic הקודם, אבל מגדילים את ערך האחוז לפי הצורך.

YAML

  1. אם אתם יוצרים שירות חדש, דלגו על השלב הזה. אם אתם מעדכנים שירות קיים, הורידו את הגדרת ה-YAML שלו:

    gcloud run services describe SERVICE --format export > service.yaml
  2. מבצעים את השינויים הרצויים בהגדרות של השירות, ומציינים את שם הגרסה שרוצים לתת לגרסה החדשה:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
     template:
       metadata:
         annotations:
         ...
         name: REVISION-NAME
    

    החלפה

    • ‫REVISION-NAME בשם שרוצים לתת לגרסה החדשה.
  3. מתחת למאפיין 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 באחוז התנועה שרוצים לשלוח לגרסה הישנה
  4. מחכים שהעדכון יסתיים: אמורה להופיע הודעה שהגרסה החדשה שמופצת בהדרגה נפרסה ומציגה את ערך אחוז התנועה שבו השתמשתם.

Terraform

מוסיפים לקובץ .tf את הנתונים הבאים ומעדכנים בהדרגה את אחוז התנועה מהגרסה הקודמת לגרסה האחרונה. חשוב לזכור שכל שינוי בתנועה ידרוש הפעלה נוספת של terraform apply.

resource "google_cloud_run_v2_service" "default" {
  name     = "my-service"
  location = "us-central1"

  deletion_protection = false # set to true to prevent destruction of the resource

  template {
    containers {
      # Image or image tag must be different from previous revision
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
  }

  # Define the traffic split for each revision
  # https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_v2_service#traffic
  traffic {
    percent = 100
    # This revision needs to already exist
    revision = "green"
    type     = "TRAFFIC_TARGET_ALLOCATION_TYPE_REVISION"
  }

  traffic {
    # Deploy new revision with 0% traffic
    percent = 0
    type    = "TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST"
  }
}

מזינים terraform apply כדי להחיל את השינויים.

פיצול תנועה בין כמה גרסאות

כדי לפצל את התנועה בין שתי גרסאות או יותר:

המסוף

  1. נכנסים לדף Services של Cloud Run במסוף Cloud de Confiance by S3NS :

    כניסה ל-Cloud Run

  2. מאתרים את השירות ברשימת השירותים ולוחצים עליו.

  3. לוחצים על הכרטיסייה היסטוריית גרסאות.

  4. לוחצים על ניהול התנועה.

  5. הגרסה החדשה שמוצגת כרגע מופיעה ברשימה. בטופס:

    1. מגדירים את אחוז הגרסה שמוצגת כרגע לפי הפיצול שנבחר.
    2. בוחרים אחת מהגרסאות הקודמות מהרשימה ומגדירים אותה לחלוקת האחוזים שנבחרה.
    3. כדי לפצל את התנועה בין כמה גרסאות, לוחצים על הוספת גרסה, בוחרים את הגרסה ומגדירים את אחוז התנועה לפי הפיצול הרצוי.
    4. לוחצים על 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

  1. אם אתם יוצרים שירות חדש, דלגו על השלב הזה. אם אתם מעדכנים שירות קיים, מורידים את הגדרות ה-YAML שלו:

    gcloud run services describe SERVICE --format export > service.yaml
  2. מתחת למאפיין 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 עם אחוז השינוי המתאים.
  3. מחליפים את השירות בהגדרות החדשות באמצעות הפקודה הבאה:

    gcloud run services replace service.yaml
  4. מחכים שהעדכון יסתיים: אמורה להופיע הודעה שהגרסה החדשה שאתם משיקים בהדרגה נפרסה ומטפלת ב-5 אחוזים (או כל ערך הדרגתי אחר שהשתמשתם בו) מהתנועה.

Terraform

מוסיפים את הקוד הבא לקובץ Terraform:

resource "google_cloud_run_v2_service" "default" {
  name     = "my-service"
  location = "us-central1"

  deletion_protection = false # set to true to prevent destruction of the resource

  template {
    containers {
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    revision = "green"
  }

  # Define the traffic split for each revision
  # https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_v2_service#traffic
  traffic {
    percent  = 25
    revision = "green"
    type     = "TRAFFIC_TARGET_ALLOCATION_TYPE_REVISION"
  }

  traffic {
    percent = 75
    # This revision needs to already exist
    revision = "blue"
    type     = "TRAFFIC_TARGET_ALLOCATION_TYPE_REVISION"
  }
}

מזינים את הפקודה terraform apply כדי להחיל את השינויים.

שליחת כל התנועה לגרסה האחרונה

כשפורסים גרסה חדשה, אפשר להגדיר שהגרסה הזו וכל הגרסאות העתידיות ישרתו 100% מתעבורת הנתונים בהקדם האפשרי, ולבטל כל חלוקה קיימת של תעבורת הנתונים:

המסוף

  1. נכנסים לדף Services של Cloud Run במסוף Cloud de Confiance by S3NS :

    כניסה ל-Cloud Run

  2. מאתרים את השירות ברשימת השירותים ולוחצים עליו.

  3. מגדירים את השירות ולוחצים על View diff and redeploy.

  4. מוודאים שהתיבה Serve this revision immediately מסומנת. הפעולה הזו תבטל כל חלוקת תנועה קיימת, והגרסה החדשה תטפל ב-100% מהתנועה.

  5. לוחצים על פריסת השינויים.

gcloud

כדי לשלוח את כל התנועה לגרסה שנפרסה לאחרונה:

gcloud run services update-traffic SERVICE --to-latest

מחליפים את SERVICE בשם השירות.

YAML

  1. אם אתם יוצרים שירות חדש, דלגו על השלב הזה. אם אתם מעדכנים שירות קיים, הורידו את הגדרת ה-YAML שלו:

    gcloud run services describe SERVICE --format export > service.yaml
  2. מתחת למאפיין spec, מאתרים את המאפיין traffic ומעדכנים אותו לערך הבא:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
    ...
      traffic:
      - latestRevision: true
        percent: 100
    
  3. מחליפים את השירות בהגדרות החדשות שלו באמצעות הפקודה הבאה:

    gcloud run services replace service.yaml
  4. מחכים שהעדכון יושלם: אמורה להופיע הודעה שהגרסה (העדכנית) נפרסה ושהיא מציגה 100 אחוז מהתנועה.

Terraform

מוסיפים את הקוד הבא לקובץ Terraform:

resource "google_cloud_run_v2_service" "default" {
  name     = "my-service"
  location = "us-central1"

  deletion_protection = false # set to true to prevent destruction of the resource

  template {}

  traffic {
    percent = 100
    type    = "TRAFFIC_TARGET_ALLOCATION_TYPE_LATEST"
  }
}

מזינים terraform apply כדי להחיל את השינויים.

שימוש בתגים לבדיקה, להעברת תנועה ולחזרה למצב קודם

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

תרחיש שימוש נפוץ בתכונה הזו הוא בדיקה של גרסה חדשה של שירות לפני שהיא מתחילה לשרת תנועה. זהו רצף הפעולות האופייני:

  1. הרצת בדיקות שילוב בקונטיינר במהלך הפיתוח.
  2. פורסים את הקונטיינר בפרויקט ב- Cloud de Confiance by S3NS שמשמש רק ל-staging, בלי תנועה, ובודקים אותו מול גרסה מתויגת.
  3. פורסים אותו בסביבת הייצור בלי להציג תנועה, ובודקים אותו מול גרסה מתויגת בסביבת הייצור.
  4. מעבירים את התנועה לגרסה המתויגת.

פריסת גרסה חדשה עם תגים

כדי לפרוס גרסה חדשה של שירות קיים בסביבת ייצור:

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.s3nsrun.fr

YAML

  1. אם אתם יוצרים שירות חדש, דלגו על השלב הזה. אם אתם מעדכנים שירות קיים, מורידים את הגדרות ה-YAML שלו:

    gcloud run services describe SERVICE --format export > service.yaml
  2. מתחת למאפיין 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 בשם של גרסה קיימת שרוצים להפנות אליה את כל התנועה.
  3. יוצרים או מעדכנים את השירות באמצעות הפקודה הבאה:

    gcloud run services replace service.yaml

    כברירת מחדל, הפקודה gcloud run services replace משתמשת בקובץ service.yaml אם הוא קיים.

Terraform

מוסיפים את הקוד הבא לקובץ Terraform ומעדכנים בהדרגה את אחוז התנועה מהגרסה הישנה לגרסה החדשה ביותר באמצעות התג החדש. חשוב לזכור שכל שינוי בתנועה ידרוש הפעלה של terraform apply נוסף.

resource "google_cloud_run_v2_service" "default" {
  name     = "my-service"
  location = "us-central1"

  deletion_protection = false # set to "true" in production

  template {
    containers {
      # image or tag must be different from previous revision
      image = "us-docker.pkg.dev/cloudrun/container/hello"
    }
    revision = "blue"
  }

  # Define the traffic split for each revision
  # https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_v2_service#traffic
  traffic {
    percent = 100
    # This revision needs to already exist
    revision = "green"
    type     = "TRAFFIC_TARGET_ALLOCATION_TYPE_REVISION"
  }

  traffic {
    # Deploy new revision with 0% traffic
    percent  = 0
    revision = "blue"
    tag      = "tag-name"
    type     = "TRAFFIC_TARGET_ALLOCATION_TYPE_REVISION"
  }
}

מזינים terraform apply כדי להחיל את השינויים.

הסרת תג

כדי להסיר תג מגרסה:

המסוף

  1. נכנסים לדף Services של Cloud Run במסוף Cloud de Confiance by S3NS :

    כניסה ל-Cloud Run

  2. בוחרים שירות ברשימת השירותים.

  3. עוברים לכרטיסייה היסטוריית גרסאות.

  4. לוחצים על הסמל ניהול תגי גרסה לצד התג שרוצים למחוק.

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

  6. לוחצים על Save.

gcloud

כדי להסיר תג של שינוי:

gcloud run services update-traffic SERVICE --remove-tags TAG_NAME

החלפה

  • ‫TAG_NAME בשם התג שאליו מעבירים את התנועה
  • SERVICE בשם של השירות שממנו רוצים להסיר את התג.

YAML

  1. אם אתם יוצרים שירות חדש, דלגו על השלב הזה. אם אתם מעדכנים שירות קיים, מורידים את הגדרות ה-YAML שלו:

    gcloud run services describe SERVICE --format export > service.yaml
  2. מבצעים את השינויים הרצויים בהגדרות של השירות.

  3. מתחת למאפיין spec, מאתרים את המאפיין tag של הגרסה המתויגת ומסירים אותו:

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    spec:
    ...
      traffic:
      - revisionName: REVISION
        tag: TAG_NAME
        percent: PERCENT-NEW
    
  4. מחליפים את השירות בהגדרות החדשות שלו באמצעות הפקודה הבאה:

    gcloud run services replace service.yaml

Terraform

מוסיפים את הקוד הבא לקובץ Terraform:

resource "google_cloud_run_v2_service" "default" {
  name     = "my-service"
  location = "us-central1"

  deletion_protection = false # set to true to prevent destruction of the resource

  template {}

  # Define the traffic split for each revision
  # https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_v2_service#traffic
  traffic {
    percent = 100
    # This revision needs to already exist
    revision = "green"
    type     = "TRAFFIC_TARGET_ALLOCATION_TYPE_REVISION"
  }

  traffic {
    # No tags for this revision
    # Keep revision at 0% traffic
    percent = 0
    # This revision needs to already exist
    revision = "blue"
    type     = "TRAFFIC_TARGET_ALLOCATION_TYPE_REVISION"
  }
}

מזינים terraform apply כדי להחיל את השינויים.

העברת תנועה לגרסה מתויגת

אחרי שמוודאים שהגרסה החדשה פועלת כמו שצריך, אפשר להתחיל להעביר אליה תנועה באמצעות מסוף Cloud de Confiance , שורת הפקודה של Google Cloud CLI,‏ Terraform או קובץ YAML:

המסוף

  1. נכנסים לדף Services של Cloud Run במסוף Cloud de Confiance by S3NS :

    כניסה ל-Cloud Run

  2. מאתרים את השירות ברשימת השירותים ולוחצים עליו.

  3. בוחרים את הגרסה המתויגת שאליה רוצים לשלוח תנועה.

  4. לוחצים על ניהול התנועה.

  5. לוחצים על Send all traffic to one revision אם רוצים שהגרסה תקבל 100% מהתנועה, או על Split traffic across multiple revisions כדי לחלק את התנועה בין כמה גרסאות.

  6. בוחרים את הגרסאות מהתפריט ומציינים את אחוז התנועה, אם רלוונטי.

  7. לוחצים על Save. אין צורך לפרוס מחדש כדי לשנות את אחוזי התנועה.

gcloud

כדי להעביר תנועה לתג גרסה ספציפי:

gcloud run services update-traffic myservice --to-tags TAG_NAME=TRAFFIC_PERCENT

החלפה

  • ‫TAG_NAME בשם התג שאליו אתם מעבירים את התנועה.
  • TRAFFIC_PERCENT באחוז התנועה שרוצים שהגרסה המתויגת תשרת, לדוגמה 1.

YAML

  1. אם אתם יוצרים שירות חדש, דלגו על השלב הזה. אם אתם מעדכנים שירות קיים, הורידו את הגדרת ה-YAML שלו:

    gcloud run services describe SERVICE --format export > service.yaml
  2. מבצעים את השינויים הרצויים בהגדרות השירות.

  3. מתחת למאפיין 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 באחוז התנועה שרוצים לשלוח לגרסה הישנה
  4. מחליפים את השירות בהגדרות החדשות באמצעות הפקודה הבאה:

    gcloud run services replace service.yaml
  5. מחכים שהעדכון יסתיים: אמורה להופיע הודעה שהגרסה החדשה שמופצת בהדרגה נפרסה ומציגה את ערך אחוז התנועה שבו השתמשתם.

Terraform

מוסיפים לקובץ .tf את הנתונים הבאים:

resource "google_cloud_run_v2_service" "default" {
  name     = "my-service"
  location = "us-central1"

  deletion_protection = false # set to true to prevent destruction of the resource

  template {}

  # Define the traffic split for each revision
  # https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/cloud_run_v2_service#traffic
  traffic {
    # Update revision to 50% traffic
    percent = 50
    # This revision needs to already exist
    revision = "green"
    type     = "TRAFFIC_TARGET_ALLOCATION_TYPE_REVISION"
  }

  traffic {
    # Update tag to 50% traffic
    percent = 50
    # This tag needs to already exist
    tag = "tag-name"
  }
}

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

כדי להחיל את השינויים, מזינים terraform apply אחרי כל שינוי.

המאמרים הבאים