关键字:开源、3.6k Star、伪装的kubelet实现
结论:
- 成熟方案,可使用
- 可以满足在公司内部集群资源不足或短时高负载扩容时,将扩增的Pod通过VK形式扩展到华为云、阿里云(每个云厂商(provider)有基于社区Virtual Kubelet的实现)
- 公司使用的多租户多集群Pass层天然支持,只需开发何时以Label等调度逻辑的产品化
- 支持CPU、GPU(具体看云厂商的支持)
是什么?
kubelet是每个Node节点上的节点代理
- 根据PodSpec描述对Pod生命周期进行控制
- 对当前节点健康、资源信息监控&上报
virtual-kubelet是k8s kubelet的一种实现,自身是个library(库)。它伪装成Kubectl模拟出Node对象(虚拟节点(Virtual Node)),作为一种虚拟的 kubelet 用来连接 Kubernetes 集群和其他平台的 API,将接收的k8s原生资源对接到其他云(具体对接行为由provider使用此library去实现)
当Kubernetes 将 Pod 调度到虚拟节点上时,Virtual Kubelet 会调用 provider 的 API 接口,将创建请求动态转发给底层的 provider 的 API 接口
当前支持功能如下:
- 创建,删除和更新Pod
- 容器 logs, exec, and metrics
- 获取单个Pod或多个Pod状态
- 节点地址,节点容量,节点守护程序
- 自定义虚拟网络
优点:
- 对原生Kubernetes集群无侵入
- 提供Kubelet典型特性接口,Provider仅需实现对应服务管理平台资源到Node和Pod对象特性的实现
解决了什么问题?
-
弹性能力、免容量规划、按需使用按需计费。集群资源不足调度时,VK将Pod调度到第三方集群中(如阿里ECI、华为CCI)
-
碎片资源整合(将多个集群碎片资源整合成一个大的资源池,需要比较重的Scheduler开发)- tensile-kube
- 一个作业需要N个资源,但是现有集群A、B、C等所剩资源都不满足N,而集群A、B、C资源总和又能满足N。
-
便捷化运维集群(类似KOK,多集群调度方案) - tensile-kube
- 当我们进行单个集群升级、变更时,往往需要通知业务迁移、集群屏蔽调度等,在此设计下,我们只需要将virtual-node设置为不可能调度。这样后期单个集群升级、替换,可以只在运维层操作,用户不用从旧集群迁移至新集群、无感知。
如何做到的?
工作原理图
已提供的实现者(provider)
| 支持类型 | 云容器实例 | |
|---|---|---|
| Alibaba Cloud ECI Provider | ECI | |
| Azure Container Instances Provider | ||
| AWS Fargate Provider | Amazon ECS | |
| OpenStack Zun Provider | ||
| Tensile Kube Provider | ||
| HUAWEI | 无状态负载(Deployment)、有状态负载(StatefulSet)、普通任务(Job) | CCI |
新的提供者需实现:
案例&实践
当前有两个集群,左侧集群是含有VK节点的集群,右侧集群则是我们期望Pod实际使用资源的集群,也就是在左侧集群创建一个指定pod.spec.nodeName=virtual-kubelet节点的Pod,实际上运行在右侧集群上。
准备以自建集群和华为云实现,打通中...
问题
-
以VK启动在其他平台的Pod,网络互通形式?
-
考虑资源同步问题 configMap/pvc/pv/字典、镜像
-
日志收集
- sidecar(filebeat + logstash + elasticsearch)
-
资源回传
限制
Severless容器服务,用户不感知Node,所以不支持hostpath挂载以及DaemonSet部署
参考资料
github.com/virtual-kub…
www.kubernetes.org.cn/9574.html
www.bencorn.com/2022/01/22/…
k8s.huweihuang.com/project/mul…
developer.aliyun.com/ask/355041
www.modb.pro/db/399012
support.huaweicloud.com/usermanual-…
support.huaweicloud.com/bestpractic…
aws.amazon.com/cn/blogs/ch…
help.aliyun.com/document_de…
help.aliyun.com/document_de…
help.aliyun.com/document_de…
github.com/virtual-kub…
dockone.io/article/105…
github.com/virtual-kub…