מידע על Tasks
בניגוד לאפליקציות (תהליכים לטווח ארוך), משימות פועלות למשך זמן מוגבל ואז מפסיקות. המשימות פועלות בקונטיינרים משלהן על סמך ההגדרה באפליקציית האב, ויכול להיות שהן מוגדרות לשימוש במשאבים מוגבלים (למשל, CPU, זיכרון או אחסון דיסק זמני).
תרחישי שימוש ב-Tasks
- העברה של מסד נתונים
- הפעלת משימה באצווה (מתוזמנת או לא מתוזמנת)
- שליחת אימייל
- טרנספורמציה של נתונים (ETL)
- עיבוד נתונים (העלאה, גיבוי, הורדה)
איך Tasks עובד
המשימות מבוצעות באופן אסינכרוני ופועלות באופן עצמאי מהאפליקציה הראשית או ממשימות אחרות שפועלות באותה אפליקציה. לא נוצרים או מוקצים נתיבים לאפליקציה שנוצרה להרצת משימות, ומחזור החיים של הפעלה מדלג על השלב הזה. מחזורי החיים של העלאת קוד המקור ושל ה-build עדיין מתבצעים ומסתיימים ביצירת קובץ אימג' של קונטיינר שמשמש להרצת משימות אחרי דחיפת האפליקציה (אפשר לעיין במחזורי החיים של האפליקציה במאמר פריסת אפליקציה).
מחזור החיים של משימה הוא כזה:
- מריצים את הפקודה
kf push APP_NAME --taskכדי להפעיל אפליקציה לביצוע משימות. - מריצים משימה באפליקציה באמצעות הפקודה
kf run-task APP_NAME. המשימה מקבלת בירושה את משתני הסביבה, את הקישורים לשירותים, את הקצאת המשאבים, את פקודת ההפעלה ואת קבוצות האבטחה שמקושרות לאפליקציה. - Kf יוצר PipelineRun של Tekton עם ערכים מהאפליקציה ופרמטרים מהפקודה
run-task. - ה-Tekton PipelineRun יוצר Kubernetes Pod שמפעיל קונטיינר על סמך ההגדרות באפליקציה ובמשימה.
- הביצוע של המשימה מופסק (המשימה יוצאת או מסתיימת באופן ידני), ה-Pod הבסיסי מופסק או מסתיים. ה-Pods של משימות שהופסקו נשמרים, ולכן אפשר לגשת ליומני המשימות באמצעות הפקודה
kf logs APP_NAME --task. - אם מסיימים משימה לפני שהיא מסתיימת, ה-PipelineRun של Tekton מבוטל (ראו ביטול PipelineRun), וה-Pod הבסיסי נמחק יחד עם היומנים. היומנים של משימות שהסתיימו מועברים לזרמי הרישום ברמת האשכול אם הם מוגדרים (למשל, Stackdriver, Fluentd).
- אם מספר המשימות שמופעלות באפליקציה גדול מ-500, המשימות הכי ישנות נמחקות באופן אוטומטי.
מדיניות שמירת נתונים של משימות
המשימות נוצרות כמשאבים מותאמים אישית באשכול Kubernetes, ולכן חשוב לא לנצל את כל המקום במסד הנתונים הבסיסי etcd. כברירת מחדל, Kf שומרת רק את 500 המשימות האחרונות לכל אפליקציה. כשהמספר מגיע ל-500, המשימות הכי ישנות (יחד עם ה-Pods והיומנים הבסיסיים) נמחקות אוטומטית.
רישום משימות ביומן והיסטוריית הביצוע
כל הנתונים או ההודעות שהמשימה מוציאה ל-STDOUT או ל-STDERR זמינים באמצעות הפקודה kf logs APP_NAME --task. מנגנון רישום ביומן ברמת האשכול (כמו Stackdriver, Fluentd) יעביר את יומני המשימות ליעד הרישום ביומן שהוגדר.
תזמון משימות
כמו שמתואר למעלה, אפשר להריץ משימות באופן אסינכרוני באמצעות הפקודה kf run-task APP_NAME.
אפשרות אחרת היא לתזמן את המשימות להרצה. לשם כך, קודם יוצרים משימה באמצעות הפקודה kf create-job, ואז מתזמנים אותה באמצעות הפקודה kf schedule-job JOB_NAME. אפשר לתזמן את העבודה כך שהמשימות יפעלו באופן אוטומטי לפי לוח זמנים ספציפי של unix-cron.
איך מתזמנים משימות
יוצרים משימה ומתזמנים אותה להרצה. משימה מתארת את הפעולה שצריך לבצע, ומנהלת באופן אוטומטי את יצירת המשימה.
המשימות נוצרות לפי לוח הזמנים גם אם הביצועים הקודמים של המשימה עדיין פועלים. אם יש הפעלות שפספסתם מסיבה כלשהי, רק ההפעלה האחרונה שפספסתם תופעל כשהמערכת תתאושש.
אם מוחקים משימה, כל המשימות שמשויכות אליה נמחקות. אם יש משימות משויכות שהיו עדיין בתהליך, הן נמחקות בכוח בלי להשלים את התהליך.
משימות שנוצרו על ידי משימה מתוזמנת עדיין כפופות למדיניות שמירת נתונים.
ההבדלים מ-PCF Scheduler
ב-PCF Scheduler אפשר להגדיר כמה לוחות זמנים למשימה אחת, אבל ב-Kf אפשר להגדיר רק לוח זמנים אחד לכל משימה. אפשר לשכפל את ההתנהגות של PCF Scheduler על ידי יצירת כמה משימות, אחת לכל תזמון.