天翼云是中国电信倾力打造的云服务品牌,致力于成为领先的云计算服务提供商。提供云主机、CDN、云电脑、大数据及AI等全线产品和场景化解决方案。
分类: 云计算
2025-02-06 14:59:52
本文分享自天翼云开发者社区《初探集群联邦》,作者:echooo
一.什么是集群联邦?
集群联邦(Federation)是将多个kubenetes集群注册到统一的控制平面,为用户提供统一API入口的多集群解决方案。
集群联邦设计的核心是提供在全局层面对应用的描述能力,并将联邦对象实例化为kubernetes对象,分发到联邦管辖的各个成员集群中。
如下图,在San
Francisco,New York,Berlin三个地域,每个地域有一个用户集群,集群内部本身是不跨地域的,网络延迟友好,etcd的性能比较 好。在此基础之上,提供一个统一的接入面,即集群联邦。包括federation api server,etcd,注意这个etcd是跨数据中心的,federation controller manager,用于分发用户请求。
二.集群联邦的必要性
1.数据库存储
etcd作为kubernetes集群的后盾存储数据库,对空间大小的要求比较苛刻,这限制了集群能存储对象的数量和大小。
2.内存占用
为提高系统效率,api server作为api网关,会对集群的所有对象最缓存,集群越大,缓存需要的内存空间就越大。其他kubernetes控制器也需要对侦听的对象构建客户端缓存,这些都需要占用系统内存。
3.控制器复杂度
kubernetes的一个业务流程是由多个对象和控制器联动完成的,即使控制器遵循了设计原则,随着对象数量的增长,控制器的处理耗时也会越来越长。
4.单个计算节点资源上限
单个计算节点的资源,不仅仅是cpu,内存等可量化资源,还有端口,进程数量等不可量化资源。
5.故障域控制
集群规模越大,控制面组件出现故障时影响范围就越大。
6.应用高可用部署
生产应用通常需要多数据中心部署来保障跨地域高可用。
7.混合云
私有云+公有云的混合云模式逐渐成为企业的主流架构。
三.集群联邦的核心架构
1.etcd
作为分布式存储后端存储所有对象。
2.api server
作为api网关,接受所有来自用户及控制平面组件的请求。
3.控制器
不同的控制器对联邦层面的对象进行管理,协调。调度控制器在联邦层面对应用进行调度,分配。集群联邦支持灵活的对象扩展,允许将基本Kubernetes对象扩展为集群联邦对象,并通过统一的联邦控制器推送和收集状态。
四.集群如果注册到集群联邦?---集群注册中心
1.集群注册中心--ClusterRegistry提供了所以联邦下辖的集群清单,以及每个集群的认证信息,状态信息等。
2.集群联邦本身不提供算力,它只承担多集群的协调工作,所有被管理的集群都被注册到集群联邦中。
3.集群联邦使用了单独的KubeFedCluster对象(CRD来定义)来管理集群注册信息,在该对象的定义中,不仅包含集群的注册信息,还包括集群的认证印象的引用,以明确每个集群使用的认证信息;该对象还包含各个集群的健康状态,域名等;当控制器出现异常时,直接通过集群状态信息即可获知控制器异常原因。
五.定义联邦要分发的对象是什么? --Type Configuration
1.定义了哪些kubernetes api资源要被用于联邦管理
2.如果想新增federated api,可通过kubefedctl enable 命令建立
3.比如想将ConfigMap资源通过联邦机制建立到不同的集群上时,必须先在Federation Host集群中,通过CRD创建新资源FederationConfigmap,接着再建立名称为configmaps的Type configuration(FederatedConfigMap)资源,然后描述ConfigMap要被FederatedConfigMap管理,这样KubeFed Controller 才能知道如何建立Federated资源。
六.联邦对象由什么组成?
1.template:定义Kubernetes对象的模板,它的内容为完整的Kubernetes对象。
2.placement:定义联邦对象需要被同步的目标集群,其值可以是具体的集群名单,也可是clusterSelect选择对应标签的集群。
3.overrides:不同目标集群中,对Kubernetes对象模板的本地化属性,在实际部署应用时,通常会通过调整不同集群中的配置模板,部署符合特定集群需求的应用,以更好的发挥网络,计算资源,存储等。
七.联邦如何调度?
KubeFed提供了一种自动化机制来将工作负载分散到不同的集群中,这种能够基于总副本数与集群的定义策略来将deployment或者Replicaset资源进行编排。编排策略是通过建立ReplicaSchedulingPreference(RSP)文件,再由Kubefed RSP Controller监听与撷取RSP内容将工作负载实例建立到指定的集群上。