31

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

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MzI5ODk5ODI4Nw%3D%3D&%3Bmid=2247491622&%3Bidx=1&%3Bsn=32024793984341b2cca5baed5b78c1e9
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

https://github.com/virtual-kubelet/tensile-kube

tensile-kube 名称由来

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

tensile-kube 诞生背景

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

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

https://github.com/kubernetes-sigs/kubefed

virtual-kubelet(VK)简介

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

tensile-kube 架构

IjAFryz.png!web

tensile-kube核心组件为4个:

  • virtual-node

    基于virtual-kubelet实现的了K8s 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 特点

  • 对原生K8s集群无侵入

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

  • K8s上层平台改造成本低

    在上层的K8s平台看来,通过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年起将K8s上到生产环境至今已经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状态同步实时性优化

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

项目地址

https://github.com/virtual-kubelet/tensile-kube

关于腾讯游戏Tenc容器团队

腾讯游戏Tenc容器团队负责腾讯游戏服务器资源的管理和运营。自2014年开始,通过Kubernetes、Docker等容器技术构建在线、离线业务同机混合部署的计算平台,实现游戏在线、离线业务的统一调度,支撑腾讯游戏业务的海量计算资源需求。

QjQJZbJ.png!web

2020年7月30日-8月1日

线上峰会介绍

这里有封H5【邀请函】

官方报名通道正式开启,首届线上KubeCon开源盛会即将起航

QV7bUzb.png!web

扫码 免费 注册

大会网站,https://cncf.lfasiallc.cn/

mIrIRvA.png!web

扫描二维码联系我们!

CNCF (Cloud Native Computing Foundation)成立于2015年12月,隶属于Linux  Foundation,是非营利性组织。 

CNCF 云原生计算基金会 )致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。请长按以下二维码进行关注。

yeqMBrF.jpg!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK