שימוש באסטרטגיית פריסה של גרסה ראשונית (canary)

במאמר הזה מוסבר איך להגדיר אסטרטגיית פריסה של גרסה ראשונית (canary) ואיך להשתמש בה.

מהי פריסה של גרסה ראשונית (canary)?

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

סוגי היעדים הנתמכים

פריסה של גרסה ראשונית (canary) ב-Cloud Deploy תומכת בכל סוגי היעדים, כולל:

‫Canary פועל גם עם מספר יעדים.

למה כדאי להשתמש באסטרטגיית פריסה של גרסה ראשונית (canary)?

פריסה של גרסה ראשונית (canary) מאפשרת לכם להפיץ את האפליקציה באופן חלקי. כך תוכלו לוודא שהגרסה החדשה של האפליקציה אמינה לפני שתציגו אותה לכל המשתמשים.

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

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

סוגים של קנרי

‫Cloud Deploy מאפשר לכם להגדיר את סוגי הפריסה הבאים של קנרית:

  • אוטומטי

    בפריסת קנרית אוטומטית (ב-Service Networking, ב-Gateway API או ב-Cloud Run), מגדירים ב-Cloud Deploy סדרה של אחוזים שמבטאים פריסה הדרגתית. ‫Cloud Deploy מבצע פעולות נוספות בשמכם, כדי לחלק את אחוזי התנועה בין הגרסה הישנה לגרסה החדשה.

  • אוטומטי בהתאמה אישית

    בשביל קנרי אוטומטי בהתאמה אישית (לרשת שירותים, ל-Gateway API או ל-Cloud Run), אפשר לספק את הפרטים הבאים:

    • שם השלב
    • יעד האחוזים
    • פרופיל Skaffold לשימוש בשלב
    • האם לכלול עבודת אימות
    • האם לכלול משימה לפני הפריסה או אחרי הפריסה, או את שתיהן

    אבל לא צריך לספק מידע על איזון תעבורה. Cloud Deploy יוצר את המשאבים הנדרשים (לרשת שירותים, ל-Gateway API או ל-Cloud Run).

  • בהתאמה אישית

    בקנרי מותאם אישית, אתם מגדירים כל שלב של קנרי בנפרד, כולל:

    • שם השלב
    • יעד האחוזים
    • פרופיל Skaffold לשימוש בשלב
    • האם לכלול עבודת אימות
    • האם לכלול משימה לפני הפריסה או אחרי הפריסה, או את שתיהן

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

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

שלבים בפריסת קנרית

כשיוצרים גרסה להפצה מדורגת של קנרי, ההפצה נוצרת עם שלב לכל תוספת של קנרי, בנוסף לשלב stable הסופי של 100%.

לדוגמה, אם מגדירים קנרי ל-25%, ל-50% ול-75%, הפריסה תכלול את השלבים הבאים:

  • canary-25
  • canary-50
  • canary-75
  • stable

מידע נוסף על שלבי ההשקה, על משימות ועל הרצות של משימות זמין במאמר ניהול השקות.

שימוש בפריסה מקבילה עם אסטרטגיית פריסה של גרסה ראשונית (canary)

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

מה ההבדל בין קנרי מקביל לבין קנרי עם יעד יחיד

  • בדומה לפריסה של גרסה ראשונית (canary) עם יעד יחיד, אם אתם פורסים ליעדי GKE, אתם צריכים הגדרת פריסה של Kubernetes והגדרת שירות של Kubernetes במניפסט.

  • בדומה לפריסה של גרסה ראשונית (canary) עם יעד יחיד, ההגדרה של צינור העברת התוכן (pipeline) חייבת לכלול קטע strategy.canary בתוך הגדרת השלב עבור השלב הרלוונטי.

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

  • כשיוצרים גרסה, נוצר פריסת בקר ופריסות צאצא.

    לשני סוגי ההשקה – בקר וצאצא – יש שלבים נפרדים לכל אחוז הקנרי שהוגדר, ושלב stable לקנרי 100%.

  • אי אפשר להקדים את ההשקה לילדים.

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

  • אי אפשר לנסות שוב להפעיל משימות שנכשלו בהפצה של בקר.

    אפשר לנסות שוב להפעיל משימה רק בהשקות משניות.

  • אי אפשר להתעלם ממשימות שנכשלו בהשקת הבקר.

    אפשר להתעלם ממשימות שנכשלו רק בהשקות של צאצאים.

  • אפשר לבטל פריסה של בקר, אבל אי אפשר לבטל פריסות של בקרים משניים.

  • אפשר להפסיק הרצות של משימות רק בהשקה של צאצא, ולא בהשקה של בקר.

מה עושים אם השקת גרסה מקבילה נכשלת ב-Canary

אם השקת ילד נכשלת, השקת בקר יכולה לעבור למצבים שונים, בהתאם למה שקורה עם השקות הילד:

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

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

    אם זהו שלב stable, השקת בקר המשחקים היא FAILED.

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

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

שימוש בניתוח פריסה עם שיטת פריסה של גרסה ראשונית (canary)

באסטרטגיית פריסה של גרסה ראשונית (canary), אפשר להשתמש בניתוח פריסה עם חלק מהשלבים או עם כל השלבים (חוץ מstable) כדי לקבוע מתי להעביר את ההשקה לשלב הבא. אפשר גם לשלב את הניתוח עם אוטומציה של advanceRolloutRule כדי שההשקה תתקדם באופן אוטומטי.

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

בניתוח הזה אפשר להשתמש במדדים מ-Google Cloud Observability או מספק המדדים שתבחרו.

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