监控节点健康状况

节点问题检测器 是一个用于监控和报告节点健康状况的守护进程。您可以将节点问题检测器作为 DaemonSet 或作为独立守护进程运行。节点问题检测器从各种守护进程收集有关节点问题的信

要了解如何安装和使用节点问题检测器,请参阅 节点问题检测器项目文档

在您开始之前

您需要有一个 Kubernetes 集群,并且 kubectl 命令行工具必须配置为与您的集群通信。建议您在至少有两个节点的集群上运行本教程,这些节点不充当控制平面主机。如果您还没有集群,您可以使用 minikube 创建一个集群,或者您可以使用以下 Kubernetes 游乐场之一

限制

启用节点问题检测器

一些云提供商将节点问题检测器启用为 附加组件。您也可以使用 kubectl 或创建附加组件 DaemonSet 来启用节点问题检测器。

使用 kubectl 启用节点问题检测器

kubectl 提供了对节点问题检测器最灵活的管理。您可以覆盖默认配置以使其适应您的环境或检测自定义节点问题。例如

  1. 创建与 node-problem-detector.yaml 类似的节点问题检测器配置

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: node-problem-detector-v0.1
      namespace: kube-system
      labels:
        k8s-app: node-problem-detector
        version: v0.1
        kubernetes.io/cluster-service: "true"
    spec:
      selector:
        matchLabels:
          k8s-app: node-problem-detector  
          version: v0.1
          kubernetes.io/cluster-service: "true"
      template:
        metadata:
          labels:
            k8s-app: node-problem-detector
            version: v0.1
            kubernetes.io/cluster-service: "true"
        spec:
          hostNetwork: true
          containers:
          - name: node-problem-detector
            image: registry.k8s.io/node-problem-detector:v0.1
            securityContext:
              privileged: true
            resources:
              limits:
                cpu: "200m"
                memory: "100Mi"
              requests:
                cpu: "20m"
                memory: "20Mi"
            volumeMounts:
            - name: log
              mountPath: /log
              readOnly: true
          volumes:
          - name: log
            hostPath:
              path: /var/log/
  2. 使用 kubectl 启动节点问题检测器

    kubectl apply -f https://k8s.io/examples/debug/node-problem-detector.yaml
    

使用附加组件 pod 启用节点问题检测器

如果您使用的是自定义集群引导解决方案,并且不需要覆盖默认配置,则可以利用附加组件 pod 来进一步自动化部署。

创建 node-problem-detector.yaml,并将配置保存在控制平面节点上的附加组件 pod 目录 /etc/kubernetes/addons/node-problem-detector 中。

覆盖配置

在构建节点问题检测器的 Docker 镜像时,会嵌入 默认配置

但是,您可以使用 ConfigMap 覆盖配置

  1. 更改 config/ 中的配置文件

  2. 创建 ConfigMap node-problem-detector-config

    kubectl create configmap node-problem-detector-config --from-file=config/
    
  3. 更改 node-problem-detector.yaml 以使用 ConfigMap

    apiVersion: apps/v1
    kind: DaemonSet
    metadata:
      name: node-problem-detector-v0.1
      namespace: kube-system
      labels:
        k8s-app: node-problem-detector
        version: v0.1
        kubernetes.io/cluster-service: "true"
    spec:
      selector:
        matchLabels:
          k8s-app: node-problem-detector  
          version: v0.1
          kubernetes.io/cluster-service: "true"
      template:
        metadata:
          labels:
            k8s-app: node-problem-detector
            version: v0.1
            kubernetes.io/cluster-service: "true"
        spec:
          hostNetwork: true
          containers:
          - name: node-problem-detector
            image: registry.k8s.io/node-problem-detector:v0.1
            securityContext:
              privileged: true
            resources:
              limits:
                cpu: "200m"
                memory: "100Mi"
              requests:
                cpu: "20m"
                memory: "20Mi"
            volumeMounts:
            - name: log
              mountPath: /log
              readOnly: true
            - name: config # Overwrite the config/ directory with ConfigMap volume
              mountPath: /config
              readOnly: true
          volumes:
          - name: log
            hostPath:
              path: /var/log/
          - name: config # Define ConfigMap volume
            configMap:
              name: node-problem-detector-config
  4. 使用新的配置文件重新创建节点问题检测器

    # If you have a node-problem-detector running, delete before recreating
    kubectl delete -f https://k8s.io/examples/debug/node-problem-detector.yaml
    kubectl apply -f https://k8s.io/examples/debug/node-problem-detector-configmap.yaml
    

如果节点问题检测器作为集群附加组件运行,则不支持覆盖配置。附加组件管理器不支持 ConfigMap

问题守护进程

问题守护进程是节点问题检测器的子守护进程。它监控特定类型的节点问题,并将它们报告给节点问题检测器。有几种类型的受支持问题守护进程。

  • SystemLogMonitor 类型的守护进程监控系统日志,并根据预定义的规则报告问题和指标。您可以为不同的日志源定制配置,例如 filelogkmsgkernelabrtsystemd

  • SystemStatsMonitor 类型的守护进程收集各种与健康相关的系统统计信息作为指标。您可以通过更新其 配置文件 来定制其行为。

  • CustomPluginMonitor 类型的守护进程通过运行用户定义的脚本来调用和检查各种节点问题。您可以使用不同的自定义插件监控器来监控不同的问题,并通过更新 配置文件 来定制守护进程行为。

  • HealthChecker 类型的守护进程检查节点上 kubelet 和容器运行时的运行状况。

添加对其他日志格式的支持

系统日志监控器目前支持基于文件的日志、journald 和 kmsg。可以通过实现新的 日志观察器 来添加其他来源。

添加自定义插件监控器

您可以通过开发自定义插件来扩展节点问题检测器,以执行以任何语言编写的任何监控脚本。监控脚本必须符合退出代码和标准输出中的插件协议。有关更多信息,请参阅 插件接口提案

导出器

导出器将节点问题和/或指标报告给某些后端。支持以下导出器

  • Kubernetes 导出器:此导出器将节点问题报告给 Kubernetes API 服务器。临时问题将作为事件报告,而永久问题将作为节点状况报告。

  • Prometheus 导出器:此导出器将节点问题和指标作为 Prometheus(或 OpenMetrics)指标在本地报告。您可以使用命令行参数指定导出器的 IP 地址和端口。

  • Stackdriver 导出器:此导出器将节点问题和指标报告给 Stackdriver 监控 API。可以使用 配置文件 定制导出行为。

建议和限制

建议您在您的集群中运行节点问题检测器以监控节点运行状况。在运行节点问题检测器时,您可以预期每个节点的额外资源开销。通常这很好,因为

  • 内核日志增长相对缓慢。
  • 为节点问题检测器设置了资源限制。
  • 即使在高负载下,资源使用率也是可以接受的。有关更多信息,请参阅节点问题检测器 基准测试结果
上次修改时间:2023 年 8 月 24 日下午 6:38 PST:使用 code_sample shortcode 而不是 code shortcode (e8b136c3b3)