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

Knative serving מאפשר לכם לציין אילו גרסאות יקבלו תעבורת נתונים, ומה יהיה אחוז תעבורת הנתונים שיתקבל בכל גרסה. התכונה הזו מאפשרת לחזור לגרסה קודמת, להשיק גרסה בהדרגה (שנקראת גם פריסת כחול-ירוק (blue-green deployment)) ולפצל את התנועה בין כמה גרסאות. בדף הזה מוסבר איך להשתמש בתכונה הזו כדי לנהל את התנועה לגרסאות של Knative Serving.

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

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

המסוף

  1. נכנסים אל Knative serving במסוף Google Cloud :

    מעבר אל Knative serving

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

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

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

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

    1. בתפריט הנפתח, בוחרים את הגרסה הקודמת שאליה רוצים לחזור.
    2. מגדירים את אחוז התנועה של הגרסה הקודמת ל-100.
    3. מגדירים את אחוז החשיפות של הגרסה שמוצגת כרגע ל-0.
    4. לוחצים על Save.

שורת הפקודה

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

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

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

YAML

אפשר להוריד את ההגדרה של שירות קיים לקובץ YAML באמצעות הפקודה gcloud run services describe והדגל --format=export. אחר כך תוכלו לשנות את קובץ ה-YAML ולפרוס את השינויים האלה באמצעות הפקודה gcloud run services replace. חשוב לוודא שמשנים רק את המאפיינים שצוינו.

  1. מורידים את ההגדרה של השירות לקובץ בשם service.yaml בסביבת העבודה המקומית:

    gcloud run services describe SERVICE --format export > service.yaml

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

  2. בקובץ המקומי, מעדכנים את המאפיין traffic שנמצא בקטע spec:

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

    החלפה

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

    gcloud run services replace service.yaml

השקה הדרגתית של שינוי

כדי להשיק גרסה חדשה בהדרגה (פריסת כחול-ירוק):

המסוף

  1. נכנסים אל Knative serving במסוף Google Cloud :

    מעבר אל Knative serving

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

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

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

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

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

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

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

שורת הפקודה

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

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

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

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

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

YAML

אפשר להוריד את ההגדרה של שירות קיים לקובץ YAML באמצעות הפקודה gcloud run services describe והדגל --format=export. אחר כך תוכלו לשנות את קובץ ה-YAML ולפרוס את השינויים האלה באמצעות הפקודה gcloud run services replace. חשוב לוודא שמשנים רק את המאפיינים שצוינו.

  1. מורידים את ההגדרה של השירות לקובץ בשם service.yaml בסביבת העבודה המקומית:

    gcloud run services describe SERVICE --format export > service.yaml

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

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

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
     name: SERVICE
    template:
      metadata:
        annotations:
          ...
        name: REVISION-NAME
     ```
    
    Replace
    
    • 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 עם אחוז התנועה שרוצים לשלוח לגרסה הקודמת

חלוקת התנועה בין כמה גרסאות

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

המסוף

  1. נכנסים אל Knative serving במסוף Google Cloud :

    מעבר אל Knative serving

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

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

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

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

שורת הפקודה

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

gcloud run services update-traffic SERVICE --to-revisions LIST

מחליפים את:

  • SERVICE בשם של השירות.
  • LIST עם רשימה של גרסאות שמופרדות בפסיקים שרוצים להפנות אליהן תנועה, ואחוז התנועה המתאים לכל גרסה, כך שהסכום הכולל יהיה 100 אחוז:
    REVISION1=PERCENTAGE1,REVISION2=PERCENTAGE2,REVISIONn=PERCENTAGEn
    לדוגמה, hello2-00005-red=25,hello2-00001-bod=25,hello2-00002-nan=50.

YAML

אפשר להוריד את ההגדרה של שירות קיים לקובץ YAML באמצעות הפקודה gcloud run services describe והדגל --format=export. אחר כך תוכלו לשנות את קובץ ה-YAML ולפרוס את השינויים האלה באמצעות הפקודה gcloud run services replace. חשוב לוודא שמשנים רק את המאפיינים שצוינו.

  1. מורידים את ההגדרה של השירות לקובץ בשם service.yaml בסביבת העבודה המקומית:

    gcloud run services describe SERVICE --format export > service.yaml

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

  2. בקובץ המקומי, מעדכנים את מאפיין 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

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

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

המסוף

  1. נכנסים אל Knative serving במסוף Google Cloud :

    מעבר אל Knative serving

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

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

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

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

שורת הפקודה

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

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

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

YAML

אפשר להוריד את ההגדרה של שירות קיים לקובץ YAML באמצעות הפקודה gcloud run services describe והדגל --format=export. אחר כך תוכלו לשנות את קובץ ה-YAML ולפרוס את השינויים האלה באמצעות הפקודה gcloud run services replace. חשוב לוודא שמשנים רק את המאפיינים שצוינו.

  1. מורידים את ההגדרה של השירות לקובץ בשם service.yaml בסביבת העבודה המקומית:

    gcloud run services describe SERVICE --format export > service.yaml

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

  2. בקובץ המקומי, מעדכנים את המאפיין traffic שנמצא בקטע spec:

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

    gcloud run services replace service.yaml

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

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

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

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

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

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

gcloud run deploy myservice --image IMAGE_URL  --no-traffic --tag TAG_NAME

מחליפים את:

  • IMAGE_URL עם כתובת ה-URL של התמונה
  • TAG_NAME בשם התג באותיות קטנות

התג מאפשר לכם לבדוק ישירות את הגרסה החדשה בכתובת URL ספציפית, בלי להפנות אליה תנועה. כתובת ה-URL לבדיקה מתחילה בשם התג שסיפקתם: http://{TAG_NAME}---{SERVICE_NAME}.{NAMESPACE}.kuberun.{EXTERNAL_IP}.nip.io

לדוגמה, אם השתמשתם בשם התג green בשירות myservice, תבדקו את הגרסה המתויגת בכתובת ה-URL: https://green---myservice.default.kuberun.11.111.11.111.nip.io

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

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

המסוף

  1. נכנסים אל Knative serving במסוף Google Cloud :

    מעבר אל Knative serving

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

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

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

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

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

שורת הפקודה

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

gcloud run deploy update-traffic myservice --tag TAG_NAME=TRAFFIC_PERCENT

החלפה

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

YAML

אפשר להוריד את ההגדרה של שירות קיים לקובץ YAML באמצעות הפקודה gcloud run services describe והדגל --format=export. אחר כך תוכלו לשנות את קובץ ה-YAML ולפרוס את השינויים האלה באמצעות הפקודה gcloud run services replace. חשוב לוודא שמשנים רק את המאפיינים שצוינו.

  1. מורידים את ההגדרה של השירות לקובץ בשם service.yaml בסביבת העבודה המקומית:

    gcloud run services describe SERVICE --format export > service.yaml

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

  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