节点问题探测器 是一个 DaemonSet 用来监控节点健康。它从各种守护进程收集节点问题,并以NodeCondition 和 Event 的形式报告给 apiserver 。
它现在支持一些已知的内核问题检测,并将随着时间的推移,检测更多节点问题。
目前,Kubernetes 不会对节点问题检测器监测到的节点状态和事件采取任何操作。将来可能会引入一个补救系统来处理这些节点问题。
更多信息请参阅 这里。
您必须拥有一个 Kubernetes 集群,并且必须使用 kubectl 命令行工具与你的集群进行通信。如果您还没有一个集群,您可以通过 Minikube 创建一个集群,或者使用这些 Kubernetes playground :
To check the version, enter kubectl version
.
节点问题检测器在 gce 集群中以集群插件的形式默认启用。
您可以在运行 kube-up.sh
之前,以设置环境变量 KUBE_ENABLE_NODE_PROBLEM_DETECTOR
的形式启用/禁用它。
要在 GCE 之外的其他环境中启用节点问题检测器,您可以使用 kubectl
或插件 pod。
这是在 GCE 之外启动节点问题检测器的推荐方法。它的管理更加灵活,例如覆盖默认配置以使其适合您的环境或检测自定义节点问题。
node-problem-detector.yaml
:
debug/node-problem-detector.yaml
|
---|
|
请注意保证您的系统日志路径与您的 OS 发行版相对应。
步骤 2: 执行 kubectl
来启动节点问题检测器:
kubectl create -f https://k8s.io/examples/debug/node-problem-detector.yaml
这适用于拥有自己的集群引导程序解决方案的用户,并且不需要覆盖默认配置。 他们可以利用插件 Pod 进一步自动化部署。
只需创建 node-problem-detector.yaml
,并将其放在主节点上的插件 pod 目录 /etc/kubernetes/addons/node-problem-detector
下。
构建节点问题检测器的 docker 镜像时,会嵌入默认配置。
不过,您可以像下面这样使用 ConfigMap 将其覆盖:
config/
中更改配置文件。kubectl create configmap node-problem-detector-config --from-file=config/
创建 node-problem-detector-config
。node-problem-detector.yaml
以使用 ConfigMap:
debug/node-problem-detector-configmap.yaml
|
---|
|
步骤 4: 使用新的 yaml 文件重新创建节点问题检测器:
kubectl delete -f https://k8s.io/examples/debug/node-problem-detector.yaml # If you have a node-problem-detector running
kubectl create -f https://k8s.io/examples/debug/node-problem-detector-configmap.yaml
请注意,此方法仅适用于通过 kubectl
启动的节点问题检测器。
由于插件管理器不支持ConfigMap,因此现在不支持对于作为集群插件运行的节点问题检测器的配置进行覆盖。
内核监视器 是节点问题检测器中的问题守护进程。它监视内核日志并按照预定义规则检测已知内核问题。
内核监视器根据 config/kernel-monitor.json
中的一组预定义规则列表匹配内核问题。
规则列表是可扩展的,您始终可以通过覆盖配置来扩展它。
您可以使用新的状态描述来扩展 config/kernel-monitor.json
中的 conditions
字段以支持新的节点状态。
{
"type": "NodeConditionType",
"reason": "CamelCaseDefaultNodeConditionReason",
"message": "arbitrary default node condition message"
}
您可以使用新的规则描述来扩展 config/kernel-monitor.json
中的 rules
字段以检测新问题。
{
"type": "temporary/permanent",
"condition": "NodeConditionOfPermanentIssue",
"reason": "CamelCaseShortReason",
"message": "regexp matching the issue in the kernel log"
}
不同操作系统发行版的内核日志的可能不同。 config/kernel-monitor.json
中的 log
字段是容器内的日志路径。您始终可以修改配置使其与您的 OS 发行版匹配。
内核监视器使用 [Translator
] 插件将内核日志转换为内部数据结构。我们可以很容易为新的日志格式实现新的翻译器。
我们建议在集群中运行节点问题检测器来监视节点运行状况。但是,您应该知道这将在每个节点上引入额外的资源开销。一般情况下没有影响,因为:
此页是否对您有帮助?
Thanks for the feedback. If you have a specific, answerable question about how to use Kubernetes, ask it on Stack Overflow. Open an issue in the GitHub repo if you want to report a problem or suggest an improvement.