Node Problem Detector

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

החל מגרסה 1.10.0 של Google Distributed Cloud, התכונה Node Problem Detector מופעלת כברירת מחדל.

אם אתם צריכים עזרה נוספת, אתם יכולים לפנות אל

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

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

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

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

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

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

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, הוא יכול לתקן באופן אוטומטי את הבעיה המתאימה בצומת. החל מגרסה 1.32, רק NodeCondition תומך בתיקון אוטומטי: FailedCgroupRemoval.

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

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

kubectl describe node NODE_NAME \
    --kubeconfig=KUBECONFIG

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

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

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

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

כברירת מחדל, Node Problem Detector מופעל, אבל אפשר להשבית אותו במשאב node-problem-detector-config ConfigMap. אלא אם משביתים אותו באופן מפורש, 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"
    

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

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

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

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

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

כדי להשבית את התנהגות התיקון האוטומטי באשכול מסוים, מבצעים את השלבים הבאים:

  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"
    

    במקור, ל-node-problem-detector-config ConfigMap אין שדה 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 למערכות ניטור אחרות, כמו Stackdriver או Prometheus.
  • התאמה אישית של NodeConditions או Events לחיפוש.
  • הרצת סקריפטים של מעקב שהוגדרו על ידי המשתמש.

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

אם אתם צריכים עזרה נוספת, אתם יכולים לפנות אל