פריסות של גרסה ראשונית (canary) ב-Cloud Run

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

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

איך פועל פריסת קנרית ב-Cloud Run

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

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

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

בודקים שיש לכם את ההרשאות הנדרשות

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

  • clouddeploy.rollouts.advance
  • clouddeploy.rollouts.ignoreJob
  • clouddeploy.rollouts.cancel
  • clouddeploy.rollouts.retryJob
  • clouddeploy.jobRuns.get
  • clouddeploy.jobRuns.list
  • clouddeploy.jobRuns.terminate

במאמר תפקידים והרשאות ב-IAM מוסבר אילו תפקידים זמינים כוללים את ההרשאות האלה.

הכנת skaffold.yaml

קובץ ה-skaffold.yaml מגדיר איך הגדרות השירות של Cloud Run מוצגות ונפרסות. כדי לבצע פריסה של גרסה ראשונית(canary) ב-Cloud Run, צריך לוודא שהיא מצביעה נכון על קובצי הגדרת השירות ומגדירה את כל ארטיפקטי הבנייה הנדרשים (כמו קובצי אימג' של קונטיינרים). לא נדרשת הגדרה מיוחדת ל-Canary בתוך skaffold.yaml, מעבר למה שנדרש לפריסה רגילה. אפשר להשתמש בפרופילים של Skaffold כדי לנהל וריאציות שונות של הגדרות שירות עבור שלבים מותאמים אישית של בדיקות קנריות.

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

קובץ ההגדרה הרגיל של שירות Cloud Run מספיק, אבל בלי פסקה traffic. ‫Cloud Deploy מנהל את פיצול התנועה בין הגרסה האחרונה שעברה בהצלחה לבין הגרסה החדשה.

שירות

דוגמה service.yaml (ללא פסקה traffic):

 apiVersion: serving.knative.dev/v1
 kind: Service
 metadata:
   name: my-cloudrun-service
 spec:
   template:
     spec:
       containers:
       - image: gcr.io/my-project/my-cloudrun-app
         ports:
         - containerPort: 8080

מאגר עובדים

דוגמה worker-pool.yaml (ללא פסקה instanceSplit):

 apiVersion: run.googleapis.com/v1
 kind: WorkerPool
 metadata:
   name: my-wp
   annotations:
     run.googleapis.com/launch-stage: BETA
 spec:
   template:
     spec:
       containers:
       - image: us-docker.pkg.dev/cloudrun/container/worker-pool

הגדרת קנרי אוטומטי

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

serialPipeline:
  stages:
  - targetId: prod
    profiles: []
    strategy:
      canary:
        runtimeConfig:
          cloudRun:
            automaticTrafficControl: true
        canaryDeployment:
          percentages: [PERCENTAGES]
          verify:
            tasks: [TASKS]
          predeploy:
            tasks: [TASKS]
          postdeploy:
            tasks: [TASKS]

בהגדרה הזו:

  • PERCENTAGES היא רשימה מופרדת בפסיקים של ערכי אחוזים שמייצגים את העלייה בשיעור התנועה לגרסת הקנרית. לדוגמה: PERCENTAGES.[25, 50, 75] הערה: ההנחה היא שפריסת הקנרי היא בשיעור של 100%, ולכן היא לא נכללת ב-100, והיא מטופלת בשלב stable.

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

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

  • כדי להפעיל postdeploy hooks, צריך להגדיר את ה-stanza‏ postdeploy. אם תעשו את זה, משימה postdeploy תתווסף לשלב stable.

  • כל נכס tasks בקטע verify, predeploy ו-postdeploy מורכב ממשימה אחת או יותר שמופעלות כחלק מהעבודה הזו. כל המשימות שהוגדרו יפעלו ברצף לפי הסדר שבו הן הוגדרו.

הגדרת קנרי אוטומטי בהתאמה אישית

השילוב הזה מאפשר להגדיר שלבים מותאמים אישית (שמות, אחוזים, פרופילים, אימות, hooks) עם ניהול התנועה האוטומטי של Cloud Deploy ל-Cloud Run. אתם מגדירים את השלבים, אבל Cloud Deploy מורה ל-Cloud Run להעביר את התנועה על סמך האחוזים.

כדי להגדיר את זה, צריך לכלול את ההגדרה runtimeConfig.cloudRun.automaticTrafficControl: true ואת הקטע customCanaryDeployment (שמגדיר את phaseConfigs) בתוך הבלוק strategy.canary. ‫Cloud Deploy ישתמש בפרופילים שצוינו של Skaffold כדי לעבד את הגדרת השירות (שעדיין לא אמורה לכלול קטע traffic), אבל ינהל את התעבורה באופן אוטומטי בהתאם לאחוזים של השלב.

serialPipeline:
  stages:
  - targetId: cloudrun-prod
    profiles: []
    strategy:
      canary:
        # Include runtimeConfig for automatic traffic management
        runtimeConfig:
          cloudRun:
            automaticTrafficControl: true
        # Include customCanaryDeployment for phase customization
        customCanaryDeployment:
          phaseConfigs:
          - phaseId: "warmup-cr"
            percentage: 10
            profiles: ["base-config"] # Profile rendering service def (no traffic stanza)
            verify:
              tasks: [TASKS]
          - phaseId: "scaling-cr"
            percentage: 50
            profiles: ["base-config"] # Can use the same profile
            verify:
              tasks: [TASKS]
          - phaseId: "stable"
            percentage: 100
            profiles: ["base-config"]
            verify:
              tasks: [TASKS]

הפעלת Canary ב-Cloud Run

  1. רישום של צינור עיבוד נתונים ויעדים: מחילים את קובצי ההגדרות של צינור העברת הנתונים והיעד ב-Cloud Run.

    
    gcloud deploy apply --file=delivery-pipeline.yaml --region=REGION
    gcloud deploy apply --file=cloudrun-targets.yaml --region=REGION
    

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

  2. יצירת גרסת הפצה: מתחילים את הפריסה ומזינים את שם התמונה.

    
    gcloud deploy releases create RELEASE_NAME \
                                    --delivery-pipeline=PIPELINE_NAME \
                                    --region=REGION
    

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

  3. קידום גרסת הגישוש:

    ‫CLI של gcloud

    gcloud deploy rollouts advance ROLLOUT_NAME \
                                --release=RELEASE_NAME \
                                --delivery-pipeline=PIPELINE_NAME \
                                --region=REGION
    

    כאשר:

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

    RELEASE_NAME הוא שם הגרסה שההשקה הזו היא חלק ממנה.

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

    REGION הוא שם האזור שבו נוצרה הגרסה, למשל us-central1. זהו שדה חובה.

    מידע נוסף על הפקודה gcloud deploy rollouts advance זמין במאמר בנושא Google Cloud SDK.

    מסוף Google Cloud

    1. פותחים את הדף Delivery pipelines.

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

      בדף הפרטים של צינור ההפצה מוצג ייצוג גרפי של ההתקדמות בצינור ההפצה.

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

      יוצג דף הפרטים של ההשקה.

      פרטי ההשקה במסוף Google Cloud

      שימו לב שבדוגמה הזו, ההשקה כוללת שלב canary-50 ושלב stable. יכול להיות שההשקה שלכם תכלול יותר שלבים או שלבים שונים.

    4. לוחצים על הפצה מתקדמת.

      ההשקה מתקדמת לשלב הבא.

שלבים שדילגו עליהם

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

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