我试图更好地了解 Kubernetes Pod 调度和创建过程的工作原理,以及 和 之间的kubelet
交互kube-apiserver
。
我知道 Kubernetes 调度程序选择一个节点来分配一个新的 pod 并通知 API 服务器。但是,我不清楚 API 服务器如何通知相关kubelet
节点上的 pod 启动。是否有轮询过程kubelet
查询 API 服务器的更改?还是有事件监听/回调类型交互?
如果有人知道答案或可以指出我将不胜感激的一些文档的方向!
我试图更好地了解 Kubernetes Pod 调度和创建过程的工作原理,以及 和 之间的kubelet
交互kube-apiserver
。
我知道 Kubernetes 调度程序选择一个节点来分配一个新的 pod 并通知 API 服务器。但是,我不清楚 API 服务器如何通知相关kubelet
节点上的 pod 启动。是否有轮询过程kubelet
查询 API 服务器的更改?还是有事件监听/回调类型交互?
如果有人知道答案或可以指出我将不胜感激的一些文档的方向!
阿里巴巴有一篇关于调度程序内部工作原理的非常有见地的博客文章。来自博客:
调度器基本上是这样工作的:
关于 Kubelet 轮询:实际上,API 服务器支持“监视”模式,它使用 WebSocket 协议。通过这种方式,Kubelet 会收到主机名与 Kubelet 主机名相同的 Pod 的任何更改通知。
在没有源代码链接的情况下回答,但我肯定会kubelet
这样工作:
watch
放在名单上PodScheduled
状态中的 grep podspec.nodeName==$hostname
Query Parameters
...
watch Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.
监视功能继承自 etcd(API 服务器背后的数据库):https ://etcd.io/docs/v3.2.17/learning/api/ 。见Watch streams
:
Watches are long running requests and use gRPC streams to stream event data.
所以这是一种长轮询。