混合云、多云实现- virtual-kubelet

951 阅读3分钟

关键字:开源、3.6k Star、伪装的kubelet实现

结论:

  • 成熟方案,可使用
  • 可以满足在公司内部集群资源不足或短时高负载扩容时,将扩增的Pod通过VK形式扩展到华为云、阿里云(每个云厂商(provider)有基于社区Virtual Kubelet的实现)
  • 公司使用的多租户多集群Pass层天然支持,只需开发何时以Label等调度逻辑的产品化
  • 支持CPU、GPU(具体看云厂商的支持)

image.png

是什么?

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设置为不可能调度。这样后期单个集群升级、替换,可以只在运维层操作,用户不用从旧集群迁移至新集群、无感知。

image.png

如何做到的?

工作原理图

image.png

已提供的实现者(provider)

支持类型云容器实例
Alibaba Cloud ECI ProviderECI
Azure Container Instances Provider
AWS Fargate ProviderAmazon ECS
OpenStack Zun Provider
Tensile Kube Provider
HUAWEI无状态负载(Deployment)、有状态负载(StatefulSet)、普通任务(Job)CCI

新的提供者需实现:

image.png

案例&实践

当前有两个集群,左侧集群是含有VK节点的集群,右侧集群则是我们期望Pod实际使用资源的集群,也就是在左侧集群创建一个指定pod.spec.nodeName=virtual-kubelet节点的Pod,实际上运行在右侧集群上。

准备以自建集群和华为云实现,打通中...

image.png

问题

  • 以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…