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

ב-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 אחראי ליצירת השירות, ומוגדר כברירת מחדל כחשבון השירות של Compute Engine.

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

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

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

המסוף

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

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

    כניסה ל-Cloud Run

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

  3. לוחצים על פריסת גרסה חדשה.

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

    כניסה ל-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

מוסיפים את הקוד הבא לקובץ 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 במסוף Google Cloud :

    כניסה ל-Cloud Run

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

  3. לוחצים על פריסת גרסה חדשה.

  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. פריסת מאגר התגים ב 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

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

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 במסוף Google Cloud :

    כניסה ל-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

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

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

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

המסוף

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

    כניסה ל-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 כדי להחיל אותו.

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