Kubernetes 节点健康检查

3

我正在尝试理解Kubernetes中的Node-Controller。 Kubernetes 文档 提到使用 NodeStatus 和 LeaseObject 更新来执行节点心跳。 请有人解释一下为什么需要同时使用这两种机制来监视节点的健康状况。 Kubernetes 的主控节点是否在内部使用作业/定时作业来处理节点健康检查?

1个回答

1

Lease 是一种轻量级资源,可以提高节点心跳在集群扩展时的性能。

租约对象被跟踪作为一种帮助心跳在集群扩展时继续有效工作的方式。根据文档,这将是它们与心跳相关的主要功能。

NodeStatus则用于kubelet的心跳,NodeStatus也是k8s中其他控制器的重要信号。

例如:k8s调度程序负责在节点上安排pod。它会尝试找到最适合节点的位置,以优化节点上的内存、CPU和其他使用情况。然而,它不希望在节点状态条件设置为NetworkUnavailable:true或其他使该pod无法在该节点上运行的条件下在节点上安排pod。

如果有一个你不知道或不理解的信号,那么很可能有一个控制器使用该字段或信号来完成其逻辑。
编辑:
节点控制器是kube-controller-manager的一部分:
Kubernetes控制器管理器是嵌入了Kubernetes核心控制循环的守护程序。在机器人和自动化应用中,控制循环是一个非终止循环,用于调节系统状态。在Kubernetes中,控制器是通过apiserver监视群集共享状态并进行更改以尝试将当前状态移向所需状态的控制循环。今天随Kubernetes一起提供的控制器示例包括复制控制器、端点控制器、命名空间控制器和服务账户控制器。
逻辑上,每个控制器都是一个单独的进程,但为了减少复杂性,它们都编译成一个单一的二进制文件并在一个进程中运行。
编辑2:
根据您最新的评论,我们需要解决两个额外的问题:
1. "节点控制器如何处理节点健康检查" 2. "如何确定哪些控制器会影响特定的节点"

在实施k8s时,您可能不需要了解这个级别的细节。所有对您有用的详细信息已经在链接的公共文档中了。不需要担心,但我明白它带来了更实际的问题:

  1. 我不确定一个大集群会产生多少负载。

这就是大型集群考虑因素发挥作用的地方。它将向您展示如何处理大型集群以及在管理它们时可以使用哪些工具。


@Wiktor 感谢您的回答。是的,它部分地回答了我的问题。确实,NodeStatus被kubelet用于通知不仅仅是节点心跳。关于租约,我找到了一个链接,帮助我更好地理解租约。 https://github.com/hongchaodeng/community/blob/c0195f0382cee987cf9be0a411da553c5c261b0d/keps/0008-node-heartbeat.md我仍然需要了解node-controller如何处理节点健康检查,例如在错过健康检查的情况下。 - Kiran
嗨@Kiran。很高兴现在对您来说更清楚了。如果出现错过的心跳,节点控制器会更新“NodeReady”[Condition](https://kubernetes.io/docs/concepts/architecture/nodes/#condition)为“ConditionUnknown”,表示节点可能因任何原因而宕机。 - Wytrzymały Wiktor
@Wiktor 是的。节点控制器必须定期检查心跳以了解节点是否存活。我猜这将由节点控制器中的某种作业/定时作业完成。我正在寻找相关参考资料... - Kiran
实际上,node-controller 是一个守护进程,嵌入了 Kubernetes 随附的核心控制循环。我会更新我的答案以反映这一点。 - Wytrzymały Wiktor
@Wiktor 感谢您提供的信息。我知道 kube-controller 守护进程。正如您所指出的,我想了解控制循环处理是如何进行的。由于 Kube-controller 运行在主备模式下,所有监视都由单个 Kube-controller 节点完成。我不确定一个大集群会产生多少负载。我假设检查节点的健康状况或确保所需数量的 pod 正在运行之类的实际处理被卸载到某种工作人员任务中。 - Kiran

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接