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

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

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

חלוקת תנועה וזיקה לסשן

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

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

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

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

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

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

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

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

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

המסוף

  1. במסוף Google Cloud , נכנסים לדף Services של Cloud Run:

    כניסה ל-Cloud Run

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

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

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

    manage-traffic

  5. לוחצים על ניהול תנועה כדי להציג את הטופס לניהול תנועה:

    1. בתפריט הנפתח, בוחרים את הגרסה הקודמת שאליה רוצים לחזור.
    2. מגדירים את אחוז התנועה של הגרסה הקודמת ל-100.
    3. מגדירים את אחוז החשיפות של הגרסה שמוצגת כרגע ל-0.
    4. לוחצים על 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. במסוף Google Cloud , נכנסים לדף Services של Cloud Run:

    כניסה ל-Cloud Run

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

  3. לוחצים על Deploy New Revision (פריסת גרסה חדשה).

  4. ממלאים את טופס הפריסה לפי הצורך, אבל מוודאים שתיבת הסימון עם התווית Serve this revision immediately (הצגת הגרסה הזו באופן מיידי) לא מסומנת.

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

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

  7. הגרסה החדשה מופיעה ברשימה, אבל מוגדר לה אחוז של 0: כרגע היא לא מציגה מודעות לאף גולש. בטופס:

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

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 עם אחוז התנועה שרוצים להפנות לגרסה החדשה, לדוגמה, משתמשים ב-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. במסוף Google Cloud , נכנסים לדף Services של Cloud Run:

    כניסה ל-Cloud Run

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

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

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

    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

מוסיפים לקובץ .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 {
    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. במסוף Google Cloud , נכנסים לדף Services של Cloud Run:

    כניסה ל-Cloud Run

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

  3. לוחצים על Deploy New Revision (פריסת גרסה חדשה).

  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

מוסיפים לקובץ .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 {}

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

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

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

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

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

  1. הרצת בדיקות שילוב בקונטיינר במהלך הפיתוח.
  2. פורסים את מאגר התגים ב Google Cloud פרויקט שמשמש רק לבדיקות, לא להצגת מודעות, ובודקים אותו מול גרסה מתוקנת עם תגים.
  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.run.app

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

Terraform

מוסיפים את הקוד הבא לקובץ .tf ומעדכנים בהדרגה את אחוז התנועה מהגרסה הישנה לגרסה החדשה ביותר עם התג החדש. חשוב לזכור שכל שינוי בתנועה ידרוש הפעלה נוספת של 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. במסוף Google Cloud , נכנסים לדף Services של Cloud Run:

    כניסה ל-Cloud Run

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

  3. עוברים לקטע Revisions (גרסאות) בשירות הרצוי ובוחרים את הגרסה שרוצים להסיר ממנה את התג הקיים.

  4. מעבירים את מצביע העכבר מעל העמודה Revision URLs (tags) (כתובות URL של גרסאות (תגים)) ולוחצים על סמל העיפרון:

    tag-delete

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

  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

מוסיפים לקובץ .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 {
    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 כדי להחיל את השינויים.

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

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

המסוף

  1. במסוף Google Cloud , נכנסים לדף Services של Cloud Run:

    כניסה ל-Cloud Run

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

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

    manage-traffic

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

  5. מאתרים את שם הגרסה שתויגה: היא מופיעה ברשימה אבל מוגדר לה אחוז של 0: כרגע לא מופנית אליה תנועה. בטופס ניהול תנועה*:

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

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 אחרי כל שינוי.

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