内容简介:https://github.com/virtual-kubelet/tensile-kubetensile-kube 名称由来
近期,腾讯游戏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 架构
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 等容器技术构建在线、离线业务同机混合部署的计算平台,实现游戏在线、离线业务的统一调度,支撑腾讯游戏业务的海量计算资源需求。
2020年7月30日-8月1日
: 线上峰会介绍
: 官方报名通道正式开启,首届线上KubeCon开源盛会即将起航
扫码 免费 注册
: 大会网站,https://cncf.lfasiallc.cn/
扫描二维码联系我们!
CNCF (Cloud Native Computing Foundation)成立于2015年12月,隶属于Linux Foundation,是非营利性组织。
CNCF ( 云原生计算基金会 )致力于培育和维护一个厂商中立的开源生态系统,来推广云原生技术。我们通过将最前沿的模式民主化,让这些创新为大众所用。请长按以下二维码进行关注。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 用 Git Subtree 在多个 Git 项目间双向同步子项目
- Spring Cloud 子项目 Spring Cloud Edgware.SR1 发布
- LLVM的新“f18” Fortran编译器子项目可能被称为... Fortran
- 支持边云协同终身学习特性,KubeEdge 子项目 Sedna 0.3.0 版本发布!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
CSS实战手册(第2版)
[美] David Sawyer McFarland / 俞黎敏 / 电子工业出版社 / 2010-6 / 69.80元
本书从介绍最基本的CSS知识开始,到建立用于打印网页的CSS和改进你的CSS习惯的最佳实践。将关于CSS的选择器、继承、层叠、格式化、边距、填充、边框、图片、网站导航、表格、表单、浮动布局、定位网页上的元素,以及用于打印网页的CSS等技术通过逐步地讲解与教程串联了起来。每章内容从简单到复杂,一步一步地建立起一个完整的教程示例,并在每章都会详细讨论一些技巧、最佳实践和各浏览器之间一致性的兼容问题及如......一起来看看 《CSS实战手册(第2版)》 这本书的介绍吧!