[](()全局高可用基础能力建设
================================================================================
在建设全局高可用能力之前,我们的系统在迅速发展和变化下不断出现事故和险情,需要隔三差五去应急,导致让问题追身的局面,并且追身后没高效应对的手段,面临着几个严峻的挑战:
-
如何在架构和能力上去提升我们的可用性,降低系统发生故障的概率和影响面?
-
如何在核心链路性能和架构上做一些突破,能够支撑这么复杂多变的业务场景和业务增长的通用需求?
-
如何让问题不再追身,做好预防工作,避免应急?
-
如何在应急发生时,能够快速发现,快速诊断,快速止损?
针对这些问题,并且总结出以下几个核心原因:
-
可用性能力不足:在集团场景下,组件不断在变化,不断增加系统的压力和复杂度,ASI 在生产可用性的能力上缺失,如限流降级、负载均衡等,组件容易乱用造成低级错误,影响集群可用性。
-
系统风控和 pod 保护能力不足:在人为误操作或系统 bug 时, 容易造成业务 pod 无辜受损或者大面积受损。
-
容量风险:集群数量几百,组件接近一百;另外历史问题因 podCIDR 和节点 IP 数的配置,大多 ASI 元集群的节点规模被约束在 128 台以内,随着业务快速发展,对容量风险而言存在较大挑战。
-
单集群规模受限,加上横向扩展能力不足影响业务发展:单集群不断增长规模,以及业务类型变化,组件变化都对单集群支撑的最大规模产生影响,对 SLO 持续稳定产生影响。
[](()1. 高可用基础能力顶层设计
针对这些解决的问题,我们做了高可用基础能力的顶层设计,这些基础能力建设整体主要分为几个部分:
-
性能优化和高可用架构建设:主要是从性能优化和架构升级的角度来提升整个集群支撑的业务类型和业务量。
-
组件规范全生命周期管理:主要从规范的角度在组件的整个生命周期去落地,从出生启用和集群准入开始,到每一次变更,到下线整个生命周期都要防止组件乱用、野蛮生长、无限膨胀,控制组件在系统可承受范围之内。
-
攻防体系建设:主要从 ASI 系统本身触发,在从攻击和防御的角度来提升系统的安全,防御和风控能力。
下面针对我们的一些痛点进行几个关键能力建设的描述。
[](()2. K8s 单集群架构的痛点
-
对 ApiServer 的掌控能力不够,应急能力不足,我们自己的经历,历次集群 Master 出现异常的次数超过 20+,历次恢复时间最长超过 1 小时。
-
ApiServer 是 APIServer 集群的单点,爆炸半径大。
-
单集群规模大, Apiserver 内存水位比较高,压力来源于频繁的查询,写入更多更大的资源对象。
-
在业务层缺少跨机房的容灾能力,当 ASI 不可用的时候,只能依赖 ASI 的恢复能力。
-
集群规模的持续扩大,离线任务的大量创建和删除对集群的造成更大压力。
这里面从两个大的角度可以去提高集群架构的可用性,除了在单集群进行架构优化以及性能突破外,还要通过多集群这样的横向扩展能力去支撑更大的规模。
-
一是通过联邦这样的多集群能力来解决单集群的横向扩展能力以及单地域跨集群容灾能力。
-
另外一个单集群本身的架构还可以从隔离和优先级策略的架构角度来进行差异化 SLO 保障。
[](()