答案 0 :(得分:1)
“该工具旨在使群集管理堆栈中的上游层可以看到各种节点问题。它是一个守护程序,它在每个节点上运行,检测节点问题并将其报告给apiserver。” < / p>
好的,但是...这实际上是什么意思?我如何知道它是否进入了api服务器?
前后的样子如何?知道这一点将有助于我了解它在做什么。
在安装Node Problem Detector之前,我会看到:
Bash# kubectl describe node ip-10-40-22-166.ec2.internal | grep -i condition -A 20 | grep Ready -B 20
Conditions:
Type Status LastHeartbeatTime LastTransitionTime Reason Message
---- ------ ----------------- ------------------ ------ -------
NetworkUnavailable False Thu, 20 Jun 2019 12:30:05 -0400 Thu, 20 Jun 2019 12:30:05 -0400 WeaveIsUp Weave pod has set this
OutOfDisk False Thu, 20 Jun 2019 18:27:39 -0400 Thu, 20 Jun 2019 12:29:44 -0400 KubeletHasSufficientDisk kubelet has sufficient disk space available
MemoryPressure False Thu, 20 Jun 2019 18:27:39 -0400 Thu, 20 Jun 2019 12:29:44 -0400 KubeletHasSufficientMemory kubelet has sufficient memory available
DiskPressure False Thu, 20 Jun 2019 18:27:39 -0400 Thu, 20 Jun 2019 12:29:44 -0400 KubeletHasNoDiskPressure kubelet has no disk pressure
PIDPressure False Thu, 20 Jun 2019 18:27:39 -0400 Thu, 20 Jun 2019 12:29:44 -0400 KubeletHasSufficientPID kubelet has sufficient PID available
Ready True Thu, 20 Jun 2019 18:27:39 -0400 Thu, 20 Jun 2019 12:30:14 -0400 KubeletReady kubelet is posting ready status
安装节点问题检测器后,我看到:
Bash# helm upgrade --install npd stable/node-problem-detector -f node-problem-detector.values.yaml
Bash# kubectl rollout status daemonset npd-node-problem-detector #(wait for up)
Bash# kubectl describe node ip-10-40-22-166.ec2.internal | grep -i condition -A 20 | grep Ready -B 20
Conditions:
Type Status LastHeartbeatTime LastTransitionTime Reason Message
---- ------ ----------------- ------------------ ------ -------
DockerDaemon False Thu, 20 Jun 2019 22:06:17 -0400 Thu, 20 Jun 2019 22:04:14 -0400 DockerDaemonHealthy Docker daemon is healthy
EBSHealth False Thu, 20 Jun 2019 22:06:17 -0400 Thu, 20 Jun 2019 22:04:14 -0400 NoVolumeErrors Volumes are attaching successfully
KernelDeadlock False Thu, 20 Jun 2019 22:06:17 -0400 Thu, 20 Jun 2019 22:04:14 -0400 KernelHasNoDeadlock kernel has no deadlock
ReadonlyFilesystem False Thu, 20 Jun 2019 22:06:17 -0400 Thu, 20 Jun 2019 22:04:14 -0400 FilesystemIsNotReadOnly Filesystem is not read-only
NetworkUnavailable False Thu, 20 Jun 2019 12:30:05 -0400 Thu, 20 Jun 2019 12:30:05 -0400 WeaveIsUp Weave pod has set this
OutOfDisk False Thu, 20 Jun 2019 22:07:10 -0400 Thu, 20 Jun 2019 12:29:44 -0400 KubeletHasSufficientDisk kubelet has sufficient disk space available
MemoryPressure False Thu, 20 Jun 2019 22:07:10 -0400 Thu, 20 Jun 2019 12:29:44 -0400 KubeletHasSufficientMemory kubelet has sufficient memory available
DiskPressure False Thu, 20 Jun 2019 22:07:10 -0400 Thu, 20 Jun 2019 12:29:44 -0400 KubeletHasNoDiskPressure kubelet has no disk pressure
PIDPressure False Thu, 20 Jun 2019 22:07:10 -0400 Thu, 20 Jun 2019 12:29:44 -0400 KubeletHasSufficientPID kubelet has sufficient PID available
Ready True Thu, 20 Jun 2019 22:07:10 -0400 Thu, 20 Jun 2019 12:30:14 -0400 KubeletReady kubelet is posting ready status
请注意,我寻求帮助,提出了一种在所有节点上都可以看到的方法,Kenna Ofoegbu提出了这个超级有用且易读的宝石:
zsh# nodes=$(kubectl get nodes | sed '1d' | awk '{print $1}') && for node in $nodes; do; kubectl describe node | sed -n '/Conditions/,/Ready/p' ; done
Bash# (same command, gives errors)
好的,现在我知道节点问题检测器的作用,但是...向节点添加条件有什么好处,我如何使用该条件做有用的事情?
问题:如何使用Kubernetes节点问题检测器?
用例#1:自动修复异常节点
步骤1.)安装节点问题检测器,以便它可以将新的条件元数据附加到节点。
第2步。)利用Planetlabs / draino束缚和排空条件不好的节点。
第3步。)利用https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler自动修复。 (当节点被封锁并耗尽后,将被标记为不可调度,这将触发新节点的供应,然后坏节点的资源利用率将非常低,这将导致坏节点被取消配置)
来源:https://github.com/kubernetes/node-problem-detector#remedy-systems
用例#2:公开不健康的节点事件,以便Kubernetes可以检测到该事件,然后将其注入到您的监视堆栈中,以便您具有事件发生的时间和时间的可审核历史记录。
这些不健康的节点事件记录在主机节点上的某个位置,但是通常,主机节点会生成大量的嘈杂/无用的日志数据,因此默认情况下通常不会收集这些事件。
节点问题检测器知道在主机节点上查找这些事件的位置,并在看到负面结果的信号时将其过滤到其日志中,从而滤除噪声,这不会产生干扰。
Pod日志很可能会被提取到ELK和Prometheus Operator堆栈中,在其中可以对其进行检测,发出警报,进行存储和绘制图形。
此外,请注意,没有什么可以阻止您实现两个用例。
答案 1 :(得分:0)
考虑到node-problem-detector是Kubernetes addon,您需要在自己的Kubernetes服务器上install that addon。
Kubernetes CLuster有addon-manager将使用它。
答案 2 :(得分:0)
你的意思是:如何安装它?
kubectl create -f https://github.com/kubernetes/node-problem-detector.yaml