פתרון בעיות במשימות של KubernetesExecutor

Managed Airflow (דור 3) | Managed Airflow (דור 2) | Managed Airflow (דור 1 מדור קודם)

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

גישה כללית לפתרון בעיות ב-KubernetesExecutor

כדי לפתור בעיות במשימה שבוצעה באמצעות KubernetesExecutor, מבצעים את הפעולות הבאות לפי הסדר:

  1. בודקים את היומנים של המשימה בממשק המשתמש של DAG או בממשק המשתמש של Airflow.

  2. בודקים את יומני המתזמן במסוף Google Cloud :

    1. במסוף Google Cloud , עוברים לדף Environments.

      מעבר אל Environments

    2. ברשימת הסביבות, לוחצים על שם הסביבה. הדף Environment details ייפתח.

    3. עוברים לכרטיסייה Logs (יומנים) ובודקים את הקטע Airflow logs (יומני Airflow) > Scheduler (מתזמן).

    4. בטווח זמן מסוים, בודקים את פוד העובד KubernetesExecutor שהריץ את המשימה. אם הפוד כבר לא קיים, מדלגים על השלב הזה. לפוד יש את הקידומת airflow-k8s-worker ושם של DAG או של משימה בשם שלו. בודקים אם יש בעיות שדווחו, כמו משימה שנכשלה או משימה שלא ניתן לתזמן.

תרחישים נפוצים לפתרון בעיות ב-KubernetesExecutor

בקטע הזה מפורטים תרחישים נפוצים לפתרון בעיות שבהם אתם עשויים להיתקל ב-KubernetesExecutor.

המשימה מגיעה למצב Running ואז נכשלת במהלך ההרצה.

תסמינים:

  • יש יומנים של המשימה בממשק המשתמש של Airflow ובכרטיסייה Logs בקטע Workers.

פתרון: הבעיה מופיעה ביומני המשימות.

מופע של משימה מגיע למצב queued, ואז הוא מסומן כUP_FOR_RETRY או כFAILED אחרי זמן מה.

תסמינים:

  • אין יומנים למשימה בממשק המשתמש של Airflow ובכרטיסייה Logs בקטע Workers.
  • בכרטיסייה Logs (יומנים) בקטע Scheduler (מתזמן) יש יומנים עם הודעה שהמשימה מסומנת כ-UP_FOR_RETRY או כ-FAILED.

פתרון:

  • בודקים את יומני המתזמן כדי לראות פרטים על הבעיה.

סיבות אפשריות:

  • אם יומני המתזמן מכילים את ההודעה Adopted tasks were still pending after... ואחריה את מופע המשימה המודפס, צריך לוודא ש-CeleryKubernetesExecutor מופעל בסביבה שלכם.

מופע המשימה מגיע למצב Queued ומסומן באופן מיידי כUP_FOR_RETRY או כFAILED

תסמינים:

  • אין יומנים למשימה בממשק המשתמש של Airflow ובכרטיסייה Logs בקטע Workers.
  • היומן של מתזמן הפגישות בכרטיסייה Logs בקטע Scheduler כולל את ההודעה Pod creation failed with reason ... Failing task ואת ההודעה שהמשימה מסומנת כ-UP_FOR_RETRY או כ-FAILED.

פתרון:

  • בודקים את יומני המתזמן כדי לראות את התשובה המדויקת ואת סיבת הכשל.

סיבה אפשרית:

אם הודעת השגיאה היא quantities must match the regular expression ..., סביר להניח שהבעיה נגרמת בגלל ערכים מותאמים אישית שמוגדרים למשאבי k8s (בקשות/מגבלות) של פודים של עובדי משימות.

משימות KubernetesExecutor נכשלות ללא יומנים כשמופעל מספר גדול של משימות

כשסביבת העבודה מריצה מספר גדול של משימות עם KubernetesExecutor או KubernetesPodOperator בו-זמנית, Managed Airflow (דור 3) לא מקבל משימות חדשות עד שחלק מהמשימות הקיימות מסתיימות. משימות נוספות מסומנות כנכשלות, ו-Airflow מנסה לבצע אותן שוב מאוחר יותר, אם מגדירים ניסיונות חוזרים למשימות (Airflow עושה זאת כברירת מחדל).

הסימפטום: משימות שמופעלות באמצעות KubernetesExecutor או KubernetesPodOperator נכשלות בלי שיופיעו יומני משימות בממשק המשתמש של Airflow או בממשק המשתמש של DAG. ביומני המתזמן, אפשר לראות הודעות שגיאה דומות לאלה:

pods \"airflow-k8s-worker-*\" is forbidden: exceeded quota: k8s-resources-quota,
requested: pods=1, used: pods=*, limited: pods=*","reason":"Forbidden"

פתרונות אפשריים:

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

פתרון עקיף:

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

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