You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

非GCE环境下K8S node-problem-detector使用及数据输出问询

关于Kubernetes Node Problem Detector的两个问题解答

Hey,针对你的两个问题,我来给你详细捋一捋,都是实际使用NPD的经验总结:

问题一:如何使用K8S node-problem-detector?

其实用node-problem-detector(大家常简称NPD)还是挺直观的,核心就是部署+配置两步走,我给你拆解成几个关键步骤:

1. 部署NPD

默认Kubernetes集群不会自带NPD,因为它需要在每个节点上运行,用DaemonSet是最合适的部署方式。你可以创建一个自定义的DaemonSet配置文件(比如npd-daemonset.yaml),内容如下:

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-problem-detector
  namespace: kube-system
  labels:
    k8s-app: node-problem-detector
spec:
  selector:
    matchLabels:
      k8s-app: node-problem-detector
  template:
    metadata:
      labels:
        k8s-app: node-problem-detector
    spec:
      containers:
      - name: node-problem-detector
        image: k8s.gcr.io/node-problem-detector:v0.8.10
        args:
        - --config=/config/kernel-monitor.json,/config/file-log-monitor.json
        resources:
          limits:
            cpu: 100m
            memory: 100Mi
          requests:
            cpu: 10m
            memory: 20Mi
        volumeMounts:
        - name: log
          mountPath: /var/log
          readOnly: true
        - name: config
          mountPath: /config
      volumes:
      - name: log
        hostPath:
          path: /var/log
      - name: config
        configMap:
          name: node-problem-detector-config

执行以下命令完成部署:

kubectl apply -f npd-daemonset.yaml

部署完成后,用这个命令检查每个节点上的NPD Pod是否正常运行:

kubectl get pods -n kube-system -l k8s-app=node-problem-detector

2. 配置问题检测器

NPD靠插件来检测节点问题,比如内核死锁、文件系统异常、自定义日志错误等。你需要用ConfigMap来管理这些插件的配置。创建一个npd-configmap.yaml文件,内容如下(包含通用的内核日志和系统日志检测规则):

apiVersion: v1
kind: ConfigMap
metadata:
  name: node-problem-detector-config
  namespace: kube-system
data:
  kernel-monitor.json: |
    {
      "plugin": "kernel-monitor",
      "config": {
        "watchKernelLog": true,
        "logPath": "/var/log/kern.log",
        "rules": [
          {
            "type": "NodeCondition",
            "conditionType": "KernelDeadlock",
            "conditionStatus": "True",
            "matchPattern": "task.*blocked for more than.*seconds",
            "reason": "KernelDeadlock",
            "message": "Detected kernel deadlock in node"
          }
        ]
      }
    }
  file-log-monitor.json: |
    {
      "plugin": "file-log-monitor",
      "config": {
        "logPath": "/var/log/syslog",
        "checkPeriod": 20,
        "rules": []
      }
    }

执行命令应用配置:

kubectl apply -f npd-configmap.yaml

如果需要自定义检测规则(比如检测特定应用的错误日志),直接修改ConfigMap里的rules字段即可,添加对应的匹配正则、问题类型和描述。

3. 查看检测结果

NPD检测到问题后,会生成两种类型的信息:

  • NodeCondition:会更新节点的状态,你可以用这个命令查看:
    kubectl describe node <你的节点名称>
    
    在Conditions部分就能看到NPD上报的异常状态,比如KernelDeadlock。
  • Event:会在K8S事件系统中生成告警事件,用这个命令查看:
    kubectl get events -n kube-system
    
    能看到NPD触发的事件详情,包括问题原因和描述。

问题二:非GCE环境下如何使用node-problem-detector?是否向Dashboard推送信息/提供API指标?

非GCE环境的适配

官方默认的NPD配置是为GCE(Google Compute Engine)优化的,在其他环境(比如AWS、阿里云、自建物理机集群)使用时,只需要做这几个简单调整:

  1. 移除GCE特定配置:不要使用官方默认的GCE专属DaemonSet配置(里面包含GCE节点特有的挂载路径和环境变量),直接用我上面给你的通用DaemonSet配置即可——它没有任何GCE相关的依赖,只挂载了通用的/var/log目录和ConfigMap。
  2. 调整日志路径:不同操作系统的日志路径可能不一样,比如CentOS的内核日志是/var/log/messages,而Debian/Ubuntu是/var/log/kern.log。你需要修改ConfigMap里kernel-monitor.json的logPath字段,匹配你的节点操作系统。
  3. 自定义检测规则:根据你的环境需求添加专属的检测规则,比如检测云服务商特定的节点告警日志,或者自定义应用的错误日志。

是否向Dashboard推送信息/提供API指标?

  • Dashboard展示:NPD本身不会主动向Dashboard推送信息,但Dashboard是从K8S API Server拉取数据的——只要NPD把问题上报成NodeCondition或者Event,你在Dashboard的节点详情页就能看到这些异常:比如节点状态的Conditions列表里会出现NPD上报的异常类型,或者事件列表里会显示NPD触发的告警事件。
  • API指标支持:NPD默认会在Pod的20257端口暴露Prometheus格式的指标,路径是/metrics。你可以用端口转发的方式本地查看:
    kubectl port-forward <NPD-Pod的名称> 20257:20257 -n kube-system
    
    然后访问http://localhost:20257/metrics就能看到所有指标,比如问题检测的次数、各个检测器的运行状态等。如果要让Prometheus自动抓取这些指标,只要给NPD的Pod添加以下注解(修改DaemonSet的template.metadata.annotations):
    annotations:
      prometheus.io/scrape: "true"
      prometheus.io/port: "20257"
    
    这样Prometheus就能自动发现并采集NPD的指标了。

内容的提问来源于stack exchange,提问作者mon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:43:02