扩展Kubernetes到无限|Virtual Kubelet子项目tensile-kube介绍

K8s已经成为一线大厂分布式平台的标配技术。你是不是还在惆怅怎么掌握它?来这里,大型互联网公司一线工程师亲授,不来虚的,直接上手实战,3天时间带你搭建K8s平台,快速学会K8s,点击下方图片可了解培训详情。

近期,腾讯游戏Tenc容器团队对外开源了Kubernetes(K8s)多集群调度方案tensile-kube,本文将简单介绍tensile-kube。

项目地址:https://github.com/virtual-kubelet/tensile-kube

tensile-kube名称由来

tensile名为可扩展的,可延伸的,同时tensile中也包含了tencent和tenc的意思。

tensile-kube诞生背景

腾讯游戏Tenc(容器)计算平台线上有数十个Kubernetes集群,这些集群都存在一些碎片资源,无法得到有效利用。常见的场景是:一个作业需要N个资源,但是现有集群A、B、C等所剩资源都不满足N,而集群A、B、C资源总和又能满足N。此外,我们还有另一种场景:业务有一种类型的服务需要同时发布到多个集群。

其实,业界很早就有类似的需求,也诞生出了Federation等方案,但是这些对于现有的Kubernetes会有较大的改造成本,同时增加了很多繁杂的CRD。因而,我们自主研发了更轻量的基于virtual-kubelet的解决方案tensile-kube。

Federation GitHub地址:https://github.com/kubernetes-sigs/kubefed

virtual-kubelet(VK)简介

VK是用微软开源的一个基础库,其实现通常叫做provider,早期的VK中包含了各种provider,目前VK社区已经将其独立出来,分为:virtual-kubelet、node-cli和provider。virtual-kubelet提供了一种抽象能力,通过实现provider,用户就实现了一个虚拟的Kubernetes节点,用户的Pod可以调度到该节点。virtual-kubelet的核心功能是Node和Pod的生命周期管控。

tensile-kube架构

tensile-kube核心组件为4个:

  • virtual-node,基于virtual-kubelet实现的Kubernetes provider功能,同时增加了多个controller,用于同步ConfigMap、Sercret、Service等资源。

  • webhook,对Pod中可能对上层集群调度产生干扰的字段进行转换,将其写入annotation中,virtual-node在创建Pod时再将其恢复,避免影响用户期望的调度结果。

  • descheduler,用于避免资源碎片带来的影响,这个组件我们基于社区的descheduler进行了二次开发,使之更适用于这个场景。

  • multi-scheduler,主要用于连接下层集群的API Server,避免资源碎片的影响,在调度时判断virtual-node的资源是否足够。(图中未画出来,multi-scheduler会比较重,不是特别推荐使用;如果要使用,需将上层集群kube-scheduler替换成multi-scheduler。)

tensile-kube特点

  • 对原生Kubernetes集群无侵入,tensile-kube中,通过virtual-node建立上下层集群之间的连接,上层的Pod通过调度器调度到virtual-node,随后将Pod同步到下层集群创建,整个方案对于Kubernetes无侵入。

  • Kubernetes上层平台改造成本低,在上层的Kubernetes平台看来,通过tensile-kube连接的集群就是一个大集群,可以完全屏蔽区别,所以对于平台来说,也几乎是不需要改造的。

  • 基于原生virtual-kubelet开发,tensile-kube基于原生virtual-kubelet打造,没有过多额外的依赖,同时又保持原生virtual-kubelet的诸多功能,后续更新升级方便。

这些使得tensile-kube可以方便的实现多个集群的调度管理,且适用于大多数场景。

tensile-kube主要能力

  • 集群碎片资源整合,对于离线集群来说,或多或少存在资源碎片。通过tensile-kube,可以将这写碎片合成一个大的资源池,将闲置的资源充分利用起来。

  • 服务多集群调度,结合Affinity等,可以实现Pod的多集群调度。对于1.16及以上集群还可以基于TopologySpreadConstraint实现更细粒度的跨级群调度。

  • 服务跨集群通信,tensile-kube原生提供通过Service进行跨集群通信的能力。但是前提是:需要不同集群之间的网络通过Pod IP可以互通,如:私有集群共用一个Flannel等。

  • 便捷化运维集群,当我们进行单个集群升级、变更时,往往需要通知业务迁移、集群屏蔽调度等,在tensile-kube的支持,我们只需要将virtual-node设置为不可能调度。

  • 原生kubectl能力,tensile kubectl支持原生kubectl所有操作,包括:kuebctl logs和kubectl exec。这对于运维人员去管理对于下层集群上的Pod会十分方便,没有额外的学习成本。

其余可能的适用场合

  • 边缘计算

  • 混合云

RoadMap

Tenc自2014年起将Kubernetes上到生产环境至今已经6年。tensile-kube作为我们精心打造的开源产品融合了我们多年的容器相关经验,目前基于tensile-kube,我们已经将原先当集群2000台规模的老集群扩展到了万级别,并且还在持续将集群迁移到该集群。此前,我们已经向VK社区提交多了诸多PR,以扩展VK功能和优化其性能,后续我们主要在以下几方面继续完善VK和tensile-kube:https://github.com/pulls?q=is%3Apr+author%3Acwdsuzhou+archived%3Afalse+is%3Aclosed+virtual-kubelet

  • 多集群调度器优化

  • provider状态同步实时性优化

  • 多租户场景下多个子集群资源名称冲突

Kubernetes实战培训

Kubernetes实战培训将于2020年7月24日在深圳开课,3天时间带你系统掌握Kubernetes,学习效果不好可以继续学习。本次培训包括:云原生介绍、微服务;Docker基础、Docker工作原理、镜像、网络、存储、数据卷、安全;Kubernetes架构、核心组件、常用对象、网络、存储、认证、服务发现、调度和服务质量保证、日志、监控、告警、Helm、实践案例等,点击下方图片或者阅读原文链接查看详情。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值