1

我在 Kubernetes 文档中看到了这个,

在 Kubernetes 中,控制器是监控集群状态的控制循环,然后根据需要进行更改或请求更改。每个控制器都尝试将当前集群状态移动到更接近所需状态。

还有这个,

部署控制器和作业控制器是作为 Kubernetes 本身一部分的控制器(“内置”控制器)的示例。

但是,我找不到控制回路是如何工作的。它是否每隔几秒检查一次集群的当前状态?如果是,默认值是多少?

我还在这里发现了一些有趣的东西,

kube-controller-manager 的部署控制器同步周期是多少?

4

1 回答 1

1

我想开始解释kube-controller-manager是一个单独的控制过程的集合,它们捆绑在一起以降低复杂性。

话虽如此,负责监控节点健康和其他一些参数的控制进程是节点控制器,它通过读取节点中Kubelet代理发送的心跳来实现。

根据 Kubernetes 的文档:

对于节点,有两种形式的心跳:

  • 更新.status节点的
  • 命名空间内的租赁对象kube-node-lease。每个 Node 都有一个关联的 Lease 对象。

.statusNode 的更新相比,Lease 是一种轻量级资源。使用 Leases for heartbeat 可以减少这些更新对大型集群的性能影响。

kubelet 负责创建和更新.status节点,以及更新它们的相关租约。

  • .status当状态发生变化或在配置的时间间隔内没有更新时,kubelet 会更新节点。节点更新的默认间隔.status是 5 分钟,这比不可访问节点的 40 秒默认超时时间要长得多。
  • kubelet 每 10 秒(默认更新间隔)创建并更新其 Lease 对象。租约更新独立于节点的.status. 如果 Lease 更新失败,kubelet 会重试,使用从 200 毫秒开始并以 7 秒为上限的指数退避。

至于节点中运行的Kubernetes 对象

Kubernetes 对象是 Kubernetes 系统中的持久实体。Kubernetes 使用这些实体来表示集群的状态。具体来说,他们可以描述:

  • 正在运行哪些容器化应用程序(以及在哪些节点上)
  • 这些应用程序可用的资源
  • 有关这些应用程序行为方式的策略,例如重启策略、升级和容错

Kubernetes 对象是“意图记录”——一旦创建对象,Kubernetes 系统将不断工作以确保对象存在。通过创建一个对象,您可以有效地告诉 Kubernetes 系统您希望集群的工作负载是什么样的;这是您的集群所需的状态。

根据 Kubernetes 对象,控制器机制负责维护其所需的状态。例如,部署对象使用下面的副本集来维护 Pod 所需的描述状态;而Statefulset Object使用它自己的 Controller 来达到同样的目的。

要查看集群管理的 Kubernetes 对象的完整列表,您可以运行以下命令:kubectl api-resources

于 2022-02-14T21:32:55.000 回答