Node Problem Detector

ספריית הקוד הפתוח Node Problem Detector מאפשרת לעקוב אחרי תקינות הצומת ולזהות בעיות נפוצות בחומרה, בקרנל או בסביבת זמן הריצה של הקונטיינר. ב-Google Distributed Cloud, הוא פועל כשירות systemd בכל צומת, והוא מופעל כברירת מחדל בגרסה 1.10.0 ואילך. בגרסה 1.32 ואילך, Node Problem Detector יכול גם לתקן באופן אוטומטי בעיות נבחרות בצומת.

אם אתם צריכים עזרה נוספת, תוכלו לפנות אל Cloud Customer Care. במאמר קבלת תמיכה תוכלו לקרוא מידע נוסף על מקורות המידע לתמיכה, כולל:

  • הדרישות לפתיחת בקשת תמיכה.
  • כלים שיעזרו לכם לפתור בעיות, כמו הגדרת הסביבה, יומנים ומדדים.
  • רכיבים נתמכים.

אילו בעיות הוא מזהה?

הכלי Node Problem Detector יכול לזהות את סוגי הבעיות הבאים:

  • בעיות בסביבת זמן הריצה של הקונטיינר, כמו דימונים (daemons) של זמן ריצה שלא מגיבים
  • בעיות חומרה, כמו כשלים במעבד (CPU), בזיכרון או בדיסק
  • בעיות בליבה (kernel), כמו מצבי מבוי סתום בליבה או מערכות קבצים פגומות

הוא פועל בצומת ומדווח על בעיות לשרת ה-API של Kubernetes בתור NodeCondition או בתור Event. NodeCondition היא בעיה שמונעת מצומת להריץ pod, ואילו Event היא בעיה זמנית שיש לה השפעה מוגבלת על pod, אבל היא עדיין נחשבת חשובה מספיק כדי לדווח עליה.

בטבלה הבאה מתוארים ה-NodeConditions שזוהו על ידי Node Problem Detector, ואם אפשר לתקן אותם באופן אוטומטי:

תנאי סיבה תיקון אוטומטי נתמך1
KernelDeadlock תהליכי ליבה תקועים בהמתנה לתהליכי ליבה אחרים שישחררו את המשאבים הנדרשים. לא
ReadonlyFilesystem האשכול לא יכול לכתוב למערכת הקבצים בגלל בעיה, למשל אם הדיסק מלא. לא
FrequentKubeletRestart ה-kubelet מופעל מחדש לעיתים קרובות, מה שמונע מהצומת להריץ pod-ים בצורה יעילה. לא
FrequentDockerRestart הדמון של Docker הופעל מחדש יותר מ-5 פעמים ב-20 דקות. לא
FrequentContainerdRestart זמן הריצה של הקונטיינר הופעל מחדש יותר מ-5 פעמים ב-20 דקות. לא
FrequentUnregisterNetDevice הצומת חווה ביטול רישום תכוף של התקני רשת. לא
CorruptDockerOverlay2 יש בעיות במערכת הקבצים או חוסר עקביות בספריית מנהל ההתקן של האחסון overlay2 ב-Docker. לא
OrphanContainers2 פוד ספציפי לקונטיינר נמחק, אבל הקונטיינר התואם עדיין קיים בצומת. לא
ContainerRuntimeUnhealthy סביבת זמן הריצה של הקונטיינר לא פועלת כמו שצריך, ומונעת מה-pods לפעול או לתזמן בצומת. כן
FailedCgroupRemoval2 חלק מקבוצות הבקרה (cgroups) נמצאות במצב קפוא. כן
KubeletUnhealthy הצומת לא פועל כמו שצריך או לא מגיב למישור הבקרה. כן

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

‫2 נתמך בגרסאות 1.32 ואילך.

דוגמאות לסוגי Events שמדווחים על ידי Node Problem Detector:

  • Warning TaskHung node/vm-worker-1-user-a12fabb4a99cb92-ddfce8832fd90f6f.lab.anthos kernel: task docker:7 blocked for more than 300 seconds.
  • Warning KernelOops node/vm-worker-1-user-a12fabb4a99cb92-ddfce8832fd90f6f.lab.anthos kernel: BUG: unable to handle kernel NULL pointer dereference at 00x0.

אילו בעיות הוא מתקן?

החל מגרסה 1.32, כש-Node Problem Detector מזהה NodeConditions מסוימים, הוא יכול לתקן באופן אוטומטי את הבעיה המתאימה בצומת. השירותים הבאים של NodeConditions תומכים בתיקון אוטומטי:

  • ContainerRuntimeUnhealthy
  • FailedCgroupRemoval
  • KubeletUnhealthy

איך לראות את הבעיות שזוהו

מריצים את הפקודה הבאה של kubectl describe כדי לחפש את NodeConditions ואת Events:

kubectl describe node NODE_NAME \
    --kubeconfig=KUBECONFIG

מחליפים את מה שכתוב בשדות הבאים:

  • ‫NODE_NAME: שם הצומת שבודקים.

  • ‫KUBECONFIG: הנתיב לקובץ kubeconfig של האשכול.

איך מפעילים ומשביתים את Node Problem Detector

כברירת מחדל, Node Problem Detector מופעל, אבל אפשר להשבית אותו במשאב ConfigMap של node-problem-detector-config. אם לא משביתים אותו באופן מפורש, Node Problem Detector עוקב באופן רציף אחרי צמתים כדי לזהות תנאים ספציפיים שמעידים על בעיות בצומת.

כדי להשבית את Node Problem Detector באשכול מסוים:

  1. עורכים את המשאב node-problem-detector-config ConfigMap:

    kubectl edit configmap node-problem-detector-config \
        --kubeconfig=KUBECONFIG \
        --namespace=CLUSTER_NAMESPACE
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫KUBECONFIG: הנתיב לקובץ kubeconfig של האשכול.

    • ‫CLUSTER_NAMESPACE: מרחב השמות של האשכול שבו רוצים להפעיל את Node Problem Detector.

    הפקודה הזו מפעילה באופן אוטומטי כלי לעריכת טקסט שבו אפשר לערוך את המשאב node-problem-detector-config.

  2. מגדירים את data.enabled לערך false בהגדרת המשאב node-problem-detector-config.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      creationTimestamp: "2025-04-19T21:36:44Z"
      name: node-problem-detector-config
    ...
    data:
      enabled: "false"
    

    בהתחלה, ב-ConfigMap של node-problem-detector-config אין שדה data, לכן יכול להיות שתצטרכו להוסיף אותו.

  3. כדי לעדכן את המשאב, שומרים את השינויים וסוגרים את הכלי לעריכה.

כדי להפעיל מחדש את Node Problem Detector, מבצעים את השלבים הקודמים, אבל מגדירים את data.enabled ל-true בהגדרת המשאב node-problem-detector-config.

איך מפעילים ומשביתים את התיקון האוטומטי

החל מגרסה 1.32, הכלי Node Problem Detector בודק אם יש NodeConditions ספציפיים ומתקן באופן אוטומטי את הבעיה המתאימה בצומת. כברירת מחדל, התיקון האוטומטי מופעל ב-NodeConditions נתמכים, אבל אפשר להשבית אותו במשאב ConfigMap של node-problem-detector-config.

כדי להשבית את התיקון האוטומטי באשכול מסוים:

  1. עורכים את המשאב node-problem-detector-config ConfigMap:

    kubectl edit configmap node-problem-detector-config \
        --kubeconfig=KUBECONFIG \
        --namespace=CLUSTER_NAMESPACE
    

    מחליפים את מה שכתוב בשדות הבאים:

    • ‫KUBECONFIG: הנתיב לקובץ kubeconfig של האשכול.

    • ‫CLUSTER_NAMESPACE: מרחב השמות של האשכול שבו רוצים להפעיל את Node Problem Detector.

    הפקודה הזו מפעילה באופן אוטומטי כלי לעריכת טקסט שבו אפשר לערוך את המשאב node-problem-detector-config.

  2. מגדירים את data.check-only ל-true בהגדרת המשאב node-problem-detector-config.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      creationTimestamp: "2025-04-19T21:36:44Z"
      name: node-problem-detector-config
    ...
    data:
      enabled: "true"
      check-only: "true"
    

    בהתחלה, ל-ConfigMap של node-problem-detector-config אין שדה data, לכן יכול להיות שתצטרכו להוסיף אותו. אם מגדירים את check-only לערך "true", התיקון האוטומטי מושבת בכל התנאים הנתמכים.

  3. כדי לעדכן את המשאב, שומרים את השינויים וסוגרים את הכלי לעריכה.

כדי להפעיל מחדש את התיקון האוטומטי לכל NodeConditions שתומכים בו, מגדירים את data.check-only ל-"false" ב-ConfigMap של node-problem-detector-config.

איך לעצור ולהפעיל מחדש את Node Problem Detector

הכלי Node Problem Detector פועל כשירות systemd בכל צומת. כדי לנהל את Node Problem Detector בצומת מסוים, צריך לגשת לצומת באמצעות SSH ולהריץ את הפקודות הבאות של systemctl.

  • כדי להשבית את Node Problem Detector, מריצים את הפקודה הבאה:

    systemctl stop node-problem-detector
    
  • כדי להפעיל מחדש את Node Problem Detector, מריצים את הפקודה הבאה:

    systemctl restart node-problem-detector
    
  • כדי לבדוק אם Node Problem Detector פועל בצומת מסוים, מריצים את הפקודה הבאה:

    systemctl is-active node-problem-detector
    

תכונות שלא נתמכות

ב-Google Distributed Cloud אין תמיכה בהתאמות האישיות הבאות של Node Problem Detector:

  • ייצוא דוחות של Node Problem Detector למערכות מעקב אחרות, כמו Cloud Monitoring או Prometheus.
  • התאמה אישית של NodeConditions או Events שצריך לחפש.
  • הפעלת סקריפטים למעקב שמוגדרים על ידי המשתמש.

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

אם אתם צריכים עזרה נוספת, תוכלו לפנות אל Cloud Customer Care. במאמר קבלת תמיכה תוכלו לקרוא מידע נוסף על מקורות המידע לתמיכה, כולל:

  • הדרישות לפתיחת בקשת תמיכה.
  • כלים שיעזרו לכם לפתור בעיות, כמו הגדרת הסביבה, יומנים ומדדים.
  • רכיבים נתמכים.