Virtual Kubelet
背景:
- Virtual Kubelet 是什么? Virtual Kubelet 是 Kubernetes kubelet 的一种实现,它伪装成 kubelet,目的是将 Kubernetes 集群连接到其他 API,这些API的入口被成为Provider。 这就使得 Kubernetes 的Node能够得到其他CaaS平台的支持,例如无服务器容器平台。
- Virtual Kubelet 不是什么? 不是用来实现集群联邦的手段 。它是用来扩展Node 属性到一个容器平台上。
Virtual kubelet 工作原理
目前的社区的virtual kubelet 不具备任何生产能力,但是提供了一个library,可以给各家公有云厂商,用来构建自己的virtual kubelet 版本。virtual kubelet 的代码总体比较简单,没太必要详解了。
- virtual kubelet 在启动的时候,会马上创建一个Node 出来
- node 背后的provider 提供接口查询相关node 信息
- 它会同时watch node 和 pod 的事件,也就是要有两个控制器,用于更新node 的信息
- 针对分配到该节点上的pod,增加消息处理
- 消息处理的过程,是把消息放在另一个队列里
- provider的worker 去处理,这里会作深度拷贝
- 处理完以后,更新pod 的status
Virtual kubelet 演示
- 从源码构建:
|
|
- 在项目的根目录,启动这个virtual kubelet.
- 修改下vkubelet-mock-0-cfg.json,把cpu 的数量改成30,这样你就可以随便创建pod了(当然都是mock的)
|
|
- check
|
|
- 创建一个demo
|
|
- check
|
|
结论
- virtual kubelet 无法支持 downward API,所以如果用pod 直接透传的话,目前看是无法支持istio的。
- 与admiralty 的关系,admiralty 只是借鉴了virtual kubelet 的node 管理的功能。
- 普通集群无法直接使用virtual kubelet 也没人这么做,如果这么做的话,最终会演化成admiralty。
virltual kubelet 被设计用来,扩展类似AWS fargate,阿里的ECI,Azure的ACI,目前腾讯的EKSCI还不支持 virtual kubelet。
目前针对客户的kubernetes集群如果是用virtual kubelet 管理,那么最终还是会变成admiralty的架构。
参考资料
Linked Mentions
-
No backlinks found.