我在 Kubernetes 文档中看到了这个,
在 Kubernetes 中,控制器是监控集群状态的控制循环,然后根据需要进行更改或请求更改。每个控制器都尝试将当前集群状态移动到更接近所需状态。
还有这个,
部署控制器和作业控制器是作为 Kubernetes 本身一部分的控制器(“内置”控制器)的示例。
但是,我找不到控制回路是如何工作的。它是否每隔几秒检查一次集群的当前状态?如果是,默认值是多少?
我还在这里发现了一些有趣的东西,
我在 Kubernetes 文档中看到了这个,
在 Kubernetes 中,控制器是监控集群状态的控制循环,然后根据需要进行更改或请求更改。每个控制器都尝试将当前集群状态移动到更接近所需状态。
还有这个,
部署控制器和作业控制器是作为 Kubernetes 本身一部分的控制器(“内置”控制器)的示例。
但是,我找不到控制回路是如何工作的。它是否每隔几秒检查一次集群的当前状态?如果是,默认值是多少?
我还在这里发现了一些有趣的东西,
我想开始解释kube-controller-manager是一个单独的控制过程的集合,它们捆绑在一起以降低复杂性。
话虽如此,负责监控节点健康和其他一些参数的控制进程是节点控制器,它通过读取节点中Kubelet代理发送的心跳来实现。
根据 Kubernetes 的文档:
对于节点,有两种形式的心跳:
- 更新
.status
节点的- 命名空间内的租赁对象
kube-node-lease
。每个 Node 都有一个关联的 Lease 对象。与
.status
Node 的更新相比,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