תזמון ניסוי

בדף הזה מוסבר איך לתזמן ניסויים בבדיקת הזרקת תקלות ואיך להשתמש בשירותי תזמון חיצוניים כדי להפוך את בדיקת החוסן לאוטומטית.

תזמון ניסויים מאפשר לכם להפוך את תהליכי הבדיקה לאוטומטיים ולהפעיל ניסויים בתקופות שבהן ההשפעה על המשתמשים מינימלית, למשל:

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

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

איך פועלים ניסויים מתוזמנים

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

כדי לתזמן ניסוי, מגדירים את הכלי החיצוני לתזמון כך שיבצע קריאה ל-API של בדיקת הזרקת תקלות או יריץ פקודה gcloud בזמן ספציפי. כדי לתמוך בשילוב הזה, בדיקה של הזרקת תקלות מספקת את הפרמטר startOnCreateEnabled. אם מגדירים את הפרמטר הזה לערך true, המערכת מתחילה באופן אוטומטי את הניסוי מיד אחרי שהוא נוצר.

בחירת יעדים לניסויים מתוזמנים

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

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

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

הגדרה של ניסוי מתוזמן

לפני שממשיכים, צריך לוודא שיש לכם תפקיד roles/faulttesting.operator או roles/faulttesting.admin.

הגדרת לוח זמנים באמצעות Google Cloud המסוף ו-Cloud Scheduler

אי אפשר ליצור לוחות זמנים ישירות במסוף Fault Injection Testing, אבל המסוף מספק את הפרמטרים שצריך כדי להגדיר משימה ב-Cloud Scheduler.

  1. במסוף Google Cloud , עוברים לדף Experiment templates.
  2. בוחרים תבנית כדי לראות את הפרטים שלה.
  3. בדף הפרטים, שימו לב לפרטים הבאים:

    • ה-payload של ה-JSON, שכולל את "startOnCreateEnabled": true.
    • כתובת ה-URL של נקודת הקצה של REST API ליצירת ניסוי.

    תשתמשו בהם ב-Cloud Scheduler.

  4. במסוף Google Cloud , עוברים לדף Cloud Scheduler ולוחצים על Create job.

  5. הגדרת לוח הזמנים ואזור הזמן של העבודה.

  6. בקטע Target type (סוג היעד), בוחרים באפשרות HTTP.

  7. מגדירים את כתובת ה-URL לכתובת ה-URL של נקודת הקצה של ה-API ל-REST מדף הפרטים של תבניות הניסוי.

  8. מגדירים את שיטת ה-HTTP ל-POST.

  9. בשדה Body, מזינים את מטען ה-JSON:

    {
      "experimentTemplate": "projects/PROJECT_ID/locations/REGION/experimentTemplates/TEMPLATE_ID",
      "startOnCreateEnabled": true,
      "description": "DESCRIPTION"
    }
    
  10. הגדרת אימות למשימה. שיטות מומלצות להמלצות על חשבונות שירות

  11. לוחצים על יצירה.

הגדרת לוח זמנים באמצעות Google Cloud CLI

אם אתם משתמשים בסקריפטים או בכלים שמריצים פקודות של Shell, אתם יכולים לתזמן ניסויים על ידי הגדרת Cloud Scheduler או מתזמן משלכם להרצת הפקודה gcloud alpha fault-testing experiments create עם הדגל --start-on-create-enabled.

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

gcloud alpha fault-testing experiments create EXPERIMENT_ID \
    --experiment-template=TEMPLATE_ID \
    --location=REGION \
    --start-on-create-enabled \
    [--description="DESCRIPTION"] \
    [--project=PROJECT_ID]
  • EXPERIMENT_ID: מזהה ייחודי של הרצת הניסוי. מכיוון שהפקודה הזו היא אוטומטית, הסקריפט צריך ליצור מזהה ייחודי לכל הרצה. לדוגמה, אפשר להוסיף חותמת זמן: scheduled-exp-$(date +%s)
  • TEMPLATE_ID: המזהה של תבנית הניסוי שהוגדרה מראש.
  • REGION: Google Cloud האזור שבו הניסוי פועל.
  • --start-on-create-enabled: הדגל הזה מציין לבדיקה של הזרקת תקלות להתחיל את הניסוי מיד אחרי שהוא נוצר.
  • DESCRIPTION: (אופציונלי) תיאור של הרצת הניסוי.
  • PROJECT_ID: (אופציונלי) מזהה הפרויקט ב- Google Cloud.

ניהול של הרצות ניסויים

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

  • כדי להציג רשימה של כל הרצות הניסוי:

    gcloud alpha fault-testing experiments list --location=REGION
    
  • כדי לראות את הפרטים של ריצה ספציפית:

    gcloud alpha fault-testing experiments describe EXPERIMENT_ID --location=REGION
    
  • כדי לעצור ניסוי פעיל לפני הזמן:

    gcloud alpha fault-testing experiments stop EXPERIMENT_ID --location=REGION
    

שיטות מומלצות

כשמתזמנים ניסויים, כדאי לפעול לפי השיטות המומלצות הבאות:

  • משתמשים בחשבון שירות ייעודי. כשמגדירים את הכלי לתזמון (למשל Cloud Scheduler), צריך לשייך אותו לחשבון שירות ייעודי. צריך לתת לחשבון השירות הזה רק את ההרשאות המינימליות שנדרשות לניהול ניסויים, כמו roles/faulttesting.operator או roles/faulttesting.admin בפרויקט.
  • יצירת מזהי ניסוי ייחודיים. כשמפעילים ניסויים באמצעות סקריפטים, חשוב לוודא שהסקריפט יוצר מזהה ניסוי ייחודי לכל הרצה כדי למנוע התנגשויות בשמות משאבים.
  • שימוש בשמות או בתיאורים תיאוריים. כל הפעלה מתוזמנת יוצרת מופע ניסוי חדש. הוא לא מפעיל מחדש ניסויים קודמים ולא מחליף אותם. כדאי להשתמש בשמות או בתיאורים תיאוריים כדי לעקוב אחרי הרצות ולמצוא את התזמון שלהן.
  • מעקב אחרי כשלים בתזמון. הפעלות חיצוניות יכולות להיכשל בגלל בעיות ברשת, תוקף של פרטי כניסה או מכסות של API. כדאי להגדיר מעקב והתראות על משימות המתזמן כדי לקבל הודעה אם משימה לא מופעלת או אם מתקבלת תגובת שגיאה.
  • התאמה לחלונות ההחרגה. מוודאים שהניסויים המתוזמנים לא חופפים לחלונות החרגה פעילים. אם ניסוי מתוזמן מופעל במהלך חלון החרגה, בדיקת הזרקת תקלות חוסמת את ההרצה והניסוי לא מתחיל.