KubeCon内容回顾之ControllerMesh
前几日,由 Linux 基金会、CNCF 主办的 KubeCon + CloudNativeCon + Open Source Summit China 2023 在上海跨国采购会展中心隆重召开。作为KusionStack的一部分,ControllerMesh也有幸登上了讲台,让我们再次回顾下相关内容~
|内容回顾|
作为Kubernetes的开发者,我们会使用Operator来扩展能力,通过自动化运维任务和管理生命周期来简化和自动化应用程序的部署和管理。然而随着K8s规模的提高,会给Operator自身的运行以及部署带来许多问题。
大规模场景带来的问题与挑战
效率问题
单机高负载,需要更多的计算、存储和网络资源
受List全集群资源量的影响,启动时间增加,甚至无法启动
局部用户发起大量变更会影响其他用户的交付效率,公平性难以保证
部署升级问题
无法灰度升级
无法水平扩展
且这种独特的工作模式,新版本发布一次性拉齐,一旦出现问题往往就是毁灭性的。对于有着高可用需求的平台来讲,这是无法容忍的。
为了解决这些问题,我们迫切需要Operator具备以下能力:
灰度发布能力。在发布过程中新老版本并存且相互隔离,新版本的Operator实例可以在小范围内进行验证,并逐渐扩大管控范围,进行有效的风险控制。
水平扩展能力。能够将集群水平划分为多个分区,每个分区相互隔离、有独立的主备Pod,并且可以自由的进行分区调整。
ControllerMesh —— 帮助你轻松管理Operator
为了实现这些能力,我们借鉴ServiceMesh的架构,实现了一个针对Operator的ControllerMesh架构。类似地,ControllerMesh也分为控制平面和数据平面。在控制平面,会做一些配置的管理和分发;数据平面由一组代理sidecar组成,它们与每个Operaotr实例部署在一起,并负责处理之间的通信。这套架构对Operator是透明、无侵入的。任何基于社区controller-runtime实现的Operator都可以轻松接入,支持跨语言。就像istio一样,一个label就能实现容器的注入和请求的代理。
基于这套架构,我们通过sidecar代理了包括ApiServer请求在内所有的请求,能够针对请求轻松地实现一些安全防护策略,比如熔断限流策略。同时,也能够轻易地篡改发往ApiServer的请求。
代理容器通过向List&Watch请求注入LabelSelector参数,来限制每个Operator实例资源的缓存和事件的监听。ControllerMesh Manager通过自动维护一些基础的Label,并向Operator的每个实例发送不同的规则配置,进而实现了Operator的分片部署。
配置样例
各种Operator相关的配置都以CRD的形式实现,Manager会实时监听配置变更并分发到代理容器中。
ShardingConfig
使用分片配置,用户可以用spec.root字段配置一个基础的分片策略,能够指定特定的Namespace作为灰度分片进行局部验证,同时将集群划分为多个分区被不同Operator实例所接管。当然,也可以使用spec.limits字段来为每个分片定制更加精细的策略。
CircuitBreaker
熔断限流配置中,除了基础的REST匹配限制策略,还能够针对Operator对资源的具体操作进行限制,比如,限制Pod的删除速率或者按照策略熔断Pod的删除行为。
渐进式发布
K8s Workload在滚动发布时,它不会关注Pod是不是Leader,只会按照既定的策略去升级Pod。最坏情况下,主备切换次数为replicas次,这就提高了发布过程的不稳定性。
在接入分片配置后,用户可以控制Operator的发布流程,可以指定分片进行发布,也可以按照分片顺序自动发布。同时在每个分片内,会优先升级非Leader Pod,实现发布只有一次主备切换。
这种基于分片的渐进式发布策略,能够有效地控制新版本发布风险,降低异常爆炸半径。
更多
通过对请求的透明代理,可以方便我们做很多事情,比如故障注入以及可观测能力等,也在规划目标中。由于项目还在起步阶段,如果有好的建议,我们也非常欢迎小伙伴们加入到社区开发建设中来!
Star 一下✨
https://github.com/KusionStack/controller-mesh
https://github.com/KusionStack/kusion
https://github.com/KusionStack/catalog
https://github.com/KusionStack/operating
https://github.com/kcl-lang/kcl
|往期回顾|
KusionStack 发版啦,大幅降低上手门槛!还带来两位新朋友!
Kusion v0.8.2 发布啦!输出结果支持结构化展示,便于与其它系统集成
KusionStack 助力用户更好地使用 KubeVela