【发布时间】:2021-05-03 09:25:39
【问题描述】:
我正在尝试了解 Kubernetes 中的节点控制器。 Kubernetes documentation 提到节点心跳是使用 NodeStatus 和 LeaseObject 更新完成的。有人,请解释为什么需要这两种机制来监控节点健康。 Kubernetes master 内部是否使用作业/cronjob 进行节点健康检查处理?
【问题讨论】:
标签: kubernetes kubernetes-health-check
我正在尝试了解 Kubernetes 中的节点控制器。 Kubernetes documentation 提到节点心跳是使用 NodeStatus 和 LeaseObject 更新完成的。有人,请解释为什么需要这两种机制来监控节点健康。 Kubernetes master 内部是否使用作业/cronjob 进行节点健康检查处理?
【问题讨论】:
标签: kubernetes kubernetes-health-check
Lease 是一种轻量级资源,随着集群的扩展,它可以提高节点心跳的性能。
跟踪 Lease 对象是一种帮助心跳在集群扩展时继续有效运行的方式。根据文档,这将是它们与心跳相关的主要功能。
NodeStatus 被 kubelet 用于心跳,NodeStatus 也是 k8s 中其他控制器的重要信号。
例如:k8s 调度器负责调度节点上的 Pod。它试图找到最适合节点的节点,以优化节点上的内存、cpu 和其他使用情况。但是,它不想在 node status 条件设置为 NetworkUnavailable: true 的节点上调度 Pod,或者其他一些会使 Pod 不适合在该节点上运行的条件。
如果有一个或多个您不知道或不理解的信号,则很有可能存在使用该字段或信号来完成其逻辑的控制器。
编辑:
节点控制器是kube-controller-manager的一部分:
Kubernetes 控制器管理器是一个嵌入核心的守护进程 Kubernetes 附带的控制循环。在机器人技术的应用和 自动化,控制回路是一个非终止回路,它调节 系统的状态。在 Kubernetes 中,控制器是一个控制回路 通过 apiserver 监视集群的共享状态和 进行更改以尝试将当前状态移向所需的状态 状态。今天与 Kubernetes 一起提供的控制器的例子是 复制控制器、端点控制器、命名空间控制器、 和 serviceaccounts 控制器。
从逻辑上讲,每个控制器都是一个单独的进程,但为了降低复杂性,它们都被编译成一个二进制文件并在一个进程中运行。
EDIT_2:
根据您最新的 cmets,我们还有 2 点需要解决:
- “节点控制器如何处理节点健康检查”
在实现 k8s 时,您可能不需要了解这种详细程度。所有对你有用的细节都已经在linked public docs 中了。无需担心,但我知道它带来了更实际的问题:
- 我不确定大型集群会产生多少负载。
这就是Considerations for large clusters 提供帮助的地方。它将向您展示如何处理大型集群以及在管理它们时可以使用哪些工具。
【讨论】:
NodeReadyCondition 更新为ConditionUnknown,表明节点可能因任何原因而关闭。