Managed Airflow (דור 3) | Managed Airflow (דור 2) | Managed Airflow (דור 1 מדור קודם)
בדף הזה מוסבר איך לפתור בעיות שקשורות למשימות שמופעלות על ידי KubernetesExecutor, ומוצעים פתרונות לבעיות נפוצות.
גישה כללית לפתרון בעיות ב-KubernetesExecutor
כדי לפתור בעיות במשימה שמופעלת באמצעות KubernetesExecutor, מבצעים את הפעולות הבאות לפי הסדר:
בודקים את היומנים של המשימה בממשק המשתמש של DAG או בממשק המשתמש של Airflow.
בודקים את יומני המתזמן במסוף Google Cloud :
במסוף Google Cloud , עוברים לדף Environments.
ברשימת הסביבות, לוחצים על שם הסביבה. הדף Environment details ייפתח.
עוברים לכרטיסייה Logs (יומנים) ובודקים את הקטע Airflow logs (יומני Airflow) > Scheduler (מתזמן).
בטווח זמן מסוים, בודקים את ה-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.