共计 2103 个字符,预计需要花费 6 分钟才能阅读完成。
这篇“tensile-kube 的特点是什么”文章的知识点大部分人都不太理解,所以丸趣 TV 小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“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 会十分方便,没有额外的学习成本。
其余可能的适用场合
边缘计算
混合云
以上就是关于“tensile-kube 的特点是什么”这篇文章的内容,相信大家都有了一定的了解,希望丸趣 TV 小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注丸趣 TV 行业资讯频道。