Node Problem Detector

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

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

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

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

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

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

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

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

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

תנאי סיבה תיקון רכב נתמך1
KernelDeadlock תהליכי ליבה תקועים בהמתנה שתהליכי ליבה אחרים ישחררו משאבים נדרשים. לא
ReadonlyFilesystem האשכול לא יכול לכתוב למערכת הקבצים בגלל בעיה, כמו דיסק מלא. לא
FrequentKubeletRestart שירות kubelet מופעל מחדש לעיתים קרובות, ולכן הצומת לא יכול להריץ תרמילים בצורה יעילה. לא
FrequentDockerRestart שירות ה-daemon של 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 לחיפוש.
  • הפעלת סקריפטים של מעקב שהוגדרו על ידי המשתמש.

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

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

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