Node Problem Detector

Node Problem Detector adalah library open source yang memantau kondisi node dan mendeteksi masalah node umum, seperti masalah hardware, kernel, atau runtime penampung. Di Google Distributed Cloud, layanan ini berjalan sebagai layanan systemd di setiap node.

Mulai rilis Google Distributed Cloud 1.10.0, Pendeteksi Masalah Node diaktifkan secara default.

Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.

Masalah apa yang dideteksinya?

Pendeteksi Masalah Node dapat mendeteksi jenis masalah berikut:

  • Masalah runtime container, seperti daemon runtime yang tidak responsif
  • Masalah hardware, seperti kegagalan CPU, memori, atau disk
  • Masalah kernel, seperti kondisi deadlock kernel atau sistem file yang rusak

Fitur ini berjalan di node dan melaporkan masalah ke server Kubernetes API sebagai NodeCondition atau sebagai Event. NodeCondition adalah masalah yang membuat node tidak dapat menjalankan pod, sedangkan Event adalah masalah sementara yang memiliki efek terbatas pada pod, tetapi masih dianggap cukup penting untuk dilaporkan.

Tabel berikut menjelaskan NodeConditions yang ditemukan oleh Node Problem Detector dan apakah node tersebut dapat diperbaiki secara otomatis atau tidak:

Kondisi Alasan Perbaikan otomatis didukung1
KernelDeadlock Proses kernel macet menunggu proses kernel lain untuk melepaskan resource yang diperlukan. Tidak
ReadonlyFilesystem Cluster tidak dapat menulis ke sistem file karena masalah, seperti disk penuh. Tidak
FrequentKubeletRestart Kubelet sering dimulai ulang, yang mencegah node menjalankan pod secara efektif. Tidak
FrequentDockerRestart Daemon Docker telah dimulai ulang lebih dari 5 kali dalam 20 menit. Tidak
FrequentContainerdRestart Runtime penampung telah dimulai ulang lebih dari 5 kali dalam 20 menit. Tidak
FrequentUnregisterNetDevice Node sering mengalami pembatalan pendaftaran perangkat jaringan. Tidak
KubeletUnhealthy Node tidak berfungsi dengan benar atau tidak merespons bidang kontrol. Tidak
ContainerRuntimeUnhealthy Runtime container tidak berfungsi dengan benar, sehingga mencegah pod berjalan atau dijadwalkan di node. Tidak
CorruptDockerOverlay2 Ada masalah sistem file atau inkonsistensi dalam direktori driver penyimpanan overlay2 Docker. Tidak
OrphanContainers2 Pod khusus untuk penampung telah dihapus, tetapi penampung yang sesuai masih ada di node. Tidak
FailedCgroupRemoval2 Beberapa cgroup dalam status beku. Ya

1 Untuk versi 1.32 dan yang lebih baru, kemampuan untuk memperbaiki masalah yang terdeteksi secara otomatis didukung untuk kondisi tertentu.

2 Didukung untuk versi 1.32 dan yang lebih baru.

Beberapa contoh jenis Events yang dilaporkan oleh Node Problem Detector adalah:

  • 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.

Masalah apa yang diperbaikinya?

Mulai versi 1.32, saat menemukan NodeConditions tertentu, Pendeteksi Masalah Node dapat otomatis memperbaiki masalah yang sesuai di node. Mulai versi 1.32, satu-satunya NodeCondition yang mendukung perbaikan otomatis adalah FailedCgroupRemoval.

Cara melihat masalah yang terdeteksi

Jalankan perintah kubectl describe berikut untuk mencari NodeConditions dan Events:

kubectl describe node NODE_NAME \
    --kubeconfig=KUBECONFIG

Ganti kode berikut:

  • NODE_NAME: nama node yang Anda periksa.

  • KUBECONFIG: jalur file kubeconfig cluster.

Cara mengaktifkan dan menonaktifkan Pendeteksi Masalah Node

Secara default, Node Problem Detector diaktifkan, tetapi dapat dinonaktifkan di resource ConfigMap node-problem-detector-config. Kecuali jika Anda menonaktifkannya secara eksplisit, Node Problem Detector akan terus memantau node untuk kondisi tertentu yang menunjukkan masalah pada node.

Untuk menonaktifkan Node Problem Detector di cluster tertentu, gunakan langkah-langkah berikut:

  1. Edit resource ConfigMap node-problem-detector-config:

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

    Ganti kode berikut:

    • KUBECONFIG: jalur file kubeconfig cluster.

    • CLUSTER_NAMESPACE: namespace cluster tempat Anda ingin mengaktifkan Node Problem Detector.

    Perintah ini otomatis memulai editor teks tempat Anda dapat mengedit resource node-problem-detector-config.

  2. Tetapkan data.enabled ke false dalam definisi resource node-problem-detector-config.

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

    Awalnya, ConfigMap node-problem-detector-config tidak memiliki kolom data, jadi Anda mungkin perlu menambahkannya.

  3. Untuk memperbarui resource, simpan perubahan dan tutup editor.

Untuk mengaktifkan kembali Pendeteksi Masalah Node, lakukan langkah-langkah sebelumnya, tetapi tetapkan data.enabled ke true dalam definisi resource node-problem-detector-config.

Cara mengaktifkan dan menonaktifkan perbaikan otomatis

Mulai versi 1.32, Pendeteksi Masalah Node memeriksa NodeConditions tertentu dan otomatis memperbaiki masalah yang sesuai di node. Secara default, perbaikan otomatis diaktifkan untuk NodeConditions yang didukung, tetapi dapat dinonaktifkan di resource ConfigMap node-problem-detector-config.

Untuk menonaktifkan perilaku perbaikan otomatis di cluster tertentu, gunakan langkah-langkah berikut:

  1. Edit resource ConfigMap node-problem-detector-config:

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

    Ganti kode berikut:

    • KUBECONFIG: jalur file kubeconfig cluster.

    • CLUSTER_NAMESPACE: namespace cluster tempat Anda ingin mengaktifkan Node Problem Detector.

    Perintah ini otomatis memulai editor teks tempat Anda dapat mengedit resource node-problem-detector-config.

  2. Tetapkan data.check-only ke true dalam definisi resource 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"
    

    Awalnya, ConfigMap node-problem-detector-config tidak memiliki kolom data, jadi Anda mungkin perlu menambahkannya. Menyetel check-only ke "true" akan menonaktifkan perbaikan otomatis untuk semua kondisi yang didukung.

  3. Untuk memperbarui resource, simpan perubahan dan tutup editor.

Untuk mengaktifkan kembali perbaikan otomatis untuk semua NodeConditions yang mendukungnya, tetapkan data.check-only ke "false" di ConfigMap node-problem-detector-config.

Cara menghentikan dan memulai ulang Pendeteksi Masalah Node

Pendeteksi Masalah Node berjalan sebagai layanan systemd di setiap node. Untuk mengelola Node Problem Detector untuk node tertentu, gunakan SSH untuk mengakses node, dan jalankan perintah systemctl berikut.

  • Untuk menonaktifkan Node Problem Detector, jalankan perintah berikut:

    systemctl stop node-problem-detector
    
  • Untuk memulai ulang Node Problem Detector, jalankan perintah berikut:

    systemctl restart node-problem-detector
    
  • Untuk memeriksa apakah Node Problem Detector berjalan di node tertentu, jalankan perintah berikut:

    systemctl is-active node-problem-detector
    

Fitur yang tidak didukung

Google Distributed Cloud tidak mendukung penyesuaian Node Problem Detector berikut:

  • Mengekspor laporan Pendeteksi Masalah Node ke sistem pemantauan lain, seperti Stackdriver atau Prometheus.
  • Menyesuaikan NodeConditions atau Events yang akan dicari.
  • Menjalankan skrip pemantauan yang ditentukan pengguna.

Langkah berikutnya

Jika Anda memerlukan bantuan tambahan, hubungi Cloud Customer Care.