פתרון בעיות במשימות של 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. בטווח זמן מסוים, בודקים את ה-Pod של העובד KubernetesExecutor שהריץ את המשימה. אם הפוד כבר לא קיים, מדלגים על השלב הזה. ל-pod יש את הקידומת 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 UI, ואז לשייך את כל המשימות שמבוססות על קונטיינרים למאגר הזה. מומלץ להגדיר את מספר המשבצות במאגר ל-50 או פחות. משימות נוספות יישארו במצב מתוזמן עד שיהיה משבצת פנויה במאגר Airflow כדי להריץ אותן. אם תשתמשו בפתרון העקיף הזה בלי להחיל פתרונות אפשריים, עדיין יכול להיות שיהיו הרבה משימות בתור במאגר Airflow.

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